igb_uio: fix possible mmap failure with Linux 4.5
mmap the iomem range of the PCI device fails for kernels that enabled CONFIG_IO_STRICT_DEVMEM option: EAL: pci_map_resource(): cannot mmap(39, 0x7f1c51800000, 0x100000, 0x0): Invalid argument (0xffffffffffffffff) CONFIG_IO_STRICT_DEVMEM is introduced in Linux v4.5 and not enabled by default: Linux commit: 90a545e restrict /dev/mem to idle io memory ranges As a workaround igb_uio can stop reserving PCI memory resources, from kernel point of view iomem region looks like idle and mmap works again. This matches uio_pci_generic usage. With this update device iomem range is not protected against any other kernel drivers or userspace access. But this shouldn't be a problem for dpdk usage module since purpose of the igb_uio module is to provide userspace access. Fixes: af75078fece3 ("first public release") Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
b78c917511
commit
d05aafe62f
@ -195,6 +195,21 @@ Resolved Issues
|
||||
EAL
|
||||
~~~
|
||||
|
||||
* **igb_uio: Fixed possible mmap failure for Linux >= 4.5.**
|
||||
|
||||
mmaping the iomem range of the PCI device fails for kernels that
|
||||
enabled CONFIG_IO_STRICT_DEVMEM option:
|
||||
|
||||
EAL: pci_map_resource():
|
||||
cannot mmap(39, 0x7f1c51800000, 0x100000, 0x0):
|
||||
Invalid argument (0xffffffffffffffff)
|
||||
|
||||
CONFIG_IO_STRICT_DEVMEM is introduced in Linux v4.5
|
||||
|
||||
Updated igb_uio to stop reserving PCI memory resources, from
|
||||
kernel point of view iomem region looks like idle and mmap worked
|
||||
again. This matches uio_pci_generic usage.
|
||||
|
||||
|
||||
Drivers
|
||||
~~~~~~~
|
||||
|
@ -342,16 +342,6 @@ igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
goto fail_free;
|
||||
}
|
||||
|
||||
/*
|
||||
* reserve device's PCI memory regions for use by this
|
||||
* module
|
||||
*/
|
||||
err = pci_request_regions(dev, "igb_uio");
|
||||
if (err != 0) {
|
||||
dev_err(&dev->dev, "Cannot request regions\n");
|
||||
goto fail_disable;
|
||||
}
|
||||
|
||||
/* enable bus mastering on the device */
|
||||
pci_set_master(dev);
|
||||
|
||||
@ -441,8 +431,6 @@ fail_release_iomem:
|
||||
igbuio_pci_release_iomem(&udev->info);
|
||||
if (udev->mode == RTE_INTR_MODE_MSIX)
|
||||
pci_disable_msix(udev->pdev);
|
||||
pci_release_regions(dev);
|
||||
fail_disable:
|
||||
pci_disable_device(dev);
|
||||
fail_free:
|
||||
kfree(udev);
|
||||
@ -460,7 +448,6 @@ igbuio_pci_remove(struct pci_dev *dev)
|
||||
igbuio_pci_release_iomem(&udev->info);
|
||||
if (udev->mode == RTE_INTR_MODE_MSIX)
|
||||
pci_disable_msix(dev);
|
||||
pci_release_regions(dev);
|
||||
pci_disable_device(dev);
|
||||
pci_set_drvdata(dev, NULL);
|
||||
kfree(udev);
|
||||
|
Loading…
x
Reference in New Issue
Block a user