https://github.com/torvalds/linux
Revision e9dd685ce81815811fb4da72e6ab10a694ac8468 authored by Steven Rostedt on 27 May 2014, 21:02:04 UTC, committed by Ingo Molnar on 05 June 2014, 09:07:41 UTC
As Peter Zijlstra told me, we have the following path:

do_exit()
  exit_itimers()
    itimer_delete()
      spin_lock_irqsave(&timer->it_lock, &flags);
      timer_delete_hook(timer);
        kc->timer_del(timer) := posix_cpu_timer_del()
          put_task_struct()
            __put_task_struct()
              task_numa_free()
                spin_lock(&grp->lock);

Which means that task_numa_free() can be called with interrupts
disabled, which means that we should not be using spin_lock_irq() but
spin_lock_irqsave() instead. Otherwise we are enabling interrupts while
holding an interrupt unsafe lock!

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner<tglx@linutronix.de>
Cc: Mike Galbraith <umgwanakikbuti@gmail.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/20140527182541.GH11096@twins.programming.kicks-ass.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent 6acbfb9
History
Tip revision: e9dd685ce81815811fb4da72e6ab10a694ac8468 authored by Steven Rostedt on 27 May 2014, 21:02:04 UTC
sched/numa: Fix use of spin_{un}lock_irq() when interrupts are disabled
Tip revision: e9dd685
File Mode Size
Makefile -rw-r--r-- 394 bytes
compat.c -rw-r--r-- 19.0 KB
compat_mq.c -rw-r--r-- 3.9 KB
ipc_sysctl.c -rw-r--r-- 7.0 KB
ipcns_notifier.c -rw-r--r-- 2.2 KB
mq_sysctl.c -rw-r--r-- 2.9 KB
mqueue.c -rw-r--r-- 35.3 KB
msg.c -rw-r--r-- 24.0 KB
msgutil.c -rw-r--r-- 3.6 KB
namespace.c -rw-r--r-- 4.7 KB
sem.c -rw-r--r-- 54.8 KB
shm.c -rw-r--r-- 31.9 KB
syscall.c -rw-r--r-- 2.3 KB
util.c -rw-r--r-- 22.3 KB
util.h -rw-r--r-- 6.4 KB

back to top