[PATCH 7/8] cpumask: Provide a generic set of CPUMASK_ALLOC macros

From: Mike Travis
Date: Tue Jul 15 2008 - 17:16:09 EST


* Provide a generic set of CPUMASK_ALLOC macros patterned after the
SCHED_CPUMASK_ALLOC macros. This is used where multiple cpumask_t
variables are declared on the stack to reduce the amount of stack
space required.

Based on linux-2.6.tip/master at the following commit:

commit 0a91813e16ebd5c2d9b5c2acd5b7c91742112c4f
Merge: 9a635fa... 724dce0...
Author: Ingo Molnar <mingo@xxxxxxx>
Date: Tue Jul 15 14:55:17 2008 +0200

Signed-off-by: Mike Travis <travis@xxxxxxx>
Cc: Paul Jackson <pj@xxxxxxx>
---
include/linux/cpumask.h | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)

--- linux-2.6.tip.orig/include/linux/cpumask.h
+++ linux-2.6.tip/include/linux/cpumask.h
@@ -75,6 +75,17 @@
* CPU_MASK_NONE Initializer - no bits set
* unsigned long *cpus_addr(mask) Array of unsigned long's in mask
*
+ *if NR_CPUS > BITS_PER_LONG
+ * CPUMASK_ALLOC(m) Declares and allocates struct m *m =
+ * (struct m *)kmalloc(sizeof(*m), ...)
+ * CPUMASK_FREE(m) Macro for kfree(v)
+ *else
+ * CPUMASK_ALLOC(m) Declares struct m _m, *m = &_m
+ * CPUMASK_FREE(m) Nop
+ *endif
+ * CPUMASK_VAR(v, m) Declares cpumask_t *v =
+ * m + offset(struct m, v)
+ *
* int cpumask_scnprintf(buf, len, mask) Format cpumask for printing
* int cpumask_parse_user(ubuf, ulen, mask) Parse ascii string as cpumask
* int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing
@@ -311,6 +322,16 @@ extern cpumask_t cpu_mask_all;

#define cpus_addr(src) ((src).bits)

+#if NR_CPUS > BITS_PER_LONG
+#define CPUMASK_ALLOC(m) struct m *m = kmalloc(sizeof(*m), GFP_KERNEL)
+#define CPUMASK_FREE(m) kfree(m)
+#else
+#define CPUMASK_ALLOC(m) struct allmasks _m, *m = &_m
+#define CPUMASK_FREE(m)
+#endif
+#define CPUMASK_VAR(v, m) cpumask_t *v = (cpumask_t *) \
+ ((unsigned long)(m) + offsetof(struct m, v))
+
#define cpumask_scnprintf(buf, len, src) \
__cpumask_scnprintf((buf), (len), &(src), NR_CPUS)
static inline int __cpumask_scnprintf(char *buf, int len,

--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/