Re: [PATCH v6 16/31] KVM: nSVM: Unify handling of VMRUN failures with proper cleanup
From: Yosry Ahmed
Date: Mon Mar 02 2026 - 11:08:32 EST
> > As for refactoring the code, I didn't really do it for SMM, but I
> > think the code is generally cleaner with the single VMRUN failure
> > path.
>
> Except for the minor detail of being wrong :-)
I guess we're nitpicking now :P
> My preference is to completely drop these:
>
> KVM: nSVM: Unify handling of VMRUN failures with proper cleanup
> KVM: nSVM: Refactor minimal #VMEXIT handling out of nested_svm_vmexit()
> KVM: nSVM: Call nested_svm_init_mmu_context() before switching to VMCB02
> KVM: nSVM: Call nested_svm_merge_msrpm() from enter_svm_guest_mode()
> KVM: nSVM: Call enter_guest_mode() before switching to VMCB02
>
> > I am fine with dropping the stable@ tag from everything from this
> > point onward, or re-ordering the patches to keep it for the missing
> > consistency checks.
>
> And then moving these to the end of the series (or at least, beyond the stable@
> patches):
>
> KVM: nSVM: Make nested_svm_merge_msrpm() return an errno
I don't think there's much value in keeping this now, it was mainly needed for:
> KVM: nSVM: Call nested_svm_merge_msrpm() from enter_svm_guest_mode()
But I can keep it if you like it on its own.
> KVM: nSVM: Drop nested_vmcb_check_{save/control}() wrappers
This one will still be needed ahead of the consistency checks, specifically:
> KVM: nSVM: Add missing consistency check for hCR0.PG and NP_ENABLE
As we pass in L1's CR0, and with the wrappers in place it isn't
obviously correct that the current CR0 is L1's.
> > If you mean drop them completely, it's a bit of a shame because I
> > think the code ends up looking much better, but I also understand
> > given all the back-and-forth, and the new problem I reported recently
> > that will need further refactoring to address (see my other reply to
> > the same patch).
>
> After paging more of this stuff back in (it's been a while since I looked at the
> equivalent nVMX flow in depth), I'm quite opposed to aiming for a unified #VMEXIT
> path for VMRUN. Although it might seem otherwise at times, nVMX and nSVM didn't
> end up with nested_vmx_load_cr3() buried toward the end of their flows purely to
> make the code harder to read, there are real dependencies that need to be taken
> into account.
Yeah, and I tried to take them into account but that obviously didn't
work out well :)
> And there's also value in having similar flows for nVMX and nSVM, e.g. where most
> consistency checks occur before KVM starts loading L2 state. VMX just happens to
> architecturally _require_ that, whereas with SVM it was a naturally consequence
> of writing the code.
>
> Without the unification, a minimal #VMEXIT helper doesn't make any sense, and
> I don't see any strong justification for shuffling around the order.
Yeah that's fair.