[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>
This commit is contained in:
committed by
Linus Torvalds
parent
0a2966b48f
commit
632bbfeee4
@@ -15,18 +15,20 @@
|
||||
*/
|
||||
#if defined(__s390x__) && defined(MODULE)
|
||||
|
||||
#define __reloc_hide(var,offset) \
|
||||
(*({ unsigned long *__ptr; \
|
||||
asm ( "larl %0,per_cpu__"#var"@GOTENT" \
|
||||
: "=a" (__ptr) : "X" (per_cpu__##var) ); \
|
||||
(typeof(&per_cpu__##var))((*__ptr) + (offset)); }))
|
||||
#define __reloc_hide(var,offset) (*({ \
|
||||
extern int simple_indentifier_##var(void); \
|
||||
unsigned long *__ptr; \
|
||||
asm ( "larl %0,per_cpu__"#var"@GOTENT" \
|
||||
: "=a" (__ptr) : "X" (per_cpu__##var) ); \
|
||||
(typeof(&per_cpu__##var))((*__ptr) + (offset)); }))
|
||||
|
||||
#else
|
||||
|
||||
#define __reloc_hide(var, offset) \
|
||||
(*({ unsigned long __ptr; \
|
||||
asm ( "" : "=a" (__ptr) : "0" (&per_cpu__##var) ); \
|
||||
(typeof(&per_cpu__##var)) (__ptr + (offset)); }))
|
||||
#define __reloc_hide(var, offset) (*({ \
|
||||
extern int simple_indentifier_##var(void); \
|
||||
unsigned long __ptr; \
|
||||
asm ( "" : "=a" (__ptr) : "0" (&per_cpu__##var) ); \
|
||||
(typeof(&per_cpu__##var)) (__ptr + (offset)); }))
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user