• Nikolay Borisov's avatar
    ipc/sem.c: add cond_resched in exit_sme · 2a1613a5
    Nikolay Borisov authored
    In CONFIG_PREEMPT=n kernel a softlockup was observed while the for loop in
    exit_sem.  Apparently it's possible for the loop to take quite a long time
    and it doesn't have a scheduling point in it.  Since the codes is
    executing under an rcu read section this may also cause rcu stalls, which
    in turn block synchronize_rcu operations, which more or less de-stabilises
    the whole system.
    
    Fix this by introducing a cond_resched() at the beginning of the loop.
    
    So this patch fixes the following:
    
      NMI watchdog: BUG: soft lockup - CPU#10 stuck for 23s! [httpd:18119]
      CPU: 10 PID: 18119 Comm: httpd Tainted: G           O    4.4.20-clouder2 #6
      Hardware name: Supermicro X10DRi/X10DRi, BIOS 1.1 04/14/2015
      task: ffff88348d695280 ti: ffff881c95550000 task.ti: ffff881c95550000
      RIP: 0010:[<ffffffff81614bc7>]  [<ffffffff81614bc7>] _raw_spin_lock+0x17/0x30
      RSP: 0018:ffff881c95553e40  EFLAGS: 00000246
      RAX: 0000000000000000 RBX: ffff883161b1eea8 RCX: 000000000000000d
      RDX: 0000000000000001 RSI: 000000000000000e RDI: ffff883161b1eea4
      RBP: ffff881c95553ea0 R08: ffff881c95553e68 R09: ffff883fef376f88
      R10: ffff881fffb58c20 R11: ffffea0072556600 R12: ffff883161b1eea0
      R13: ffff88348d695280 R14: ffff883dec427000 R15: ffff8831621672a0
      FS:  0000000000000000(0000) GS:ffff881fffb40000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f3b3723e020 CR3: 0000000001c0a000 CR4: 00000000001406e0
      Call Trace:
        ? exit_sem+0x7c/0x280
        do_exit+0x338/0xb40
        do_group_exit+0x43/0xd0
        SyS_exit_group+0x14/0x20
        entry_SYSCALL_64_fastpath+0x16/0x6e
    
    Link: http://lkml.kernel.org/r/1475154992-6363-1-git-send-email-kernel@kyup.comSigned-off-by: 's avatarNikolay Borisov <kernel@kyup.com>
    Cc: Herton R. Krzesinski <herton@redhat.com>
    Cc: Fabian Frederick <fabf@skynet.be>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Manfred Spraul <manfred@colorfullife.com>
    Signed-off-by: 's avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: 's avatarLinus Torvalds <torvalds@linux-foundation.org>
    2a1613a5