diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index 0666dfbe0bc0..9115467f208d 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -38,10 +38,17 @@ static void __do_tdx_cleanup(void) * 'multiple enabling' scenario. */ WARN_ON_ONCE(!tdx_cpuhp_state); - cpuhp_remove_state_nocalls(tdx_cpuhp_state); + cpuhp_remove_state_nocalls_cpuslocked(tdx_cpuhp_state); tdx_cpuhp_state = 0; } +static void __tdx_cleanup(void) +{ + cpus_read_lock(); + __do_tdx_cleanup(); + cpus_read_unlock(); +} + static int __init __do_tdx_bringup(void) { int r; @@ -103,7 +110,7 @@ static int __init __tdx_bringup(void) void tdx_cleanup(void) { if (enable_tdx) { - __do_tdx_cleanup(); + __tdx_cleanup(); kvm_disable_virtualization(); } }