vfio: Fix PCI mmap after b3b9c293
Our mmap path mistakely relied on vma->vm_pgoff to get set in
remap_pfn_range. After b3b9c293
, that path only applies to
copy-on-write mappings. Set it in our own code.
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
2474542f64
commit
34002f54d2
|
@ -408,7 +408,7 @@ static int vfio_pci_mmap(void *device_data, struct vm_area_struct *vma)
|
||||||
struct vfio_pci_device *vdev = device_data;
|
struct vfio_pci_device *vdev = device_data;
|
||||||
struct pci_dev *pdev = vdev->pdev;
|
struct pci_dev *pdev = vdev->pdev;
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
u64 phys_len, req_len, pgoff, req_start, phys;
|
u64 phys_len, req_len, pgoff, req_start;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
index = vma->vm_pgoff >> (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT);
|
index = vma->vm_pgoff >> (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT);
|
||||||
|
@ -463,10 +463,9 @@ static int vfio_pci_mmap(void *device_data, struct vm_area_struct *vma)
|
||||||
vma->vm_private_data = vdev;
|
vma->vm_private_data = vdev;
|
||||||
vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
|
vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
|
||||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||||
|
vma->vm_pgoff = (pci_resource_start(pdev, index) >> PAGE_SHIFT) + pgoff;
|
||||||
|
|
||||||
phys = (pci_resource_start(pdev, index) >> PAGE_SHIFT) + pgoff;
|
return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
|
||||||
|
|
||||||
return remap_pfn_range(vma, vma->vm_start, phys,
|
|
||||||
req_len, vma->vm_page_prot);
|
req_len, vma->vm_page_prot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue