lkml.org 
[lkml]   [2008]   [Oct]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 23/35] cpumask: cpumask_any_but() From: Rusty Russell <>
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@rustcorp.com.au>
Signed-off-by: Mike Travis <travis@sgi.com>
---
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)
--


\
 
 \ /
  Last update: 2008-10-23 04:19    [W:0.304 / U:3.892 seconds]
©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site