• Anton Blanchard's avatar
    powerpc: Fix RCU idle and hcall tracing · a5ccfee0
    Anton Blanchard authored
    Tracepoints should not be called inside an rcu_idle_enter/rcu_idle_exit
    region. Since pSeries calls H_CEDE in the idle loop, we were violating
    this rule.
    
    commit a7b152d5 (powerpc: Tell RCU about idle after hcall tracing)
    tried to work around it by delaying the rcu_idle_enter until after we
    called the hcall tracepoint, but there are a number of issues with it.
    
    The hcall tracepoint trampoline code is called conditionally when the
    tracepoint is enabled. If the tracepoint is not enabled we never call
    rcu_idle_enter. The idle_uses_rcu check was also done at compile time
    which breaks multiplatform builds.
    
    The simple fix is to avoid tracing H_CEDE and rely on other tracepoints
    and the hypervisor dispatch trace log to work out if we called H_CEDE.
    
    This fixes a hang during boot on pSeries.
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Acked-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    a5ccfee0
idle.c 3.72 KB