• Mojiong Qiu's avatar
    xen/events: fix RCU warning, or Call idle notifier after irq_enter() · 772aebce
    Mojiong Qiu authored
    exit_idle() should be called after irq_enter(), otherwise it throws:
    
    [ INFO: suspicious RCU usage. ]
    3.6.5 #1 Not tainted
    -------------------------------
    include/linux/rcupdate.h:725 rcu_read_lock() used illegally while idle!
    
    other info that might help us debug this:
    
    RCU used illegally from idle CPU!
    rcu_scheduler_active = 1, debug_locks = 1
    RCU used illegally from extended quiescent state!
    1 lock held by swapper/0/0:
     #0:  (rcu_read_lock){......}, at: [<ffffffff810e9fe0>] __atomic_notifier_call_chain+0x0/0x140
    
    stack backtrace:
    Pid: 0, comm: swapper/0 Not tainted 3.6.5 #1
    Call Trace:
     <IRQ>  [<ffffffff811259a2>] lockdep_rcu_suspicious+0xe2/0x130
     [<ffffffff810ea10c>] __atomic_notifier_call_chain+0x12c/0x140
     [<ffffffff810e9fe0>] ? atomic_notifier_chain_unregister+0x90/0x90
     [<ffffffff811216cd>] ? trace_hardirqs_off+0xd/0x10
     [<ffffffff810ea136>] atomic_notifier_call_chain+0x16/0x20
     [<ffffffff810777c3>] exit_idle+0x43/0x50
     [<ffffffff81568865>] xen_evtchn_do_upcall+0x25/0x50
     [<ffffffff81aa690e>] xen_do_hypervisor_callback+0x1e/0x30
     <EOI>  [<ffffffff810013aa>] ? hypercall_page+0x3aa/0x1000
     [<ffffffff810013aa>] ? hypercall_page+0x3aa/0x1000
     [<ffffffff81061540>] ? xen_safe_halt+0x10/0x20
     [<ffffffff81075cfa>] ? default_idle+0xba/0x570
     [<ffffffff810778af>] ? cpu_idle+0xdf/0x140
     [<ffffffff81a4d881>] ? rest_init+0x135/0x144
     [<ffffffff81a4d74c>] ? csum_partial_copy_generic+0x16c/0x16c
     [<ffffffff82520c45>] ? start_kernel+0x3db/0x3e8
     [<ffffffff8252066a>] ? repair_env_string+0x5a/0x5a
     [<ffffffff82520356>] ? x86_64_start_reservations+0x131/0x135
     [<ffffffff82524aca>] ? xen_start_kernel+0x465/0x46
    
    Git commit 98ad1cc1
    Author: Frederic Weisbecker <fweisbec@gmail.com>
    Date:   Fri Oct 7 18:22:09 2011 +0200
    
        x86: Call idle notifier after irq_enter()
    
    did this, but it missed the Xen code.
    Signed-off-by: default avatarMojiong Qiu <mjqiu@tencent.com>
    Cc: stable@vger.kernel.org # from 3.3 and newer.
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    772aebce
events.c 42.4 KB