|
@@ -1008,6 +1008,9 @@ static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
|
|
|
if (i >= PCI_ROM_RESOURCE)
|
|
|
return -ENODEV;
|
|
|
|
|
|
+ if (res->flags & IORESOURCE_MEM && iomem_is_exclusive(res->start))
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
if (!pci_mmap_fits(pdev, i, vma, PCI_MMAP_SYSFS)) {
|
|
|
WARN(1, "process \"%s\" tried to map 0x%08lx bytes at page 0x%08lx on %s BAR %d (start 0x%16Lx, size 0x%16Lx)\n",
|
|
|
current->comm, vma->vm_end-vma->vm_start, vma->vm_pgoff,
|
|
@@ -1024,10 +1027,6 @@ static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
|
|
|
pci_resource_to_user(pdev, i, res, &start, &end);
|
|
|
vma->vm_pgoff += start >> PAGE_SHIFT;
|
|
|
mmap_type = res->flags & IORESOURCE_MEM ? pci_mmap_mem : pci_mmap_io;
|
|
|
-
|
|
|
- if (res->flags & IORESOURCE_MEM && iomem_is_exclusive(start))
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
return pci_mmap_page_range(pdev, vma, mmap_type, write_combine);
|
|
|
}
|
|
|
|