Thread (7 messages) read the whole thread 7 messages, 3 authors, 2012-01-08

Re: [PATCH v5 1/8] smp: Introduce a generic on_each_cpu_mask function

From: Gilad Ben-Yossef <gilad@benyossef.com>
Date: 2012-01-08 16:04:19
Also in: linux-fsdevel, lkml

On Wed, Jan 4, 2012 at 12:26 AM, Andrew Morton
[off-list ref] wrote:
On Mon,  2 Jan 2012 12:24:12 +0200
Gilad Ben-Yossef [off-list ref] wrote:
quoted
on_each_cpu_mask calls a function on processors specified my cpumask,
which may include the local processor.

All the limitation specified in smp_call_function_many apply.

...
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -102,6 +102,13 @@ static inline void call_function_init(void) { }
 int on_each_cpu(smp_call_func_t func, void *info, int wait);

 /*
+ * Call a function on processors specified by mask, which might include
+ * the local one.
+ */
+void on_each_cpu_mask(const struct cpumask *mask, void (*func)(void *),
+             void *info, bool wait);
+
+/*
  * Mark the boot cpu "online" so that it can call console drivers in
  * printk() and can access its per-cpu storage.
  */
@@ -132,6 +139,15 @@ static inline int up_smp_call_function(smp_call_func_t func, void *info)
              local_irq_enable();             \
              0;                              \
      })
+#define on_each_cpu_mask(mask, func, info, wait) \
+     do {                                            \
+             if (cpumask_test_cpu(0, (mask))) {      \
+                     local_irq_disable();            \
+                     (func)(info);                   \
+                     local_irq_enable();             \
+             }                                       \
+     } while (0)
Why is the cpumask_test_cpu() call there?  It's hard to think of a
reason why "mask" would specify any CPU other than "0" in a
uniprocessor kernel.
As Michal already answered, because the current CPU might be not
specified in the mask, even on UP.
If this code remains as-is, please add a comment here explaining this,
so others don't wonder the same thing.
Comment added and will be included in V6.

Thanks for the review.

Gilad



-- 
Gilad Ben-Yossef
Chief Coffee Drinker
gilad@benyossef.com
Israel Cell: +972-52-8260388
US Cell: +1-973-8260388
http://benyossef.com

"Unfortunately, cache misses are an equal opportunity pain provider."
-- Mike Galbraith, LKML

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help