aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/percpu.h
diff options
context:
space:
mode:
authorJan Blunck <jblunck@suse.de>2006-09-26 02:30:53 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-09-26 11:48:44 -0400
commit632bbfeee4f042c05bc65150b4433a297d3fe387 (patch)
treece67b5fa4bec38610fc0ecb9b20be6aa69763bb3 /include/linux/percpu.h
parent0a2966b48fb784e437520e400ddc94874ddbd4e8 (diff)
[PATCH] trigger a syntax error if percpu macros are incorrectly used
get_cpu_var()/per_cpu()/__get_cpu_var() arguments must be simple identifiers. Otherwise the arch dependent implementations might break. This patch enforces the correct usage of the macros by producing a syntax error if the variable is not a simple identifier. Signed-off-by: Jan Blunck <jblunck@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/percpu.h')
-rw-r--r--include/linux/percpu.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/include/linux/percpu.h b/include/linux/percpu.h
index cb9039a21f2..f926490a7d8 100644
--- a/include/linux/percpu.h
+++ b/include/linux/percpu.h
@@ -11,8 +11,14 @@
11#define PERCPU_ENOUGH_ROOM 32768 11#define PERCPU_ENOUGH_ROOM 32768
12#endif 12#endif
13 13
14/* Must be an lvalue. */ 14/*
15#define get_cpu_var(var) (*({ preempt_disable(); &__get_cpu_var(var); })) 15 * Must be an lvalue. Since @var must be a simple identifier,
16 * we force a syntax error here if it isn't.
17 */
18#define get_cpu_var(var) (*({ \
19 extern int simple_indentifier_##var(void); \
20 preempt_disable(); \
21 &__get_cpu_var(var); }))
16#define put_cpu_var(var) preempt_enable() 22#define put_cpu_var(var) preempt_enable()
17 23
18#ifdef CONFIG_SMP 24#ifdef CONFIG_SMP