Skip to content
  • Colin Cross's avatar
    cpuidle: coupled: abort idle if pokes are pending · f983827b
    Colin Cross authored
    
    
    Joseph Lo <josephl@nvidia.com> reported a lockup on Tegra20 caused
    by a race condition in coupled cpuidle.  When two or more cpus
    enter idle at the same time, the first cpus to arrive may go to the
    ready loop without processing pending pokes from the last cpu to
    arrive.
    
    This patch adds a check for pending pokes once all cpus have been
    synchronized in the ready loop and resets the coupled state and
    retries if any cpus failed to handle their pending poke.
    
    Retrying on all cpus may trigger the same issue again, so this patch
    also adds a check to ensure that each cpu has received at least one
    poke between when it enters the waiting loop and when it moves on to
    the ready loop.
    
    Reported-and-tested-by: default avatarJoseph Lo <josephl@nvidia.com>
    Tested-by: default avatarStephen Warren <swarren@nvidia.com>
    Signed-off-by: default avatarColin Cross <ccross@android.com>
    Cc: 3.6+ <stable@vger.kernel.org> # 3.6+
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    f983827b