[PATCH 03/23] bus: remove device and driver checks in DMA map/unmap
David Marchand
david.marchand at redhat.com
Wed Apr 29 13:44:36 CEST 2026
Add rte_dev_is_probed() check in rte_dev_dma_map() and
rte_dev_dma_unmap() before calling bus-specific implementations.
The device parameter passed to bus DMA map/unmap operations cannot be
NULL as the caller already dereferenced the bus structure to invoke
these operations.
The driver reference in the bus-specific device cannot be NULL since
calling the .dma_map is done after dereferencing this pointer.
Remove redundant checks on probed device, and NULL checks on the
device/driver parameter and derived device/driver pointers.
Signed-off-by: David Marchand <david.marchand at redhat.com>
---
drivers/bus/auxiliary/auxiliary_common.c | 8 --------
drivers/bus/pci/pci_common.c | 12 ++----------
drivers/bus/platform/platform.c | 16 ++--------------
drivers/bus/vdev/vdev.c | 24 ++----------------------
lib/eal/common/eal_common_dev.c | 8 ++++++++
5 files changed, 14 insertions(+), 54 deletions(-)
diff --git a/drivers/bus/auxiliary/auxiliary_common.c b/drivers/bus/auxiliary/auxiliary_common.c
index 8f3e90eaf0..9690687600 100644
--- a/drivers/bus/auxiliary/auxiliary_common.c
+++ b/drivers/bus/auxiliary/auxiliary_common.c
@@ -356,10 +356,6 @@ auxiliary_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
{
struct rte_auxiliary_device *aux_dev = RTE_DEV_TO_AUXILIARY(dev);
- if (dev == NULL || aux_dev->driver == NULL) {
- rte_errno = EINVAL;
- return -1;
- }
if (aux_dev->driver->dma_map == NULL) {
rte_errno = ENOTSUP;
return -1;
@@ -373,10 +369,6 @@ auxiliary_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova,
{
struct rte_auxiliary_device *aux_dev = RTE_DEV_TO_AUXILIARY(dev);
- if (dev == NULL || aux_dev->driver == NULL) {
- rte_errno = EINVAL;
- return -1;
- }
if (aux_dev->driver->dma_unmap == NULL) {
rte_errno = ENOTSUP;
return -1;
diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 51fd8c80e4..d7f028e365 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -672,11 +672,7 @@ pci_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
{
struct rte_pci_device *pdev = RTE_DEV_TO_PCI(dev);
- if (!pdev || !pdev->driver) {
- rte_errno = EINVAL;
- return -1;
- }
- if (pdev->driver->dma_map)
+ if (pdev->driver->dma_map != NULL)
return pdev->driver->dma_map(pdev, addr, iova, len);
/**
* In case driver don't provides any specific mapping
@@ -695,11 +691,7 @@ pci_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
{
struct rte_pci_device *pdev = RTE_DEV_TO_PCI(dev);
- if (!pdev || !pdev->driver) {
- rte_errno = EINVAL;
- return -1;
- }
- if (pdev->driver->dma_unmap)
+ if (pdev->driver->dma_unmap != NULL)
return pdev->driver->dma_unmap(pdev, addr, iova, len);
/**
* In case driver don't provides any specific mapping
diff --git a/drivers/bus/platform/platform.c b/drivers/bus/platform/platform.c
index e54098d04f..8a89a3cad8 100644
--- a/drivers/bus/platform/platform.c
+++ b/drivers/bus/platform/platform.c
@@ -530,13 +530,7 @@ platform_bus_parse(const char *name, void *addr)
static int
platform_bus_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
{
- struct rte_platform_device *pdev;
-
- pdev = RTE_DEV_TO_PLATFORM_DEV(dev);
- if (pdev == NULL || pdev->driver == NULL) {
- rte_errno = EINVAL;
- return -1;
- }
+ struct rte_platform_device *pdev = RTE_DEV_TO_PLATFORM_DEV(dev);
if (pdev->driver->dma_map != NULL)
return pdev->driver->dma_map(pdev, addr, iova, len);
@@ -547,13 +541,7 @@ platform_bus_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t l
static int
platform_bus_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
{
- struct rte_platform_device *pdev;
-
- pdev = RTE_DEV_TO_PLATFORM_DEV(dev);
- if (pdev == NULL || pdev->driver == NULL) {
- rte_errno = EINVAL;
- return -1;
- }
+ struct rte_platform_device *pdev = RTE_DEV_TO_PLATFORM_DEV(dev);
if (pdev->driver->dma_unmap != NULL)
return pdev->driver->dma_unmap(pdev, addr, iova, len);
diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
index eb1de0186e..a200a67847 100644
--- a/drivers/bus/vdev/vdev.c
+++ b/drivers/bus/vdev/vdev.c
@@ -144,20 +144,10 @@ vdev_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
struct rte_vdev_device *vdev = RTE_DEV_TO_VDEV(dev);
const struct rte_vdev_driver *driver;
- if (!vdev) {
- rte_errno = EINVAL;
- return -1;
- }
-
- if (!vdev->device.driver) {
- VDEV_LOG(DEBUG, "no driver attach to device %s", dev->name);
- return 1;
- }
-
driver = container_of(vdev->device.driver, const struct rte_vdev_driver,
driver);
- if (driver->dma_map)
+ if (driver->dma_map != NULL)
return driver->dma_map(vdev, addr, iova, len);
return 0;
@@ -169,20 +159,10 @@ vdev_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova, size_t len)
struct rte_vdev_device *vdev = RTE_DEV_TO_VDEV(dev);
const struct rte_vdev_driver *driver;
- if (!vdev) {
- rte_errno = EINVAL;
- return -1;
- }
-
- if (!vdev->device.driver) {
- VDEV_LOG(DEBUG, "no driver attach to device %s", dev->name);
- return 1;
- }
-
driver = container_of(vdev->device.driver, const struct rte_vdev_driver,
driver);
- if (driver->dma_unmap)
+ if (driver->dma_unmap != NULL)
return driver->dma_unmap(vdev, addr, iova, len);
return 0;
diff --git a/lib/eal/common/eal_common_dev.c b/lib/eal/common/eal_common_dev.c
index 7185de0cb9..fceca75223 100644
--- a/lib/eal/common/eal_common_dev.c
+++ b/lib/eal/common/eal_common_dev.c
@@ -829,6 +829,10 @@ int
rte_dev_dma_map(struct rte_device *dev, void *addr, uint64_t iova,
size_t len)
{
+ if (!rte_dev_is_probed(dev)) {
+ rte_errno = EINVAL;
+ return -1;
+ }
if (dev->bus->dma_map == NULL || len == 0) {
rte_errno = ENOTSUP;
return -1;
@@ -847,6 +851,10 @@ int
rte_dev_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova,
size_t len)
{
+ if (!rte_dev_is_probed(dev)) {
+ rte_errno = EINVAL;
+ return -1;
+ }
if (dev->bus->dma_unmap == NULL || len == 0) {
rte_errno = ENOTSUP;
return -1;
--
2.53.0
More information about the dev
mailing list