FAILED: patch "[PATCH] KVM: SVM: move guest vmsave/vmload back to assembly" failed to apply to 5.15-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.15-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]>.
Possible dependencies:
e61ab42de874 ("KVM: SVM: move guest vmsave/vmload back to assembly")f6d58266d731 ("KVM: SVM: retrieve VMCB from assembly")f7ef280132f9 ("KVM: SVM: adjust register allocation for __svm_vcpu_run()")16fdc1de169e ("KVM: SVM: replace regs argument of __svm_vcpu_run() with vcpu_svm") debc5a1ec0d1 ("KVM: x86: use a separate asm-offsets.c file")bb06650634d3 ("KVM: VMX: Convert launched argument to flags")8bd200d23ec4 ("KVM: VMX: Flatten __vmx_vcpu_run()")527a534c7326 ("x86/tdx: Provide common base for SEAMCALL and TDCALL C wrappers") 59bd54a84d15 ("x86/tdx: Detect running as a TDX guest in early boot")6198311093da ("x86/cc: Move arch/x86/{kernel/cc_platform.c => coco/core.c}")f94909ceb1ed ("x86: Prepare asm files for straight-line-speculation")22da5a07c75e ("x86/lib/atomic64_386_32: Rename things")1367afaa2ee9 ("x86/entry: Use the correct fence macro after swapgs in kernel CR3") c07e45553da1 ("x86/entry: Add a fence for kernel entry SWAPGS in paranoid_entry()") 6e5772c8d9cf ("Merge tag 'x86_cc_for_v5.16_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e61ab42de874c5af8c5d98b327c77a374d9e7da1 Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <[email protected]>
Date: Mon, 7 Nov 2022 05:14:27 -0500
Subject: [PATCH] KVM: SVM: move guest vmsave/vmload back to assembly
It is error-prone that code after vmexit cannot access percpu data because GSBASE has not been restored yet. It forces MSR_IA32_SPEC_CTRL save/restore to happen very late, after the predictor untraining sequence, and it gets in the way of return stack depth tracking (a retbleed mitigation that is in linux-next as of 2022-11-09).
As a first step towards fixing that, move the VMCB VMSAVE/VMLOAD to assembly, essentially undoing commit fb0c4a4fee5a ("KVM: SVM: move VMLOAD/VMSAVE to C code", 2021-03-15). The reason for that commit was that it made it simpler to use a different VMCB for VMLOAD/VMSAVE versus VMRUN; but that is not a big hassle anymore thanks to the kvm-asm-offsets machinery and other related cleanups.
The idea on how to number the exception tables is stolen from a prototype patch by Peter Zijlstra.
arch/x86/kvm/kvm-asm-offsets.c +1 -0
@@ -16,6 +16,7 @@ static void __used common(void)BLANK ();OFFSET (SVM_vcpu_arch_regs, vcpu_svm, vcpu.arch.regs);OFFSET (SVM_current_vmcb, vcpu_svm, current_vmcb); +OFFSET (SVM_vmcb01, vcpu_svm, vmcb01);OFFSET (KVM_VMCB_pa, kvm_vmcb_info, pa); }
arch/x86/kvm/svm/svm.c +0 -9
@@ -3910,16 +3910,7 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu) }else {struct svm_cpu_data *sd =per_cpu_ptr (&svm_data, vcpu->cpu); -/* -* Use a single vmcb (vmcb01 because it's always valid) for -* context switching guest state via VMLOAD/VMSAVE, that way -* the state doesn't need to be copied between vmcb01 and -* vmcb02 when switching vmcbs for nested virtualization. -*/ -vmload (svm->vmcb01.pa);__svm_vcpu_run (svm); -vmsave (svm->vmcb01.pa); -vmload (__sme_page_pa (sd->save_area)); }
arch/x86/kvm/svm/vmenter.S +38 -11
83 lines not on this page · raw message