diff options
author | Tejun Heo <tj@kernel.org> | 2010-02-02 00:38:57 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-02-16 21:17:38 -0500 |
commit | 43cf38eb5cea91245502df3fcee4dbfc1c74dd1c (patch) | |
tree | a58ea87af1f07b8aed4941db074f44103f321f6e /mm/percpu.c | |
parent | ab386128f20c44c458a90039ab1bdc265ac474c9 (diff) |
percpu: add __percpu sparse annotations to core kernel subsystems
Add __percpu sparse annotations to core subsystems.
These annotations are to make sparse consider percpu variables to be
in a different address space and warn if accessed without going
through percpu accessors. This patch doesn't affect normal builds.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Christoph Lameter <cl@linux-foundation.org>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: linux-mm@kvack.org
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Dipankar Sarma <dipankar@in.ibm.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Eric Biederman <ebiederm@xmission.com>
Diffstat (limited to 'mm/percpu.c')
-rw-r--r-- | mm/percpu.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/mm/percpu.c b/mm/percpu.c index b336638d20e7..768419d44ad7 100644 --- a/mm/percpu.c +++ b/mm/percpu.c | |||
@@ -80,13 +80,15 @@ | |||
80 | /* default addr <-> pcpu_ptr mapping, override in asm/percpu.h if necessary */ | 80 | /* default addr <-> pcpu_ptr mapping, override in asm/percpu.h if necessary */ |
81 | #ifndef __addr_to_pcpu_ptr | 81 | #ifndef __addr_to_pcpu_ptr |
82 | #define __addr_to_pcpu_ptr(addr) \ | 82 | #define __addr_to_pcpu_ptr(addr) \ |
83 | (void *)((unsigned long)(addr) - (unsigned long)pcpu_base_addr \ | 83 | (void __percpu *)((unsigned long)(addr) - \ |
84 | + (unsigned long)__per_cpu_start) | 84 | (unsigned long)pcpu_base_addr + \ |
85 | (unsigned long)__per_cpu_start) | ||
85 | #endif | 86 | #endif |
86 | #ifndef __pcpu_ptr_to_addr | 87 | #ifndef __pcpu_ptr_to_addr |
87 | #define __pcpu_ptr_to_addr(ptr) \ | 88 | #define __pcpu_ptr_to_addr(ptr) \ |
88 | (void *)((unsigned long)(ptr) + (unsigned long)pcpu_base_addr \ | 89 | (void __force *)((unsigned long)(ptr) + \ |
89 | - (unsigned long)__per_cpu_start) | 90 | (unsigned long)pcpu_base_addr - \ |
91 | (unsigned long)__per_cpu_start) | ||
90 | #endif | 92 | #endif |
91 | 93 | ||
92 | struct pcpu_chunk { | 94 | struct pcpu_chunk { |
@@ -1065,7 +1067,7 @@ static struct pcpu_chunk *alloc_pcpu_chunk(void) | |||
1065 | * RETURNS: | 1067 | * RETURNS: |
1066 | * Percpu pointer to the allocated area on success, NULL on failure. | 1068 | * Percpu pointer to the allocated area on success, NULL on failure. |
1067 | */ | 1069 | */ |
1068 | static void *pcpu_alloc(size_t size, size_t align, bool reserved) | 1070 | static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved) |
1069 | { | 1071 | { |
1070 | static int warn_limit = 10; | 1072 | static int warn_limit = 10; |
1071 | struct pcpu_chunk *chunk; | 1073 | struct pcpu_chunk *chunk; |
@@ -1194,7 +1196,7 @@ fail_unlock_mutex: | |||
1194 | * RETURNS: | 1196 | * RETURNS: |
1195 | * Percpu pointer to the allocated area on success, NULL on failure. | 1197 | * Percpu pointer to the allocated area on success, NULL on failure. |
1196 | */ | 1198 | */ |
1197 | void *__alloc_percpu(size_t size, size_t align) | 1199 | void __percpu *__alloc_percpu(size_t size, size_t align) |
1198 | { | 1200 | { |
1199 | return pcpu_alloc(size, align, false); | 1201 | return pcpu_alloc(size, align, false); |
1200 | } | 1202 | } |
@@ -1215,7 +1217,7 @@ EXPORT_SYMBOL_GPL(__alloc_percpu); | |||
1215 | * RETURNS: | 1217 | * RETURNS: |
1216 | * Percpu pointer to the allocated area on success, NULL on failure. | 1218 | * Percpu pointer to the allocated area on success, NULL on failure. |
1217 | */ | 1219 | */ |
1218 | void *__alloc_reserved_percpu(size_t size, size_t align) | 1220 | void __percpu *__alloc_reserved_percpu(size_t size, size_t align) |
1219 | { | 1221 | { |
1220 | return pcpu_alloc(size, align, true); | 1222 | return pcpu_alloc(size, align, true); |
1221 | } | 1223 | } |
@@ -1267,7 +1269,7 @@ static void pcpu_reclaim(struct work_struct *work) | |||
1267 | * CONTEXT: | 1269 | * CONTEXT: |
1268 | * Can be called from atomic context. | 1270 | * Can be called from atomic context. |
1269 | */ | 1271 | */ |
1270 | void free_percpu(void *ptr) | 1272 | void free_percpu(void __percpu *ptr) |
1271 | { | 1273 | { |
1272 | void *addr; | 1274 | void *addr; |
1273 | struct pcpu_chunk *chunk; | 1275 | struct pcpu_chunk *chunk; |