On Wed, Apr 30, 2025 at 04:33:19PM -0700, Sean Christopherson wrote: > Eww. That's quite painful, and completely disallowing enable_virt_on_load is > undesirable, e.g. for use cases where the host is (almost) exclusively running > VMs. I wanted to stay generic... :-) > Best idea I have is to throw in the towel on getting fancy, and just maintain a > dedicated count in SVM. > > Alternatively, we could plumb an arch hook into kvm_create_vm() and kvm_destroy_vm() > that's called when KVM adds/deletes a VM from vm_list, and key off vm_list being > empty. But that adds a lot of boilerplate just to avoid a mutex+count. FWIW, that was Tom's idea. > +static void svm_srso_add_remove_vm(int count) > +{ > + bool set; > + > + if (!cpu_feature_enabled(X86_FEATURE_SRSO_BP_SPEC_REDUCE)) > + return; > + > + guard(mutex)(&srso_lock); > + > + set = !srso_nr_vms; > + srso_nr_vms += count; > + > + WARN_ON_ONCE(srso_nr_vms < 0); > + if (!set && srso_nr_vms) > + return; So instead of doing this "by-foot", I would've used any of those atomic_inc_return() and atomic_dec_and_test() and act upon the value when it becomes 0 or !0 instead of passing 1 and -1. Because the count is kinda implicit... But yeah, not a biggie - that solves the issue too. Thanks! -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette