Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba630e49 authored by Tejun Heo's avatar Tejun Heo
Browse files

cpumask: implement cpumask_parse()



We have cpulist_parse() but not cpumask_parse().  Implement it using
bitmap_parse().

bitmap_parse() is weird in that it takes @len for a string in
kernel-memory which also is inconsistent with bitmap_parselist().
Make cpumask_parse() calculate the length and don't expose the
inconsistency to cpumask users.  Maybe we can fix up bitmap_parse()
later.

This will be used to expose workqueue cpumask knobs to userland via
sysfs.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
parent 8719dcea
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -590,6 +590,21 @@ static inline int cpulist_scnprintf(char *buf, int len,
				    nr_cpumask_bits);
}

/**
 * cpumask_parse - extract a cpumask from from a string
 * @buf: the buffer to extract from
 * @dstp: the cpumask to set.
 *
 * Returns -errno, or 0 for success.
 */
static inline int cpumask_parse(const char *buf, struct cpumask *dstp)
{
	char *nl = strchr(buf, '\n');
	int len = nl ? nl - buf : strlen(buf);

	return bitmap_parse(buf, len, cpumask_bits(dstp), nr_cpumask_bits);
}

/**
 * cpulist_parse - extract a cpumask from a user string of ranges
 * @buf: the buffer to extract from