On Tue, Jul 22, 2025, lirongqing wrote: > From: Li RongQing <lirongqing@xxxxxxxxx> > > The commit b2798ba0b876 ("KVM: X86: Choose qspinlock when dedicated > physical CPUs are available") states that when PV_DEDICATED=1 > (vCPU has dedicated pCPU), qspinlock should be preferred regardless of > PV_UNHALT. However, the current implementation doesn't reflect this: when > PV_UNHALT=0, we still use virt_spin_lock() even with dedicated pCPUs. > > This is suboptimal because: > 1. Native qspinlocks should outperform virt_spin_lock() for dedicated > vCPUs irrespective of HALT exiting > 2. virt_spin_lock() should only be preferred when vCPUs may be preempted > (non-dedicated case) > > So reorder the PV spinlock checks to: > 1. First handle dedicated pCPU case (disable virt_spin_lock_key) > 2. Second check single CPU, and nopvspin configuration > 3. Only then check PV_UNHALT support > > This ensures we always use native qspinlock for dedicated vCPUs, delivering > pretty performance gains at high contention levels. > > Signed-off-by: Li RongQing <lirongqing@xxxxxxxxx> > --- Reviewed-by: Sean Christopherson <seanjc@xxxxxxxxxx>