diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/module.h | 11 | ||||
| -rw-r--r-- | include/linux/percpu.h | 7 |
2 files changed, 17 insertions, 1 deletions
diff --git a/include/linux/module.h b/include/linux/module.h index 5e869ffd34aa..8bd399a00343 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -330,8 +330,11 @@ struct module | |||
| 330 | struct module_notes_attrs *notes_attrs; | 330 | struct module_notes_attrs *notes_attrs; |
| 331 | #endif | 331 | #endif |
| 332 | 332 | ||
| 333 | #ifdef CONFIG_SMP | ||
| 333 | /* Per-cpu data. */ | 334 | /* Per-cpu data. */ |
| 334 | void *percpu; | 335 | void __percpu *percpu; |
| 336 | unsigned int percpu_size; | ||
| 337 | #endif | ||
| 335 | 338 | ||
| 336 | /* The command line arguments (may be mangled). People like | 339 | /* The command line arguments (may be mangled). People like |
| 337 | keeping pointers to this stuff */ | 340 | keeping pointers to this stuff */ |
| @@ -392,6 +395,7 @@ static inline int module_is_live(struct module *mod) | |||
| 392 | struct module *__module_text_address(unsigned long addr); | 395 | struct module *__module_text_address(unsigned long addr); |
| 393 | struct module *__module_address(unsigned long addr); | 396 | struct module *__module_address(unsigned long addr); |
| 394 | bool is_module_address(unsigned long addr); | 397 | bool is_module_address(unsigned long addr); |
| 398 | bool is_module_percpu_address(unsigned long addr); | ||
| 395 | bool is_module_text_address(unsigned long addr); | 399 | bool is_module_text_address(unsigned long addr); |
| 396 | 400 | ||
| 397 | static inline int within_module_core(unsigned long addr, struct module *mod) | 401 | static inline int within_module_core(unsigned long addr, struct module *mod) |
| @@ -563,6 +567,11 @@ static inline bool is_module_address(unsigned long addr) | |||
| 563 | return false; | 567 | return false; |
| 564 | } | 568 | } |
| 565 | 569 | ||
| 570 | static inline bool is_module_percpu_address(unsigned long addr) | ||
| 571 | { | ||
| 572 | return false; | ||
| 573 | } | ||
| 574 | |||
| 566 | static inline bool is_module_text_address(unsigned long addr) | 575 | static inline bool is_module_text_address(unsigned long addr) |
| 567 | { | 576 | { |
| 568 | return false; | 577 | return false; |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index a93e5bfdccb8..11d5f834b54a 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -137,6 +137,7 @@ extern int __init pcpu_page_first_chunk(size_t reserved_size, | |||
| 137 | extern void __percpu *__alloc_reserved_percpu(size_t size, size_t align); | 137 | extern void __percpu *__alloc_reserved_percpu(size_t size, size_t align); |
| 138 | extern void __percpu *__alloc_percpu(size_t size, size_t align); | 138 | extern void __percpu *__alloc_percpu(size_t size, size_t align); |
| 139 | extern void free_percpu(void __percpu *__pdata); | 139 | extern void free_percpu(void __percpu *__pdata); |
| 140 | extern bool is_kernel_percpu_address(unsigned long addr); | ||
| 140 | extern phys_addr_t per_cpu_ptr_to_phys(void *addr); | 141 | extern phys_addr_t per_cpu_ptr_to_phys(void *addr); |
| 141 | 142 | ||
| 142 | #ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA | 143 | #ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA |
| @@ -163,6 +164,12 @@ static inline void free_percpu(void __percpu *p) | |||
| 163 | kfree(p); | 164 | kfree(p); |
| 164 | } | 165 | } |
| 165 | 166 | ||
| 167 | /* can't distinguish from other static vars, always false */ | ||
| 168 | static inline bool is_kernel_percpu_address(unsigned long addr) | ||
| 169 | { | ||
| 170 | return false; | ||
| 171 | } | ||
| 172 | |||
| 166 | static inline phys_addr_t per_cpu_ptr_to_phys(void *addr) | 173 | static inline phys_addr_t per_cpu_ptr_to_phys(void *addr) |
| 167 | { | 174 | { |
| 168 | return __pa(addr); | 175 | return __pa(addr); |
