cpumask: implement cpumask_parse()
authorTejun Heo <tj@kernel.org>
Tue, 12 Mar 2013 18:30:04 +0000 (11:30 -0700)
committerTejun Heo <tj@kernel.org>
Tue, 12 Mar 2013 18:30:04 +0000 (11:30 -0700)
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: Tejun Heo <tj@kernel.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
include/linux/cpumask.h

index 032560295fcb7ffed482e979b7e39e7209a4d542..d08e4d2a9b92550af4b395bb62d101873d9d7731 100644 (file)
@@ -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