• Paul E. McKenney's avatar
    mm: Place preemption point in do_mlockall() loop · 22356f44
    Paul E. McKenney authored
    There is a loop in do_mlockall() that lacks a preemption point, which
    means that the following can happen on non-preemptible builds of the
    kernel. Dave Jones reports:
    
     "My fuzz tester keeps hitting this.  Every instance shows the non-irq
      stack came in from mlockall.  I'm only seeing this on one box, but
      that has more ram (8gb) than my other machines, which might explain
      it.
    
        INFO: rcu_preempt self-detected stall on CPU { 3}  (t=6500 jiffies g=470344 c=470343 q=0)
        sending NMI to all CPUs:
        NMI backtrace for cpu 3
        CPU: 3 PID: 29664 Comm: trinity-child2 Not tainted 3.11.0-rc1+ #32
        Call Trace:
          lru_add_drain_all+0x15/0x20
          SyS_mlockall+0xa5/0x1a0
          tracesys+0xdd/0xe2"
    
    This commit addresses this problem by inserting the required preemption
    point.
    Reported-by: default avatarDave Jones <davej@redhat.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com>
    Cc: Michel Lespinasse <walken@google.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    22356f44
mlock.c 21.2 KB