• Paul Gortmaker's avatar
    rcu: Use simple wait queues where possible in rcutree · abedf8e2
    Paul Gortmaker authored
    As of commit dae6e64d ("rcu: Introduce proper blocking to no-CBs kthreads
    GP waits") the RCU subsystem started making use of wait queues.
    
    Here we convert all additions of RCU wait queues to use simple wait queues,
    since they don't need the extra overhead of the full wait queue features.
    
    Originally this was done for RT kernels[1], since we would get things like...
    
      BUG: sleeping function called from invalid context at kernel/rtmutex.c:659
      in_atomic(): 1, irqs_disabled(): 1, pid: 8, name: rcu_preempt
      Pid: 8, comm: rcu_preempt Not tainted
      Call Trace:
       [<ffffffff8106c8d0>] __might_sleep+0xd0/0xf0
       [<ffffffff817d77b4>] rt_spin_lock+0x24/0x50
       [<ffffffff8106fcf6>] __wake_up+0x36/0x70
       [<ffffffff810c4542>] rcu_gp_kthread+0x4d2/0x680
       [<ffffffff8105f910>] ? __init_waitqueue_head+0x50/0x50
       [<ffffffff810c4070>] ? rcu_gp_fqs+0x80/0x80
       [<ffffffff8105eabb>] kthread+0xdb/0xe0
       [<ffffffff8106b912>] ? finish_task_switch+0x52/0x100
       [<ffffffff817e0754>] kernel_thread_helper+0x4/0x10
       [<ffffffff8105e9e0>] ? __init_kthread_worker+0x60/0x60
       [<ffffffff817e0750>] ? gs_change+0xb/0xb
    
    ...and hence simple wait queues were deployed on RT out of necessity
    (as simple wait uses a raw lock), but mainline might as well take
    advantage of the more streamline support as well.
    
    [1] This is a carry forward of work from v3.10-rt; the original conversion
    was by Thomas on an earlier -rt version, and Sebastian extended it to
    additional post-3.10 added RCU waiters; here I've added a commit log and
    unified the RCU changes into one, and uprev'd it to match mainline RCU.
    Signed-off-by: default avatarDaniel Wagner <daniel.wagner@bmw-carit.de>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Marcelo Tosatti <mtosatti@redhat.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    Link: http://lkml.kernel.org/r/1455871601-27484-6-git-send-email-wagi@monom.orgSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    abedf8e2
tree.c 142 KB