From: Ingo Molnar Split the per-CPU timer base locks up into separate lock classes, because they are used recursively. Has no effect on non-lockdep kernels. Signed-off-by: Ingo Molnar Signed-off-by: Arjan van de Ven Signed-off-by: Andrew Morton --- kernel/timer.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff -puN kernel/timer.c~lockdep-annotate-timer-base-locks kernel/timer.c --- a/kernel/timer.c~lockdep-annotate-timer-base-locks +++ a/kernel/timer.c @@ -1559,6 +1559,13 @@ asmlinkage long sys_sysinfo(struct sysin return 0; } +/* + * lockdep: we want to track each per-CPU base as a separate lock-class, + * but timer-bases are kmalloc()-ed, so we need to attach separate + * keys to them: + */ +static struct lock_class_key base_lock_keys[NR_CPUS]; + static int __devinit init_timers_cpu(int cpu) { int j; @@ -1594,6 +1601,8 @@ static int __devinit init_timers_cpu(int } spin_lock_init(&base->lock); + lockdep_set_class(&base->lock, base_lock_keys + cpu); + for (j = 0; j < TVN_SIZE; j++) { INIT_LIST_HEAD(base->tv5.vec + j); INIT_LIST_HEAD(base->tv4.vec + j); _