mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
percpu, module: implement and use is_kernel/module_percpu_address()
lockdep has custom code to check whether a pointer belongs to static percpu area which is somewhat broken. Implement proper is_kernel/module_percpu_address() and replace the custom code. On UP, percpu variables are regular static variables and can't be distinguished from them. Always return %false on UP. Signed-off-by: Tejun Heo <[email protected]> Acked-by: Peter Zijlstra <[email protected]> Cc: Rusty Russell <[email protected]> Cc: Ingo Molnar <[email protected]>
This commit is contained in:
parent
259354deaa
commit
10fad5e46f
5 changed files with 77 additions and 16 deletions
|
|
@ -582,9 +582,6 @@ static int static_obj(void *obj)
|
|||
unsigned long start = (unsigned long) &_stext,
|
||||
end = (unsigned long) &_end,
|
||||
addr = (unsigned long) obj;
|
||||
#ifdef CONFIG_SMP
|
||||
int i;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* static variable?
|
||||
|
|
@ -595,24 +592,16 @@ static int static_obj(void *obj)
|
|||
if (arch_is_kernel_data(addr))
|
||||
return 1;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/*
|
||||
* percpu var?
|
||||
* in-kernel percpu var?
|
||||
*/
|
||||
for_each_possible_cpu(i) {
|
||||
start = (unsigned long) &__per_cpu_start + per_cpu_offset(i);
|
||||
end = (unsigned long) &__per_cpu_start + PERCPU_ENOUGH_ROOM
|
||||
+ per_cpu_offset(i);
|
||||
|
||||
if ((addr >= start) && (addr < end))
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
if (is_kernel_percpu_address(addr))
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* module var?
|
||||
* module static or percpu var?
|
||||
*/
|
||||
return is_module_address(addr);
|
||||
return is_module_address(addr) || is_module_percpu_address(addr);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue