Message ID | 20191021233027.21566-1-aaronlewis@google.com (mailing list archive) |
---|---|
Headers | show |
Series | Add support for XSAVES to AMD and unify it with Intel | expand |
On 22/10/19 01:30, Aaron Lewis wrote: > Unify AMD's and Intel's approach for supporting XSAVES. To do this > change Intel's approach from using the MSR-load areas to writing > the guest/host values to IA32_XSS on a VM-enter/VM-exit. Switching to > this strategy allows for a common approach between both AMD and Intel. > Additionally, define svm_xsaves_supported() based on AMD's feedback, and add > vcpu->arch.xsaves_enabled to track whether XSAVES is enabled in the guest. > > This change sets up IA32_XSS to be a non-zero value in the future, which > may happen sooner than later with support for guest CET feature being > added. > > v2 -> v3: > - Remove guest_xcr0_loaded from kvm_vcpu. > - Add vcpu->arch.xsaves_enabled. > - Add staged rollout to load the hardware IA32_XSS MSR with guest/host > values on VM-entry and VM-exit: > 1) Introduce vcpu->arch->xsaves_enabled. > 2) Add svm implementation for switching between guest and host IA32_XSS. > 3) Add vmx implementation for switching between guest and host IA32_XSS. > 4) Remove svm and vmx implementation and add it to common code. > > v1 -> v2: > - Add the flag xsaves_enabled to kvm_vcpu_arch to track when XSAVES is > enabled in the guest, whether or not XSAVES is enumerated in the > guest CPUID. > - Remove code that sets the X86_FEATURE_XSAVES bit in the guest CPUID > which was added in patch "Enumerate XSAVES in guest CPUID when it is > available to the guest". As a result we no longer need that patch. > - Added a comment to kvm_set_msr_common to describe how to save/restore > PT MSRS without using XSAVES/XRSTORS. > - Added more comments to the "Add support for XSAVES on AMD" patch. > - Replaced vcpu_set_msr_expect_result() with _vcpu_set_msr() in the > test library. > > Aaron Lewis (9): > KVM: x86: Introduce vcpu->arch.xsaves_enabled > KVM: VMX: Fix conditions for guest IA32_XSS support > KVM: x86: Remove unneeded kvm_vcpu variable, guest_xcr0_loaded > KVM: SVM: Use wrmsr for switching between guest and host IA32_XSS on AMD > KVM: VMX: Use wrmsr for switching between guest and host IA32_XSS on Intel > KVM: x86: Move IA32_XSS-swapping on VM-entry/VM-exit to common x86 code > kvm: x86: Move IA32_XSS to kvm_{get,set}_msr_common > kvm: svm: Update svm_xsaves_supported > kvm: tests: Add test to verify MSR_IA32_XSS > > arch/x86/include/asm/kvm_host.h | 1 + > arch/x86/kvm/svm.c | 9 ++- > arch/x86/kvm/vmx/vmx.c | 41 ++-------- > arch/x86/kvm/x86.c | 52 ++++++++++--- > arch/x86/kvm/x86.h | 4 +- > include/linux/kvm_host.h | 1 - > tools/testing/selftests/kvm/.gitignore | 1 + > tools/testing/selftests/kvm/Makefile | 1 + > .../selftests/kvm/include/x86_64/processor.h | 7 +- > .../selftests/kvm/lib/x86_64/processor.c | 72 +++++++++++++++--- > .../selftests/kvm/x86_64/xss_msr_test.c | 76 +++++++++++++++++++ > 11 files changed, 205 insertions(+), 60 deletions(-) > create mode 100644 tools/testing/selftests/kvm/x86_64/xss_msr_test.c > Queued, thanks. Paolo