Commit 31f0b6c4 authored by KarimAllah Ahmed's avatar KarimAllah Ahmed Committed by Paolo Bonzini

KVM/nVMX: Use kvm_vcpu_map when mapping the L1 MSR bitmap

Use kvm_vcpu_map when mapping the L1 MSR bitmap since using
kvm_vcpu_gpa_to_page() and kmap() will only work for guest memory that has
a "struct page".
Signed-off-by: default avatarKarimAllah Ahmed <karahmed@amazon.de>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent b146b839
...@@ -519,9 +519,10 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu, ...@@ -519,9 +519,10 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu,
struct vmcs12 *vmcs12) struct vmcs12 *vmcs12)
{ {
int msr; int msr;
struct page *page;
unsigned long *msr_bitmap_l1; unsigned long *msr_bitmap_l1;
unsigned long *msr_bitmap_l0 = to_vmx(vcpu)->nested.vmcs02.msr_bitmap; unsigned long *msr_bitmap_l0 = to_vmx(vcpu)->nested.vmcs02.msr_bitmap;
struct kvm_host_map *map = &to_vmx(vcpu)->nested.msr_bitmap_map;
/* /*
* pred_cmd & spec_ctrl are trying to verify two things: * pred_cmd & spec_ctrl are trying to verify two things:
* *
...@@ -547,11 +548,10 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu, ...@@ -547,11 +548,10 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu,
!pred_cmd && !spec_ctrl) !pred_cmd && !spec_ctrl)
return false; return false;
page = kvm_vcpu_gpa_to_page(vcpu, vmcs12->msr_bitmap); if (kvm_vcpu_map(vcpu, gpa_to_gfn(vmcs12->msr_bitmap), map))
if (is_error_page(page))
return false; return false;
msr_bitmap_l1 = (unsigned long *)kmap(page); msr_bitmap_l1 = (unsigned long *)map->hva;
/* /*
* To keep the control flow simple, pay eight 8-byte writes (sixteen * To keep the control flow simple, pay eight 8-byte writes (sixteen
...@@ -604,8 +604,7 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu, ...@@ -604,8 +604,7 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu,
MSR_IA32_PRED_CMD, MSR_IA32_PRED_CMD,
MSR_TYPE_W); MSR_TYPE_W);
kunmap(page); kvm_vcpu_unmap(vcpu, &to_vmx(vcpu)->nested.msr_bitmap_map, false);
kvm_release_page_clean(page);
return true; return true;
} }
......
...@@ -144,6 +144,9 @@ struct nested_vmx { ...@@ -144,6 +144,9 @@ struct nested_vmx {
struct page *apic_access_page; struct page *apic_access_page;
struct page *virtual_apic_page; struct page *virtual_apic_page;
struct page *pi_desc_page; struct page *pi_desc_page;
struct kvm_host_map msr_bitmap_map;
struct pi_desc *pi_desc; struct pi_desc *pi_desc;
bool pi_pending; bool pi_pending;
u16 posted_intr_nv; u16 posted_intr_nv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment