FAILED: patch "[PATCH] KVM: nSVM: Refactor writing vmcb12 on nested #VMEXIT as a" failed to apply to 6.1-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x dcf3648ab71437b504abbfdc4e74622a0f1a56e3
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026050339-walmart-slain-d2eb@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From dcf3648ab71437b504abbfdc4e74622a0f1a56e3 Mon Sep 17 00:00:00 2001
From: Yosry Ahmed <[email protected]>
Date: Tue, 3 Mar 2026 00:34:01 +0000
Subject: [PATCH] KVM: nSVM: Refactor writing vmcb12 on nested #VMEXIT as a
helper
Move mapping vmcb12 and updating it out of nested_svm_vmexit() into a helper, no functional change intended.
arch/x86/kvm/svm/nested.c +44 -33
@@ -1124,36 +1124,20 @@ void svm_copy_vmloadsave_state(struct vmcb *to_vmcb, struct vmcb *from_vmcb) to_vmcb->save.sysenter_eip = from_vmcb->save.sysenter_eip; } -int nested_svm_vmexit (struct vcpu_svm *svm) +static int nested_svm_vmexit_update_vmcb12 (struct kvm_vcpu *vcpu) { -struct kvm_vcpu *vcpu = &svm->vcpu; -struct vmcb *vmcb01 = svm->vmcb01.ptr; +struct vcpu_svm *svm =to_svm (vcpu);struct vmcb *vmcb02 = svm->nested.vmcb02.ptr; -struct vmcb *vmcb12;struct kvm_host_map map; +struct vmcb *vmcb12;int rc; rc =kvm_vcpu_map (vcpu,gpa_to_gfn (svm->nested.vmcb12_gpa), &map); -if (rc) { -if (rc == -EINVAL ) -kvm_inject_gp (vcpu,0 ); -return 1 ; - } +if (rc) +return rc; vmcb12 = map.hva; -/* Exit Guest-Mode */ -leave_guest_mode (vcpu); - svm->nested.vmcb12_gpa =0 ; -WARN_ON_ONCE (svm->nested.nested_run_pending); - -kvm_clear_request (KVM_REQ_GET_NESTED_STATE_PAGES , vcpu); - -/* in case we halted in L2 */ -kvm_set_mp_state (vcpu,KVM_MP_STATE_RUNNABLE ); - -/* Give the current vmcb to the guest */ - vmcb12->save.es = vmcb02->save.es; vmcb12->save.cs = vmcb02->save.cs; vmcb12->save.ss = vmcb02->save.ss;
@@ -1190,10 +1174,48 @@ int nested_svm_vmexit(struct vcpu_svm *svm)if (guest_cpu_cap_has (vcpu,X86_FEATURE_NRIPS )) vmcb12->control.next_rip = vmcb02->control.next_rip; +if (nested_vmcb12_has_lbrv (vcpu)) +svm_copy_lbrs (&vmcb12->save, &vmcb02->save); + vmcb12->control.int_ctl = svm->nested.ctl.int_ctl; vmcb12->control.event_inj = svm->nested.ctl.event_inj; vmcb12->control.event_inj_err = svm->nested.ctl.event_inj_err; +trace_kvm_nested_vmexit_inject (vmcb12->control.exit_code, + vmcb12->control.exit_info_1, + vmcb12->control.exit_info_2, + vmcb12->control.exit_int_info, + vmcb12->control.exit_int_info_err, +KVM_ISA_SVM ); + +kvm_vcpu_unmap (vcpu, &map); +return 0 ; +} + +int nested_svm_vmexit (struct vcpu_svm *svm) +{ +struct kvm_vcpu *vcpu = &svm->vcpu; +struct vmcb *vmcb01 = svm->vmcb01.ptr; +struct vmcb *vmcb02 = svm->nested.vmcb02.ptr; +int rc; + + rc =nested_svm_vmexit_update_vmcb12 (vcpu); +if (rc) { +if (rc == -EINVAL ) +kvm_inject_gp (vcpu,0 ); +return 1 ; + } + +/* Exit Guest-Mode */ +leave_guest_mode (vcpu); + svm->nested.vmcb12_gpa =0 ; +WARN_ON_ONCE (svm->nested.nested_run_pending); + +kvm_clear_request (KVM_REQ_GET_NESTED_STATE_PAGES , vcpu); + +/* in case we halted in L2 */ +kvm_set_mp_state (vcpu,KVM_MP_STATE_RUNNABLE ); +if (!kvm_pause_in_guest (vcpu->kvm)) { vmcb01->control.pause_filter_count = vmcb02->control.pause_filter_count;vmcb_mark_dirty (vmcb01,VMCB_INTERCEPTS );
@@ -1238,9 +1260,7 @@ int nested_svm_vmexit(struct vcpu_svm *svm)if (!nested_exit_on_intr (svm))kvm_make_request (KVM_REQ_EVENT , &svm->vcpu); -if (nested_vmcb12_has_lbrv (vcpu)) { -svm_copy_lbrs (&vmcb12->save, &vmcb02->save); - }else { +if (!nested_vmcb12_has_lbrv (vcpu)) {svm_copy_lbrs (&vmcb01->save, &vmcb02->save);vmcb_mark_dirty (vmcb01,VMCB_LBR ); }
@@ -1296,15 +1316,6 @@ int nested_svm_vmexit(struct vcpu_svm *svm) svm->vcpu.arch.dr7 =DR7_FIXED_1 ;kvm_update_dr7 (&svm->vcpu); -trace_kvm_nested_vmexit_inject (vmcb12->control.exit_code, - vmcb12->control.exit_info_1, - vmcb12->control.exit_info_2, - vmcb12->control.exit_int_info, - vmcb12->control.exit_int_info_err, -KVM_ISA_SVM ); - -kvm_vcpu_unmap (vcpu, &map); -nested_svm_transition_tlb_flush (vcpu);nested_svm_uninit_mmu_context (vcpu);