diff options
author | Peter Xu <peterx@redhat.com> | 2020-04-16 11:59:06 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2020-05-15 12:26:14 -0400 |
commit | 5b494aea13fe9ec67365510c0d75835428cbb303 (patch) | |
tree | 9ed6d43f8a7c0fde6c9292ccc100271c522e4028 /virt | |
parent | dd03bcaad0b1a62c8ea6297e6f2a5993c1c5cd30 (diff) | |
download | linux-riscv-5b494aea13fe9ec67365510c0d75835428cbb303.tar.gz linux-riscv-5b494aea13fe9ec67365510c0d75835428cbb303.tar.bz2 linux-riscv-5b494aea13fe9ec67365510c0d75835428cbb303.zip |
KVM: No need to retry for hva_to_pfn_remapped()
hva_to_pfn_remapped() calls fixup_user_fault(), which has already
handled the retry gracefully. Even if "unlocked" is set to true, it
means that we've got a VM_FAULT_RETRY inside fixup_user_fault(),
however the page fault has already retried and we should have the pfn
set correctly. No need to do that again.
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20200416155906.267462-1-peterx@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'virt')
-rw-r--r-- | virt/kvm/kvm_main.c | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index e12317f32c5e..bef3d8d40685 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1831,8 +1831,6 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma, r = fixup_user_fault(current, current->mm, addr, (write_fault ? FAULT_FLAG_WRITE : 0), &unlocked); - if (unlocked) - return -EAGAIN; if (r) return r; @@ -1903,15 +1901,12 @@ static kvm_pfn_t hva_to_pfn(unsigned long addr, bool atomic, bool *async, goto exit; } -retry: vma = find_vma_intersection(current->mm, addr, addr + 1); 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, writable, &pfn); - if (r == -EAGAIN) - goto retry; if (r < 0) pfn = KVM_PFN_ERR_FAULT; } else { |