bus/pci: assign driver's pointer before mapping
PATCH 1/1 bus/pci: assign driver's pointer before mapping
Patch changing the way of accessing interrupt handle also changed order of the rte_pci_map_device() call and rte_pci_device:driver assignment. It was causing issues with Write Combine mapping on the Linux platform if it was used with the igb_uio module.
Linux implementation of pci_uio_map_resource_by_index(), which is called by rte_pci_map_device(), needs access to the device's driver. Otherwise it won't be able to check the driver's flags and won't respect them.
--- drivers/bus/pci/pci_common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/bus/pci/pci_common.c +3 -2
@@ -247,9 +247,12 @@ rte_pci_probe_one_driver(struct rte_pci_driver *dr,return -ENOMEM ; } + dev->driver = dr; +if (dr->drv_flags &RTE_PCI_DRV_NEED_MAPPING ) { ret =rte_pci_map_device (dev);if (ret !=0 ) { + dev->driver =NULL ;rte_intr_instance_free (dev->vfio_req_intr_handle); dev->vfio_req_intr_handle =NULL ;rte_intr_instance_free (dev->intr_handle);
@@ -257,8 +260,6 @@ rte_pci_probe_one_driver(struct rte_pci_driver *dr,return ret; } } - - dev->driver = dr; } RTE_LOG(INFO, EAL, "Probe PCI driver: %s (%x:%x) device: "PCI_PRI_FMT" (socket %i)\n",
Signature · 1 line
2.25.1
śr., 19 sty 2022 o 15:50 Michal Krawczyk <[email protected]> napisał(a):
Quoted 10 lines
Patch changing the way of accessing interrupt handle also changed order of the
rte_pci_map_device()call and rte_pci_device:driver assignment. It was causing issues with Write Combine mapping on the Linux platform if it was used with theigb_uiomodule.Linux implementation of
pci_uio_map_resource_by_index(), which is called byrte_pci_map_device(), needs access to the device's driver. Otherwise it won't be able to check the driver's flags and won't respect them.
Quoted 6 lines
Fixes d61138d4f0e2 ("drivers: remove direct access to interrupt handle")Signed-off-by Michal Krawczyk <[email protected]>---
Hi,
is there any chance that this fix will land for v22.03-rc2? Without that, we suffer a huge performance impact for the ENA PMD.
Thanks,
Michal
Quoted 32 lines
drivers/bus/pci/pci_common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)drivers/bus/pci/pci_common.c +3
-3@@ -247,9 +247,12 @@ rte_pci_probe_one_driver(struct rte_pci_driver *dr,return -ENOMEM ; } + dev->driver = dr; +if (dr->drv_flags &RTE_PCI_DRV_NEED_MAPPING ) { ret =rte_pci_map_device (dev);if (ret !=0 ) { + dev->driver =NULL ;rte_intr_instance_free (dev->vfio_req_intr_handle); dev->vfio_req_intr_handle =NULL ;rte_intr_instance_free (dev->intr_handle);@@ -257,8 +260,6 @@ rte_pci_probe_one_driver(struct rte_pci_driver *dr,return ret; } } - - dev->driver = dr; } RTE_LOG(INFO, EAL, "Probe PCI driver: %s (%x:%x) device: "PCI_PRI_FMT" (socket %i)\n", --2.25.1
19/01/2022 15:50, Michal Krawczyk:
Quoted 9 lines
Patch changing the way of accessing interrupt handle also changed order of the
rte_pci_map_device()call and rte_pci_device:driver assignment. It was causing issues with Write Combine mapping on the Linux platform if it was used with theigb_uiomodule.Linux implementation of
pci_uio_map_resource_by_index(), which is called byrte_pci_map_device(), needs access to the device's driver. Otherwise it won't be able to check the driver's flags and won't respect them.
Quoted 5 lines
Fixes d61138d4f0e2 ("drivers: remove direct access to interrupt handle")Signed-off-by Michal Krawczyk <[email protected]>
Looks to be a simple change. I hope there is no side effect. Applied, thanks.