[PATCH 17/23] drivers: rely on generic driver

David Marchand david.marchand at redhat.com
Wed Apr 29 13:44:50 CEST 2026


Now that the generic device object always references a generic driver, we
can rely on this reference and stop going through the bus-specific
driver reference.

Signed-off-by: David Marchand <david.marchand at redhat.com>
---
 drivers/bus/auxiliary/auxiliary_common.c | 12 +++++++-----
 drivers/bus/cdx/cdx.c                    |  2 +-
 drivers/bus/dpaa/dpaa_bus.c              |  3 ++-
 drivers/bus/fslmc/fslmc_bus.c            |  2 +-
 drivers/bus/fslmc/fslmc_vfio.c           | 10 ++++++----
 drivers/bus/ifpga/ifpga_bus.c            |  6 ++++--
 drivers/bus/pci/linux/pci_uio.c          |  6 ++++--
 drivers/bus/pci/pci_common.c             | 20 +++++++++-----------
 drivers/bus/platform/platform.c          | 20 ++++++++++++--------
 drivers/bus/uacce/uacce.c                |  5 +++--
 drivers/bus/vmbus/vmbus_common.c         |  3 ++-
 drivers/common/qat/qat_qp.c              |  4 ++--
 drivers/common/zsda/zsda_qp.c            |  4 ++--
 drivers/net/ntnic/ntnic_ethdev.c         |  8 +++-----
 drivers/raw/cnxk_bphy/cnxk_bphy.c        |  2 +-
 drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c    |  2 +-
 drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c    |  2 +-
 drivers/raw/ifpga/afu_pmd_core.c         |  2 +-
 drivers/raw/ifpga/ifpga_rawdev.c         |  2 +-
 drivers/raw/ntb/ntb.c                    |  2 +-
 lib/ethdev/ethdev_pci.h                  |  7 +++++--
 21 files changed, 69 insertions(+), 55 deletions(-)

diff --git a/drivers/bus/auxiliary/auxiliary_common.c b/drivers/bus/auxiliary/auxiliary_common.c
index ba8c35ebbe..2000ffa369 100644
--- a/drivers/bus/auxiliary/auxiliary_common.c
+++ b/drivers/bus/auxiliary/auxiliary_common.c
@@ -131,7 +131,7 @@ auxiliary_probe_device(struct rte_driver *drv, struct rte_device *dev)
 static int
 rte_auxiliary_driver_remove_dev(struct rte_auxiliary_device *dev)
 {
-	struct rte_auxiliary_driver *drv = dev->driver;
+	const struct rte_auxiliary_driver *drv = RTE_BUS_DRIVER(dev->device.driver, *drv);
 	int ret = 0;
 
 	AUXILIARY_LOG(DEBUG, "Driver %s remove auxiliary device %s on NUMA node %i",
@@ -226,12 +226,13 @@ static int
 auxiliary_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
 {
 	struct rte_auxiliary_device *aux_dev = RTE_BUS_DEVICE(dev, *aux_dev);
+	const struct rte_auxiliary_driver *aux_drv = RTE_BUS_DRIVER(dev->driver, *aux_drv);
 
-	if (aux_dev->driver->dma_map == NULL) {
+	if (aux_drv->dma_map == NULL) {
 		rte_errno = ENOTSUP;
 		return -1;
 	}
-	return aux_dev->driver->dma_map(aux_dev, addr, iova, len);
+	return aux_drv->dma_map(aux_dev, addr, iova, len);
 }
 
 static int
@@ -239,12 +240,13 @@ auxiliary_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova,
 		    size_t len)
 {
 	struct rte_auxiliary_device *aux_dev = RTE_BUS_DEVICE(dev, *aux_dev);
+	const struct rte_auxiliary_driver *aux_drv = RTE_BUS_DRIVER(dev->driver, *aux_drv);
 
-	if (aux_dev->driver->dma_unmap == NULL) {
+	if (aux_drv->dma_unmap == NULL) {
 		rte_errno = ENOTSUP;
 		return -1;
 	}
-	return aux_dev->driver->dma_unmap(aux_dev, addr, iova, len);
+	return aux_drv->dma_unmap(aux_dev, addr, iova, len);
 }
 
 static enum rte_iova_mode
diff --git a/drivers/bus/cdx/cdx.c b/drivers/bus/cdx/cdx.c
index c6a4da7692..5a823a0dcd 100644
--- a/drivers/bus/cdx/cdx.c
+++ b/drivers/bus/cdx/cdx.c
@@ -382,7 +382,7 @@ rte_cdx_unregister(struct rte_cdx_driver *driver)
 static int
 cdx_detach_dev(struct rte_cdx_device *dev)
 {
-	struct rte_cdx_driver *dr = dev->driver;
+	const struct rte_cdx_driver *dr = RTE_BUS_DRIVER(dev->device.driver, *dr);
 	int ret = 0;
 
 	CDX_BUS_DEBUG("detach device %s using driver: %s",
diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c
index b7d0caaf61..0fd6a8d7a6 100644
--- a/drivers/bus/dpaa/dpaa_bus.c
+++ b/drivers/bus/dpaa/dpaa_bus.c
@@ -815,11 +815,12 @@ dpaa_bus_cleanup(void)
 
 	BUS_INIT_FUNC_TRACE();
 	RTE_BUS_FOREACH_DEV(dev, &rte_dpaa_bus.bus) {
-		struct rte_dpaa_driver *drv = dev->driver;
+		const struct rte_dpaa_driver *drv;
 		int ret = 0;
 
 		if (!rte_dev_is_probed(&dev->device))
 			continue;
+		drv = RTE_BUS_DRIVER(dev->device.driver, *drv);
 		if (drv->remove == NULL)
 			continue;
 		ret = drv->remove(dev);
diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c
index ae69bd0da2..e33b63259d 100644
--- a/drivers/bus/fslmc/fslmc_bus.c
+++ b/drivers/bus/fslmc/fslmc_bus.c
@@ -534,7 +534,7 @@ static int
 fslmc_bus_unplug(struct rte_device *rte_dev)
 {
 	struct rte_dpaa2_device *dev = RTE_BUS_DEVICE(rte_dev, *dev);
-	struct rte_dpaa2_driver *drv = dev->driver;
+	const struct rte_dpaa2_driver *drv = RTE_BUS_DRIVER(rte_dev->driver, *drv);
 
 	if (drv->remove != NULL) {
 		drv->remove(dev);
diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
index e38f3e9fe7..5784adaf90 100644
--- a/drivers/bus/fslmc/fslmc_vfio.c
+++ b/drivers/bus/fslmc/fslmc_vfio.c
@@ -1392,7 +1392,7 @@ fslmc_close_iodevices(struct rte_dpaa2_device *dev,
 	int vfio_fd)
 {
 	struct rte_dpaa2_object *object = NULL;
-	struct rte_dpaa2_driver *drv;
+	const struct rte_dpaa2_driver *drv;
 	int ret;
 
 	switch (dev->dev_type) {
@@ -1411,9 +1411,11 @@ fslmc_close_iodevices(struct rte_dpaa2_device *dev,
 	case DPAA2_ETH:
 	case DPAA2_CRYPTO:
 	case DPAA2_QDMA:
-		drv = dev->driver;
-		if (drv && drv->remove && drv->remove(dev))
-			DPAA2_BUS_ERR("Unable to remove");
+		if (dev->device.driver != NULL) {
+			drv = RTE_BUS_DRIVER(dev->device.driver, *drv);
+			if (drv->remove && drv->remove(dev))
+				DPAA2_BUS_ERR("Unable to remove");
+		}
 		break;
 	default:
 		break;
diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c
index a79a287fbe..b13285230b 100644
--- a/drivers/bus/ifpga/ifpga_bus.c
+++ b/drivers/bus/ifpga/ifpga_bus.c
@@ -296,11 +296,12 @@ ifpga_cleanup(void)
 	int error = 0;
 
 	RTE_BUS_FOREACH_DEV(afu_dev, &rte_ifpga_bus) {
-		struct rte_afu_driver *drv = afu_dev->driver;
+		const struct rte_afu_driver *drv;
 		int ret = 0;
 
 		if (!rte_dev_is_probed(&afu_dev->device))
 			goto free;
+		drv = RTE_BUS_DRIVER(afu_dev->device.driver, *drv);
 		if (drv->remove == NULL)
 			goto free;
 
@@ -326,9 +327,10 @@ static int
 ifpga_unplug(struct rte_device *dev)
 {
 	struct rte_afu_device *afu_dev = RTE_BUS_DEVICE(dev, *afu_dev);
+	const struct rte_afu_driver *afu_drv = RTE_BUS_DRIVER(dev->driver, *afu_drv);
 	int ret;
 
-	ret = afu_dev->driver->remove(afu_dev);
+	ret = afu_drv->remove(afu_dev);
 	if (ret)
 		return ret;
 
diff --git a/drivers/bus/pci/linux/pci_uio.c b/drivers/bus/pci/linux/pci_uio.c
index 4c1d3327a9..40e96b1c67 100644
--- a/drivers/bus/pci/linux/pci_uio.c
+++ b/drivers/bus/pci/linux/pci_uio.c
@@ -301,8 +301,10 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
 	struct pci_map *maps;
 	int wc_activate = 0;
 
-	if (dev->driver != NULL)
-		wc_activate = dev->driver->drv_flags & RTE_PCI_DRV_WC_ACTIVATE;
+	if (dev->device.driver != NULL) {
+		const struct rte_pci_driver *pdrv = RTE_BUS_DRIVER(dev->device.driver, *pdrv);
+		wc_activate = pdrv->drv_flags & RTE_PCI_DRV_WC_ACTIVATE;
+	}
 
 	loc = &dev->addr;
 	maps = uio_res->maps;
diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 5c37c5e543..e927f4af7b 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -245,11 +245,6 @@ pci_probe_device(struct rte_driver *drv, struct rte_device *dev)
 			return -ENOMEM;
 		}
 
-		/*
-		 * Reference driver structure.
-		 * This needs to be before rte_pci_map_device(), as it enables
-		 * to use driver flags for adjusting configuration.
-		 */
 		pci_dev->driver = pci_drv;
 		if (pci_drv->drv_flags & RTE_PCI_DRV_NEED_MAPPING) {
 			ret = rte_pci_map_device(pci_dev);
@@ -298,7 +293,7 @@ static int
 rte_pci_detach_dev(struct rte_pci_device *dev)
 {
 	struct rte_pci_addr *loc;
-	struct rte_pci_driver *dr = dev->driver;
+	const struct rte_pci_driver *dr = RTE_BUS_DRIVER(dev->device.driver, *dr);
 	int ret = 0;
 
 	loc = &dev->addr;
@@ -339,11 +334,12 @@ pci_cleanup(void)
 	int error = 0;
 
 	RTE_BUS_FOREACH_DEV(dev, &rte_pci_bus.bus) {
-		struct rte_pci_driver *drv = dev->driver;
+		const struct rte_pci_driver *drv;
 		int ret = 0;
 
 		if (!rte_dev_is_probed(&dev->device))
 			goto free;
+		drv = RTE_BUS_DRIVER(dev->device.driver, *drv);
 		if (drv->remove == NULL)
 			goto free;
 
@@ -545,9 +541,10 @@ static int
 pci_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
 {
 	struct rte_pci_device *pdev = RTE_BUS_DEVICE(dev, *pdev);
+	const struct rte_pci_driver *pdrv = RTE_BUS_DRIVER(dev->driver, *pdrv);
 
-	if (pdev->driver->dma_map != NULL)
-		return pdev->driver->dma_map(pdev, addr, iova, len);
+	if (pdrv->dma_map != NULL)
+		return pdrv->dma_map(pdev, addr, iova, len);
 	/**
 	 *  In case driver don't provides any specific mapping
 	 *  try fallback to VFIO.
@@ -564,9 +561,10 @@ static int
 pci_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
 {
 	struct rte_pci_device *pdev = RTE_BUS_DEVICE(dev, *pdev);
+	const struct rte_pci_driver *pdrv = RTE_BUS_DRIVER(dev->driver, *pdrv);
 
-	if (pdev->driver->dma_unmap != NULL)
-		return pdev->driver->dma_unmap(pdev, addr, iova, len);
+	if (pdrv->dma_unmap != NULL)
+		return pdrv->dma_unmap(pdev, addr, iova, len);
 	/**
 	 *  In case driver don't provides any specific mapping
 	 *  try fallback to VFIO.
diff --git a/drivers/bus/platform/platform.c b/drivers/bus/platform/platform.c
index 671f36fac9..433bab9b60 100644
--- a/drivers/bus/platform/platform.c
+++ b/drivers/bus/platform/platform.c
@@ -408,7 +408,7 @@ platform_bus_probe_device(struct rte_driver *drv, struct rte_device *dev)
 static void
 device_release_driver(struct rte_platform_device *pdev)
 {
-	struct rte_platform_driver *pdrv = pdev->driver;
+	const struct rte_platform_driver *pdrv = RTE_BUS_DRIVER(pdev->device.driver, *pdrv);
 	int ret;
 
 	if (pdrv->remove != NULL) {
@@ -458,9 +458,10 @@ static int
 platform_bus_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
 {
 	struct rte_platform_device *pdev = RTE_BUS_DEVICE(dev, *pdev);
+	const struct rte_platform_driver *pdrv = RTE_BUS_DRIVER(dev->driver, *pdrv);
 
-	if (pdev->driver->dma_map != NULL)
-		return pdev->driver->dma_map(pdev, addr, iova, len);
+	if (pdrv->dma_map != NULL)
+		return pdrv->dma_map(pdev, addr, iova, len);
 
 	return rte_vfio_container_dma_map(RTE_VFIO_DEFAULT_CONTAINER_FD, (uint64_t)addr, iova, len);
 }
@@ -469,9 +470,10 @@ static int
 platform_bus_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
 {
 	struct rte_platform_device *pdev = RTE_BUS_DEVICE(dev, *pdev);
+	const struct rte_platform_driver *pdrv = RTE_BUS_DRIVER(dev->driver, *pdrv);
 
-	if (pdev->driver->dma_unmap != NULL)
-		return pdev->driver->dma_unmap(pdev, addr, iova, len);
+	if (pdrv->dma_unmap != NULL)
+		return pdrv->dma_unmap(pdev, addr, iova, len);
 
 	return rte_vfio_container_dma_unmap(RTE_VFIO_DEFAULT_CONTAINER_FD, (uint64_t)addr, iova,
 					    len);
@@ -480,12 +482,14 @@ platform_bus_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova, size_t
 static enum rte_iova_mode
 platform_bus_get_iommu_class(void)
 {
-	struct rte_platform_driver *pdrv;
+	const struct rte_platform_driver *pdrv;
 	struct rte_platform_device *pdev;
 
 	RTE_BUS_FOREACH_DEV(pdev, &platform_bus.bus) {
-		pdrv = pdev->driver;
-		if (pdrv != NULL && pdrv->drv_flags & RTE_PLATFORM_DRV_NEED_IOVA_AS_VA)
+		if (!rte_dev_is_probed(&pdev->device))
+			continue;
+		pdrv = RTE_BUS_DRIVER(pdev->device.driver, *pdrv);
+		if (pdrv->drv_flags & RTE_PLATFORM_DRV_NEED_IOVA_AS_VA)
 			return RTE_IOVA_VA;
 	}
 
diff --git a/drivers/bus/uacce/uacce.c b/drivers/bus/uacce/uacce.c
index d4a18b2835..efc0da606b 100644
--- a/drivers/bus/uacce/uacce.c
+++ b/drivers/bus/uacce/uacce.c
@@ -380,11 +380,12 @@ uacce_cleanup(void)
 	int error = 0;
 
 	RTE_BUS_FOREACH_DEV(dev, &uacce_bus.bus) {
-		struct rte_uacce_driver *dr = dev->driver;
+		const struct rte_uacce_driver *dr;
 		int ret = 0;
 
 		if (!rte_dev_is_probed(&dev->device))
 			goto free;
+		dr = RTE_BUS_DRIVER(dev->device.driver, *dr);
 		if (dr->remove == NULL)
 			goto free;
 
@@ -407,7 +408,7 @@ uacce_cleanup(void)
 static int
 uacce_detach_dev(struct rte_uacce_device *dev)
 {
-	struct rte_uacce_driver *dr = dev->driver;
+	const struct rte_uacce_driver *dr = RTE_BUS_DRIVER(dev->device.driver, *dr);
 	int ret = 0;
 
 	UACCE_BUS_DEBUG("detach device %s using driver: %s", dev->device.name, dr->driver.name);
diff --git a/drivers/bus/vmbus/vmbus_common.c b/drivers/bus/vmbus/vmbus_common.c
index 43652c0487..b96f4133dd 100644
--- a/drivers/bus/vmbus/vmbus_common.c
+++ b/drivers/bus/vmbus/vmbus_common.c
@@ -143,11 +143,12 @@ rte_vmbus_cleanup(void)
 	int error = 0;
 
 	RTE_BUS_FOREACH_DEV(dev, &rte_vmbus_bus.bus) {
-		const struct rte_vmbus_driver *drv = dev->driver;
+		const struct rte_vmbus_driver *drv;
 		int ret;
 
 		if (!rte_dev_is_probed(&dev->device))
 			continue;
+		drv = RTE_BUS_DRIVER(dev->device.driver, *drv);
 		if (drv->remove == NULL)
 			continue;
 
diff --git a/drivers/common/qat/qat_qp.c b/drivers/common/qat/qat_qp.c
index 0d2bbdb8a5..fe28cb160d 100644
--- a/drivers/common/qat/qat_qp.c
+++ b/drivers/common/qat/qat_qp.c
@@ -174,7 +174,7 @@ qat_qp_setup(struct qat_pci_device *qat_dev,
 
 	snprintf(op_cookie_pool_name, RTE_RING_NAMESIZE,
 					"%s%d_cookies_%s_qp%hu",
-		pci_dev->driver->driver.name, qat_dev->qat_dev_id,
+		pci_dev->device.driver->name, qat_dev->qat_dev_id,
 		qat_qp_conf->service_str, queue_pair_id);
 
 	QAT_LOG(DEBUG, "cookiepool: %s", op_cookie_pool_name);
@@ -252,7 +252,7 @@ qat_queue_create(struct qat_pci_device *qat_dev, struct qat_queue *queue,
 	 */
 	snprintf(queue->memz_name, sizeof(queue->memz_name),
 			"%s_%d_%s_%s_%d_%d",
-		pci_dev->driver->driver.name, qat_dev->qat_dev_id,
+		pci_dev->device.driver->name, qat_dev->qat_dev_id,
 		qp_conf->service_str, "qp_mem",
 		queue->hw_bundle_number, queue->hw_queue_number);
 	qp_mz = queue_dma_zone_reserve(queue->memz_name, queue_size_bytes,
diff --git a/drivers/common/zsda/zsda_qp.c b/drivers/common/zsda/zsda_qp.c
index dab524e2d3..79172234af 100644
--- a/drivers/common/zsda/zsda_qp.c
+++ b/drivers/common/zsda/zsda_qp.c
@@ -592,12 +592,12 @@ zsda_queue_create(const uint8_t dev_id, struct zsda_queue *queue,
 
 	if (dir == RING_DIR_TX)
 		snprintf(queue->memz_name, sizeof(queue->memz_name),
-			 "%s_%d_%s_%s_%d", pci_dev->driver->driver.name, dev_id,
+			 "%s_%d_%s_%s_%d", pci_dev->device.driver->name, dev_id,
 			 qp_conf->service_str, "qptxmem",
 			 queue->hw_queue_number);
 	else
 		snprintf(queue->memz_name, sizeof(queue->memz_name),
-			 "%s_%d_%s_%s_%d", pci_dev->driver->driver.name, dev_id,
+			 "%s_%d_%s_%s_%d", pci_dev->device.driver->name, dev_id,
 			 qp_conf->service_str, "qprxmem",
 			 queue->hw_queue_number);
 
diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c
index 89e751e7e0..7cc90a7a5b 100644
--- a/drivers/net/ntnic/ntnic_ethdev.c
+++ b/drivers/net/ntnic/ntnic_ethdev.c
@@ -2676,8 +2676,7 @@ nthw_pci_dev_deinit(struct rte_eth_dev *eth_dev __rte_unused)
 }
 
 static int
-nthw_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
-	struct rte_pci_device *pci_dev)
+nthw_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
 {
 	int ret;
 
@@ -2711,9 +2710,8 @@ nthw_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 		pci_dev->id.subsystem_vendor_id, pci_dev->id.subsystem_device_id,
 		pci_dev->name[0] ? pci_dev->name : "NA",
 		pci_dev->device.numa_node,
-		pci_dev->driver->driver.name ? pci_dev->driver->driver.name : "NA",
-		pci_dev->driver->driver.alias ? pci_dev->driver->driver.alias : "NA");
-
+		(pci_drv->driver.name != NULL) ? pci_drv->driver.name : "NA",
+		(pci_drv->driver.alias != NULL) ? pci_drv->driver.alias : "NA");
 
 	ret = nthw_pci_dev_init(pci_dev);
 
diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy.c b/drivers/raw/cnxk_bphy/cnxk_bphy.c
index 0c26cfbbe6..ea30a7100c 100644
--- a/drivers/raw/cnxk_bphy/cnxk_bphy.c
+++ b/drivers/raw/cnxk_bphy/cnxk_bphy.c
@@ -351,7 +351,7 @@ bphy_rawdev_probe(struct rte_pci_driver *pci_drv,
 
 	bphy_rawdev->dev_ops = &bphy_rawdev_ops;
 	bphy_rawdev->device = &pci_dev->device;
-	bphy_rawdev->driver_name = pci_dev->driver->driver.name;
+	bphy_rawdev->driver_name = pci_dev->device.driver->name;
 
 	bphy_dev = (struct bphy_device *)bphy_rawdev->dev_private;
 	bphy_dev->mem.res0 = pci_dev->mem_resource[0];
diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c b/drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c
index c82589baa2..e0c7257027 100644
--- a/drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c
+++ b/drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c
@@ -319,7 +319,7 @@ cnxk_bphy_cgx_rawdev_probe(struct rte_pci_driver *pci_drv,
 
 	rawdev->dev_ops = &cnxk_bphy_cgx_rawdev_ops;
 	rawdev->device = &pci_dev->device;
-	rawdev->driver_name = pci_dev->driver->driver.name;
+	rawdev->driver_name = pci_dev->device.driver->name;
 
 	cgx = rawdev->dev_private;
 	cgx->rcgx = rte_zmalloc(NULL, sizeof(*rcgx), 0);
diff --git a/drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c b/drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c
index 60c2080740..57c7cc85f3 100644
--- a/drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c
+++ b/drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c
@@ -210,7 +210,7 @@ rvu_lf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
 
 	rvu_lf_rawdev->dev_ops = &rvu_lf_rawdev_ops;
 	rvu_lf_rawdev->device = &pci_dev->device;
-	rvu_lf_rawdev->driver_name = pci_dev->driver->driver.name;
+	rvu_lf_rawdev->driver_name = pci_dev->device.driver->name;
 
 	roc_rvu_lf = (struct roc_rvu_lf *)rvu_lf_rawdev->dev_private;
 	roc_rvu_lf->pci_dev = pci_dev;
diff --git a/drivers/raw/ifpga/afu_pmd_core.c b/drivers/raw/ifpga/afu_pmd_core.c
index f650b76cfe..ca14ebf52f 100644
--- a/drivers/raw/ifpga/afu_pmd_core.c
+++ b/drivers/raw/ifpga/afu_pmd_core.c
@@ -310,7 +310,7 @@ static int afu_rawdev_create(struct rte_afu_device *afu_dev, int socket_id)
 
 	rawdev->dev_ops = &afu_rawdev_ops;
 	rawdev->device = &afu_dev->device;
-	rawdev->driver_name = afu_dev->driver->driver.name;
+	rawdev->driver_name = afu_dev->device.driver->name;
 
 	dev = afu_rawdev_get_priv(rawdev);
 	if (!dev)
diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c
index d1d54e9065..9f961c943f 100644
--- a/drivers/raw/ifpga/ifpga_rawdev.c
+++ b/drivers/raw/ifpga/ifpga_rawdev.c
@@ -1602,7 +1602,7 @@ ifpga_rawdev_create(struct rte_pci_device *pci_dev,
 
 	rawdev->dev_ops = &ifpga_rawdev_ops;
 	rawdev->device = &pci_dev->device;
-	rawdev->driver_name = pci_dev->driver->driver.name;
+	rawdev->driver_name = pci_dev->device.driver->name;
 
 	/* must enumerate the adapter before use it */
 	ret = opae_adapter_enumerate(adapter);
diff --git a/drivers/raw/ntb/ntb.c b/drivers/raw/ntb/ntb.c
index 0ed4c14592..d54f2fb783 100644
--- a/drivers/raw/ntb/ntb.c
+++ b/drivers/raw/ntb/ntb.c
@@ -1478,7 +1478,7 @@ ntb_create(struct rte_pci_device *pci_dev, int socket_id)
 
 	rawdev->dev_ops = &ntb_ops;
 	rawdev->device = &pci_dev->device;
-	rawdev->driver_name = pci_dev->driver->driver.name;
+	rawdev->driver_name = pci_dev->device.driver->name;
 
 	ret = ntb_init_hw(rawdev, pci_dev);
 	if (ret < 0) {
diff --git a/lib/ethdev/ethdev_pci.h b/lib/ethdev/ethdev_pci.h
index 2229ffa252..ce3e293818 100644
--- a/lib/ethdev/ethdev_pci.h
+++ b/lib/ethdev/ethdev_pci.h
@@ -39,10 +39,13 @@ rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev,
 	eth_dev->intr_handle = pci_dev->intr_handle;
 
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+		const struct rte_pci_driver *pci_drv;
+
+		pci_drv = RTE_BUS_DRIVER(pci_dev->device.driver, *pci_drv);
 		eth_dev->data->dev_flags = 0;
-		if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)
+		if (pci_drv->drv_flags & RTE_PCI_DRV_INTR_LSC)
 			eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
-		if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_RMV)
+		if (pci_drv->drv_flags & RTE_PCI_DRV_INTR_RMV)
 			eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_RMV;
 
 		eth_dev->data->numa_node = pci_dev->device.numa_node;
-- 
2.53.0



More information about the dev mailing list