lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.14 093/161] kvm: Map PFN-type memory regions as writable (if possible)
    Date
    From: KarimAllah Ahmed <karahmed@amazon.de>

    [ Upstream commit a340b3e229b24a56f1c7f5826b15a3af0f4b13e5 ]

    For EPT-violations that are triggered by a read, the pages are also mapped with
    write permissions (if their memory region is also writable). That would avoid
    getting yet another fault on the same page when a write occurs.

    This optimization only happens when you have a "struct page" backing the memory
    region. So also enable it for memory regions that do not have a "struct page".

    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>
    Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    virt/kvm/kvm_main.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
    index d81af263f50b..4f35f0dfe681 100644
    --- a/virt/kvm/kvm_main.c
    +++ b/virt/kvm/kvm_main.c
    @@ -1434,7 +1434,8 @@ static bool vma_is_valid(struct vm_area_struct *vma, bool write_fault)

    static int hva_to_pfn_remapped(struct vm_area_struct *vma,
    unsigned long addr, bool *async,
    - bool write_fault, kvm_pfn_t *p_pfn)
    + bool write_fault, bool *writable,
    + kvm_pfn_t *p_pfn)
    {
    unsigned long pfn;
    int r;
    @@ -1460,6 +1461,8 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma,

    }

    + if (writable)
    + *writable = true;

    /*
    * Get a reference here because callers of *hva_to_pfn* and
    @@ -1525,7 +1528,7 @@ retry:
    if (vma == NULL)
    pfn = KVM_PFN_ERR_FAULT;
    else if (vma->vm_flags & (VM_IO | VM_PFNMAP)) {
    - r = hva_to_pfn_remapped(vma, addr, async, write_fault, &pfn);
    + r = hva_to_pfn_remapped(vma, addr, async, write_fault, writable, &pfn);
    if (r == -EAGAIN)
    goto retry;
    if (r < 0)
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 05:07    [W:4.532 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site