On Mon, 17 Jun 2013 14:26:01 -0700 David Daney <ddaney@xxxxxxxxxxxxxxxxxx> wrote:
On 06/17/2013 02:13 PM, Andrew Morton wrote:On Mon, 17 Jun 2013 14:08:13 -0700 David Daney <ddaney@xxxxxxxxxxxxxxxxxx> wrote:
I think switch-back-to-a-macro is simplest and safest for now. Perhaps
you can queue a 3.11 patch which restores the C function and fixes up
mn10300 and ia64?
If the patch is reverted, I will do that.
I'm not proposing that we revert f21afc25f9ed4. Retain its
functionality, but do it via a macro for 3.10.
I misread your patch. Your patch may be incorrect in that the flags
variable you introduce has name space collisions with code using the
macro. Linus found this exact problem with the first version of my
patch (which was identical to your patch).
Sigh. Macros do so suck.
--- a/include/linux/smp.h~include-linux-smph-on_each_cpu-switch-back-to-a-macro
+++ a/include/linux/smp.h
@@ -11,7 +11,6 @@
#include <linux/list.h>
#include <linux/cpumask.h>
#include <linux/init.h>
-#include <linux/irqflags.h>
extern void cpu_idle(void);
@@ -140,17 +139,14 @@ static inline int up_smp_call_function(s
}
#define smp_call_function(func, info, wait) \
(up_smp_call_function(func, info))
-
-static inline int on_each_cpu(smp_call_func_t func, void *info, int wait)
-{
- unsigned long flags;
-
- local_irq_save(flags);
- func(info);
- local_irq_restore(flags);
- return 0;
-}
-
+#define on_each_cpu(func, info, wait) \
+ ({ \
+ unsigned long __flags; \
+ local_irq_save(__flags); \
+ func(info); \
+ local_irq_restore(__flags); \
+ 0; \
+ })
/*
* Note we still need to test the mask even for UP
* because we actually can get an empty mask from
_
Once you fix the name of 'flags', I hope you don't run into the same
Include Hell on ia64 and mn10300 that I did.
I build-tested ia64. I don't have an mn10300 cross-compiler set up.