• preeti's avatar
    tick/idle/powerpc: Do not register idle states with CPUIDLE_FLAG_TIMER_STOP set in periodic mode · cc5a2f7b
    preeti authored
    On some archs, the local clockevent device stops in deep cpuidle states.
    The broadcast framework is used to wakeup cpus in these idle states, in
    which either an external clockevent device is used to send wakeup ipis
    or the hrtimer broadcast framework kicks in in the absence of such a
    device. One cpu is nominated as the broadcast cpu and this cpu sends
    wakeup ipis to sleeping cpus at the appropriate time. This is the
    implementation in the oneshot mode of broadcast.
    
    In periodic mode of broadcast however, the presence of such cpuidle
    states results in the cpuidle driver calling tick_broadcast_enable()
    which shuts down the local clockevent devices of all the cpus and
    appoints the tick broadcast device as the clockevent device for each of
    them. This works on those archs where the tick broadcast device is a
    real clockevent device.  But on archs which depend on the hrtimer mode
    of broadcast, the tick broadcast device hapens to be a pseudo device.
    The consequence is that the local clockevent devices of all cpus are
    shutdown and the kernel hangs at boot time in periodic mode.
    
    Let us thus not register the cpuidle states which have
    CPUIDLE_FLAG_TIMER_STOP flag set, on archs which depend on the hrtimer
    mode of broadcast in periodic mode. This patch takes care of doing this
    on powerpc. The cpus would not have entered into such deep cpuidle
    states in periodic mode on powerpc anyway. So there is no loss here.
    Signed-off-by: default avatarPreeti U Murthy <preeti@linux.vnet.ibm.com>
    Cc: 3.19+ <stable@vger.kernel.org> # 3.19+
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    cc5a2f7b
cpuidle-powernv.c 7.18 KB