On Fri, Mar 17, 2017 at 02:07:05AM +0800, kernel test robot wrote: > locking/lockdep: Handle statically initialized PER_CPU locks properly > [ 11.712266] INFO: trying to register non-static key. Blergh; so the problem is that when we assign can_addr to lock->key, we can, upon using a different subclass, reach static_obj(lock->key), which will fail on the can_addr. One way to fix this would be to redefine the canonical address as the per-cpu address for a specific cpu; the below hard codes cpu0, but I'm not sure we want to rely on cpu0 being a valid cpu. --- diff --git a/kernel/module.c b/kernel/module.c index 5ef618133849..bdd9d62ce08c 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -682,8 +682,10 @@ bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr) void *va = (void *)addr; if (va >= start && va < start + mod->percpu_size) { - if (can_addr) + if (can_addr) { *can_addr = (unsigned long) (va - start); + *can_addr += (unsigned long)per_cpu_ptr(mod->percpu, 0); + } preempt_enable(); return true; } diff --git a/mm/percpu.c b/mm/percpu.c index e30c995f2b7b..a5d7b7477888 100644 --- a/mm/percpu.c +++ b/mm/percpu.c @@ -1296,8 +1296,10 @@ bool __is_kernel_percpu_address(unsigned long addr, unsigned long *can_addr) void *va = (void *)addr; if (va >= start && va < start + static_size) { - if (can_addr) + if (can_addr) { *can_addr = (unsigned long) (va - start); + *can_addr += (unsigned long)per_cpu_ptr(base, 0); + } return true; } } -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>