• H. Peter Anvin's avatar
    x86, hotplug: Move WBINVD back outside the play_dead loop · a68e5c94
    H. Peter Anvin authored
    On processors with hyperthreading, when only one thread is offlined
    the other thread can cause a spurious wakeup on the idled thread.  We
    do not want to re-WBINVD when that happens.
    
    Ideally, we should simply skip WBINVD unless we're the last thread on
    a particular core to shut down, but there might be similar issues
    elsewhere in the system.
    
    Thus, revert to previous behavior of only WBINVD outside the loop.
    Partly as a result, remove the mb()'s around it: they are not
    necessary since wbinvd() is a serializing instruction, but they were
    intended to make sure the compiler didn't do any funny loop
    optimizations.
    Reported-by: default avatarAsit Mallick <asit.k.mallick@intel.com>
    Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    Cc: Arjan van de Ven <arjan@linux.kernel.org>
    Cc: Len Brown <lenb@kernel.org>
    Cc: Venkatesh Pallipadi <venki@google.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.hl>
    LKML-Reference: <tip-ea530692@git.kernel.org>
    a68e5c94
smpboot.c 35.5 KB