]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
KVM: selftests: nSVM: Set up MSR-Bitmap for SVM guests
authorVitaly Kuznetsov <vkuznets@redhat.com>
Thu, 3 Feb 2022 10:46:18 +0000 (11:46 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 10 Feb 2022 18:50:47 +0000 (13:50 -0500)
Similar to VMX, allocate memory for MSR-Bitmap and fill in 'msrpm_base_pa'
in VMCB. To use it, tests will need to set INTERCEPT_MSR_PROT interception
along with the required bits in the MSR-Bitmap.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Message-Id: <20220203104620.277031-5-vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/include/x86_64/svm_util.h
tools/testing/selftests/kvm/lib/x86_64/svm.c

index 587fbe408b99a26ef9ae4fb3c01e5871f15e0241..e23c8a3e8a663209d98230e9ead007c3cbaca8e6 100644 (file)
@@ -28,6 +28,11 @@ struct svm_test_data {
        struct vmcb_save_area *save_area; /* gva */
        void *save_area_hva;
        uint64_t save_area_gpa;
+
+       /* MSR-Bitmap */
+       void *msr; /* gva */
+       void *msr_hva;
+       uint64_t msr_gpa;
 };
 
 struct svm_test_data *vcpu_alloc_svm(struct kvm_vm *vm, vm_vaddr_t *p_svm_gva);
index 0ebc03ce079ca72d335ec276f1488f8fa88d639d..736ee4a23df62e5c4095724646dced3d8c699c51 100644 (file)
@@ -43,6 +43,11 @@ vcpu_alloc_svm(struct kvm_vm *vm, vm_vaddr_t *p_svm_gva)
        svm->save_area_hva = addr_gva2hva(vm, (uintptr_t)svm->save_area);
        svm->save_area_gpa = addr_gva2gpa(vm, (uintptr_t)svm->save_area);
 
+       svm->msr = (void *)vm_vaddr_alloc_page(vm);
+       svm->msr_hva = addr_gva2hva(vm, (uintptr_t)svm->msr);
+       svm->msr_gpa = addr_gva2gpa(vm, (uintptr_t)svm->msr);
+       memset(svm->msr_hva, 0, getpagesize());
+
        *p_svm_gva = svm_gva;
        return svm;
 }
@@ -106,6 +111,7 @@ void generic_svm_setup(struct svm_test_data *svm, void *guest_rip, void *guest_r
        save->dbgctl = rdmsr(MSR_IA32_DEBUGCTLMSR);
        ctrl->intercept = (1ULL << INTERCEPT_VMRUN) |
                                (1ULL << INTERCEPT_VMMCALL);
+       ctrl->msrpm_base_pa = svm->msr_gpa;
 
        vmcb->save.rip = (u64)guest_rip;
        vmcb->save.rsp = (u64)guest_rsp;