percpu: make accessors check for percpu pointer in sparse
The previous patch made sparse warn about percpu variables being used directly without going through percpu accessors. This patch implements the other half - checking whether non percpu variable is passed into percpu accessors. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -18,6 +18,16 @@
|
||||
#define __PCPU_DUMMY_ATTRS \
|
||||
__attribute__((section(".discard"), unused))
|
||||
|
||||
/*
|
||||
* Macro which verifies @ptr is a percpu pointer without evaluating
|
||||
* @ptr. This is to be used in percpu accessors to verify that the
|
||||
* input parameter is a percpu pointer.
|
||||
*/
|
||||
#define __verify_pcpu_ptr(ptr) do { \
|
||||
void __percpu *__vpp_verify = (typeof(ptr))NULL; \
|
||||
(void)__vpp_verify; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* s390 and alpha modules require percpu variables to be defined as
|
||||
* weak to force the compiler to generate GOT based external
|
||||
@@ -129,10 +139,16 @@
|
||||
__aligned(PAGE_SIZE)
|
||||
|
||||
/*
|
||||
* Intermodule exports for per-CPU variables.
|
||||
* Intermodule exports for per-CPU variables. sparse forgets about
|
||||
* address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to
|
||||
* noop if __CHECKER__.
|
||||
*/
|
||||
#ifndef __CHECKER__
|
||||
#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(var)
|
||||
#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(var)
|
||||
|
||||
#else
|
||||
#define EXPORT_PER_CPU_SYMBOL(var)
|
||||
#define EXPORT_PER_CPU_SYMBOL_GPL(var)
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_PERCPU_DEFS_H */
|
||||
|
Reference in New Issue
Block a user