[PATCH 23/35] cpumask: cpumask_any_but() From: Rusty Russell <rusty@rustcorp.com.au>

From: Mike Travis
Date: Wed Oct 22 2008 - 22:16:29 EST


There's a common case where we want any online cpu except a particular
one. This creates a helper to do that, otherwise we need a temp var
and cpumask_andnot().

Signed-off-by: Rusty Russell <rusty@xxxxxxxxxxxxxxx>
Signed-off-by: Mike Travis <travis@xxxxxxx>
---
include/linux/cpumask.h | 3 +++
lib/cpumask.c | 10 ++++++++++
2 files changed, 13 insertions(+)

--- linux-2.6.28.orig/include/linux/cpumask.h
+++ linux-2.6.28/include/linux/cpumask.h
@@ -110,6 +110,7 @@
*
* int cpumask_any(mask) Any cpu in mask
* int cpumask_any_and(mask1,mask2) Any cpu in both masks
+ * int cpumask_any_but(mask,cpu) Any cpu in mask except cpu
*
* for_each_possible_cpu(cpu) for-loop cpu over cpu_possible_map
* for_each_online_cpu(cpu) for-loop cpu over cpu_online_map
@@ -451,6 +452,7 @@ extern cpumask_t cpu_mask_all;
#define cpumask_first(src) ({ (void)(src); 0; })
#define cpumask_next(n, src) ({ (void)(src); 1; })
#define cpumask_next_and(n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; })
+#define cpumask_any_but(mask, cpu) ({ (void)(mask); (void)(cpu); 0; })

#define for_each_cpu(cpu, mask) \
for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
@@ -462,6 +464,7 @@ extern cpumask_t cpu_mask_all;
int cpumask_first(const cpumask_t *srcp);
int cpumask_next(int n, const cpumask_t *srcp);
int cpumask_next_and(int n, const cpumask_t *srcp, const cpumask_t *andp);
+int cpumask_any_but(const struct cpumask *mask, unsigned int cpu);

#define for_each_cpu(cpu, mask) \
for ((cpu) = -1; \
--- linux-2.6.28.orig/lib/cpumask.c
+++ linux-2.6.28/lib/cpumask.c
@@ -24,6 +24,16 @@ int cpumask_next_and(int n, const cpumas
}
EXPORT_SYMBOL(cpumask_next_and);

+int cpumask_any_but(const struct cpumask *mask, unsigned int cpu)
+{
+ unsigned int i;
+
+ for_each_cpu(i, mask)
+ if (i != cpu)
+ break;
+ return i;
+}
+
/* These are not inline because of header tangles. */
#ifdef CONFIG_CPUMASK_OFFSTACK
bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)

--
--
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/