Performance drop is reported when running encode/decode workload and BenchSEE cache sub-workload. Bisect points to commit ce0a1b608bfc ("x86/paravirt: Silence unused native_pv_lock_init() function warning"). When CONFIG_PARAVIRT_SPINLOCKS is disabled the virt_spin_lock_key is set to true on bare-metal. The qspinlock degenerates to test-and-set spinlock, which decrease the performance on bare-metal. Fix this by disabling virt_spin_lock_key if CONFIG_PARAVIRT_SPINLOCKS is not set, or it is on bare-metal. Fixes: ce0a1b608bfc ("x86/paravirt: Silence unused native_pv_lock_init() function warning") Suggested-by: Qiuxu Zhuo <qiuxu.zhuo@xxxxxxxxx> Reported-by: Prem Nath Dey <prem.nath.dey@xxxxxxxxx> Reported-by: Xiaoping Zhou <xiaoping.zhou@xxxxxxxxx> Signed-off-by: Chen Yu <yu.c.chen@xxxxxxxxx> --- arch/x86/kernel/paravirt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c index 5358d43886ad..ee51c0949ed8 100644 --- a/arch/x86/kernel/paravirt.c +++ b/arch/x86/kernel/paravirt.c @@ -55,7 +55,7 @@ DEFINE_STATIC_KEY_TRUE(virt_spin_lock_key); void __init native_pv_lock_init(void) { - if (IS_ENABLED(CONFIG_PARAVIRT_SPINLOCKS) && + if (!IS_ENABLED(CONFIG_PARAVIRT_SPINLOCKS) || !boot_cpu_has(X86_FEATURE_HYPERVISOR)) static_branch_disable(&virt_spin_lock_key); } -- 2.25.1