|
@@ -1428,7 +1428,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;
|
|
@@ -1454,6 +1455,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
|
|
@@ -1519,7 +1522,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)
|