bus/pci: assign driver 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.

Fixes: d61138d4f0 ("drivers: remove direct access to interrupt handle")
Cc: stable@dpdk.org

Signed-off-by: Michal Krawczyk <mk@semihalf.com>
This commit is contained in:
Michal Krawczyk 2022-01-19 15:50:37 +01:00 committed by Thomas Monjalon
parent 356a2aa054
commit 6b92f18468

View File

@ -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",