KVM: selftests: nSVM: Set up MSR-Bitmap for SVM guests
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>
This commit is contained in:
parent
70e477d996
commit
0b815117da
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user