lkml.org 
[lkml]   [2018]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 08/12] KVM/VMX: Use the new host mapping API for mapping nested PML
    Date
    For nested guests the PML page was mapped to the host kernel using
    kvm_vcpu_gpa_to_page which assumes that all guest memory is backed by a
    "struct page". This breaks guests that have their memory outside the kernel
    control.

    Switch to the new host mapping API which takes care of this use-case as
    well.

    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: kvm@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
    ---
    arch/x86/kvm/vmx.c | 11 +++++------
    1 file changed, 5 insertions(+), 6 deletions(-)

    diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
    index 7177176..620b4ff 100644
    --- a/arch/x86/kvm/vmx.c
    +++ b/arch/x86/kvm/vmx.c
    @@ -11866,7 +11866,7 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu)
    struct vmcs12 *vmcs12;
    struct vcpu_vmx *vmx = to_vmx(vcpu);
    gpa_t gpa;
    - struct page *page = NULL;
    + struct kvm_host_mapping mapping;
    u64 *pml_address;

    if (is_guest_mode(vcpu)) {
    @@ -11888,14 +11888,13 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu)

    gpa = vmcs_read64(GUEST_PHYSICAL_ADDRESS) & ~0xFFFull;

    - page = kvm_vcpu_gpa_to_page(vcpu, vmcs12->pml_address);
    - if (is_error_page(page))
    + if (!kvm_vcpu_gpa_to_host_mapping(vcpu, vmcs12->pml_address, &mapping, true))
    return 0;

    - pml_address = kmap(page);
    + pml_address = mapping.kaddr;
    pml_address[vmcs12->guest_pml_index--] = gpa;
    - kunmap(page);
    - kvm_release_page_clean(page);
    +
    + kvm_release_host_mapping(&mapping, false);
    }

    return 0;
    --
    2.7.4
    \
     
     \ /
      Last update: 2018-02-05 19:51    [W:3.499 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site