bus/cdx: provide driver flag for optional resource mapping
Checks
Commit Message
Provide driver flag which gives an option to map the cdx
device resource before probing the device driver.
Also, make rte_cdx_map_device() API as public to map
device resource separately.
Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
---
drivers/bus/cdx/bus_cdx_driver.h | 26 ++---------------
drivers/bus/cdx/cdx.c | 11 ++++---
drivers/bus/cdx/rte_bus_cdx.h | 50 ++++++++++++++++++++++++++++++++
drivers/bus/cdx/version.map | 11 +++++--
4 files changed, 69 insertions(+), 29 deletions(-)
create mode 100644 drivers/bus/cdx/rte_bus_cdx.h
Comments
On 6/26/2023 4:09 PM, Abhijit Gangurde wrote:
> Provide driver flag which gives an option to map the cdx
> device resource before probing the device driver.
> Also, make rte_cdx_map_device() API as public to map
> device resource separately.
>
> Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
> ---
> drivers/bus/cdx/bus_cdx_driver.h | 26 ++---------------
> drivers/bus/cdx/cdx.c | 11 ++++---
> drivers/bus/cdx/rte_bus_cdx.h | 50 ++++++++++++++++++++++++++++++++
> drivers/bus/cdx/version.map | 11 +++++--
> 4 files changed, 69 insertions(+), 29 deletions(-)
> create mode 100644 drivers/bus/cdx/rte_bus_cdx.h
>
> diff --git a/drivers/bus/cdx/bus_cdx_driver.h b/drivers/bus/cdx/bus_cdx_driver.h
> index fcacdb5896..1571131417 100644
> --- a/drivers/bus/cdx/bus_cdx_driver.h
> +++ b/drivers/bus/cdx/bus_cdx_driver.h
> @@ -37,6 +37,9 @@ struct rte_cdx_bus;
> static const char DRV_EXP_TAG(name, cdx_tbl_export)[] __rte_used = \
> RTE_STR(table)
>
> +/** Device needs resource mapping */
> +#define RTE_CDX_DRV_NEED_MAPPING 0x0001
> +
> /**
> * A structure describing an ID for a CDX driver. Each driver provides a
> * table of these IDs for each device that it supports.
> @@ -107,29 +110,6 @@ struct rte_cdx_driver {
> uint32_t drv_flags; /**< Flags RTE_CDX_DRV_*. */
> };
>
> -/**
> - * Map the CDX device resources in user space virtual memory address.
> - *
> - * @param dev
> - * A pointer to a rte_cdx_device structure describing the device
> - * to use.
> - *
> - * @return
> - * 0 on success, <0 on error.
> - */
> -__rte_internal
> -int rte_cdx_map_device(struct rte_cdx_device *dev);
> -
> -/**
> - * Unmap this device.
> - *
> - * @param dev
> - * A pointer to a rte_cdx_device structure describing the device
> - * to use.
> - */
> -__rte_internal
> -void rte_cdx_unmap_device(struct rte_cdx_device *dev);
> -
> /**
> * Register a CDX driver.
> *
> diff --git a/drivers/bus/cdx/cdx.c b/drivers/bus/cdx/cdx.c
> index 28bbf92ed5..47dc4eabe7 100644
> --- a/drivers/bus/cdx/cdx.c
> +++ b/drivers/bus/cdx/cdx.c
> @@ -74,6 +74,7 @@
> #include <rte_kvargs.h>
> #include <rte_malloc.h>
> #include <rte_vfio.h>
> +#include <rte_bus_cdx.h>
>
> #include <eal_filesystem.h>
>
> @@ -380,10 +381,12 @@ cdx_probe_one_driver(struct rte_cdx_driver *dr,
> CDX_BUS_DEBUG(" probe device %s using driver: %s", dev_name,
> dr->driver.name);
>
> - ret = cdx_vfio_map_resource(dev);
> - if (ret != 0) {
> - CDX_BUS_ERR("CDX map device failed: %d", ret);
> - goto error_map_device;
> + if (dr->drv_flags & RTE_CDX_DRV_NEED_MAPPING) {
> + ret = cdx_vfio_map_resource(dev);
> + if (ret != 0) {
> + CDX_BUS_ERR("CDX map device failed: %d", ret);
> + goto error_map_device;
> + }
> }
>
> /* call the driver probe() function */
> diff --git a/drivers/bus/cdx/rte_bus_cdx.h b/drivers/bus/cdx/rte_bus_cdx.h
> new file mode 100644
> index 0000000000..b9280b5f7f
> --- /dev/null
> +++ b/drivers/bus/cdx/rte_bus_cdx.h
> @@ -0,0 +1,50 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright (C) 2023, Advanced Micro Devices, Inc.
> + */
> +
> +#ifndef _RTE_BUS_CDX_H_
> +#define _RTE_BUS_CDX_H_
nit: there are no underscores before or after in other cdx header files.
please change to RTE_BUS_CDX_H
> +
> +/**
> + * @file
> + * CDX device & driver interface
> + */
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/* Forward declarations */
> +struct rte_cdx_device;
> +
> +/**
> + * Map the CDX device resources in user space virtual memory address
nit: all doxygen comments should end with a dot.
> + *
> + * Note that driver should not call this function when flag
> + * RTE_CDX_DRV_NEED_MAPPING is set, as EAL will do that for
> + * you when it's on.
> + *
> + * @param dev
> + * A pointer to a rte_cdx_device structure describing the device
> + * to use
> + *
> + * @return
> + * 0 on success, negative on error and positive if no driver
> + * is found for the device.
> + */
> +int rte_cdx_map_device(struct rte_cdx_device *dev);
> +
> +/**
> + * Unmap this device
> + *
> + * @param dev
> + * A pointer to a rte_cdx_device structure describing the device
> + * to use
> + */
> +void rte_cdx_unmap_device(struct rte_cdx_device *dev);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif /* _RTE_BUS_CDX_H_ */
> diff --git a/drivers/bus/cdx/version.map b/drivers/bus/cdx/version.map
> index 0a15d39ae8..cc7b1f821b 100644
> --- a/drivers/bus/cdx/version.map
> +++ b/drivers/bus/cdx/version.map
> @@ -1,9 +1,16 @@
> -INTERNAL {
> +DPDK_23 {
> global:
>
> rte_cdx_map_device;
> - rte_cdx_register;
> rte_cdx_unmap_device;
> +
> + local: *;
> +};
> +
> +INTERNAL {
> + global:
> +
> + rte_cdx_register;
> rte_cdx_unregister;
> rte_cdx_vfio_intr_disable;
> rte_cdx_vfio_intr_enable;
> -----Original Message-----
> From: Abhijit Gangurde <abhijit.gangurde@amd.com>
> Sent: Monday, June 26, 2023 4:10 PM
> To: Gupta, Nipun <Nipun.Gupta@amd.com>; Agarwal, Nikhil
> <nikhil.agarwal@amd.com>
> Cc: dev@dpdk.org; david.marchand@redhat.com; Yigit, Ferruh
> <Ferruh.Yigit@amd.com>; Gangurde, Abhijit <abhijit.gangurde@amd.com>
> Subject: [PATCH] bus/cdx: provide driver flag for optional resource mapping
>
> Provide driver flag which gives an option to map the cdx
> device resource before probing the device driver.
> Also, make rte_cdx_map_device() API as public to map
> device resource separately.
>
> Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
> ---
> drivers/bus/cdx/bus_cdx_driver.h | 26 ++---------------
> drivers/bus/cdx/cdx.c | 11 ++++---
> drivers/bus/cdx/rte_bus_cdx.h | 50 ++++++++++++++++++++++++++++++++
> drivers/bus/cdx/version.map | 11 +++++--
> 4 files changed, 69 insertions(+), 29 deletions(-)
> create mode 100644 drivers/bus/cdx/rte_bus_cdx.h
>
<snip>
> +/* Forward declarations */
> +struct rte_cdx_device;
> +
> +/**
> + * Map the CDX device resources in user space virtual memory address
> + *
> + * Note that driver should not call this function when flag
> + * RTE_CDX_DRV_NEED_MAPPING is set, as EAL will do that for
> + * you when it's on.
> + *
> + * @param dev
> + * A pointer to a rte_cdx_device structure describing the device
> + * to use
> + *
> + * @return
> + * 0 on success, negative on error and positive if no driver
> + * is found for the device.
> + */
> +int rte_cdx_map_device(struct rte_cdx_device *dev);
rte_experimental?
@@ -37,6 +37,9 @@ struct rte_cdx_bus;
static const char DRV_EXP_TAG(name, cdx_tbl_export)[] __rte_used = \
RTE_STR(table)
+/** Device needs resource mapping */
+#define RTE_CDX_DRV_NEED_MAPPING 0x0001
+
/**
* A structure describing an ID for a CDX driver. Each driver provides a
* table of these IDs for each device that it supports.
@@ -107,29 +110,6 @@ struct rte_cdx_driver {
uint32_t drv_flags; /**< Flags RTE_CDX_DRV_*. */
};
-/**
- * Map the CDX device resources in user space virtual memory address.
- *
- * @param dev
- * A pointer to a rte_cdx_device structure describing the device
- * to use.
- *
- * @return
- * 0 on success, <0 on error.
- */
-__rte_internal
-int rte_cdx_map_device(struct rte_cdx_device *dev);
-
-/**
- * Unmap this device.
- *
- * @param dev
- * A pointer to a rte_cdx_device structure describing the device
- * to use.
- */
-__rte_internal
-void rte_cdx_unmap_device(struct rte_cdx_device *dev);
-
/**
* Register a CDX driver.
*
@@ -74,6 +74,7 @@
#include <rte_kvargs.h>
#include <rte_malloc.h>
#include <rte_vfio.h>
+#include <rte_bus_cdx.h>
#include <eal_filesystem.h>
@@ -380,10 +381,12 @@ cdx_probe_one_driver(struct rte_cdx_driver *dr,
CDX_BUS_DEBUG(" probe device %s using driver: %s", dev_name,
dr->driver.name);
- ret = cdx_vfio_map_resource(dev);
- if (ret != 0) {
- CDX_BUS_ERR("CDX map device failed: %d", ret);
- goto error_map_device;
+ if (dr->drv_flags & RTE_CDX_DRV_NEED_MAPPING) {
+ ret = cdx_vfio_map_resource(dev);
+ if (ret != 0) {
+ CDX_BUS_ERR("CDX map device failed: %d", ret);
+ goto error_map_device;
+ }
}
/* call the driver probe() function */
new file mode 100644
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C) 2023, Advanced Micro Devices, Inc.
+ */
+
+#ifndef _RTE_BUS_CDX_H_
+#define _RTE_BUS_CDX_H_
+
+/**
+ * @file
+ * CDX device & driver interface
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct rte_cdx_device;
+
+/**
+ * Map the CDX device resources in user space virtual memory address
+ *
+ * Note that driver should not call this function when flag
+ * RTE_CDX_DRV_NEED_MAPPING is set, as EAL will do that for
+ * you when it's on.
+ *
+ * @param dev
+ * A pointer to a rte_cdx_device structure describing the device
+ * to use
+ *
+ * @return
+ * 0 on success, negative on error and positive if no driver
+ * is found for the device.
+ */
+int rte_cdx_map_device(struct rte_cdx_device *dev);
+
+/**
+ * Unmap this device
+ *
+ * @param dev
+ * A pointer to a rte_cdx_device structure describing the device
+ * to use
+ */
+void rte_cdx_unmap_device(struct rte_cdx_device *dev);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTE_BUS_CDX_H_ */
@@ -1,9 +1,16 @@
-INTERNAL {
+DPDK_23 {
global:
rte_cdx_map_device;
- rte_cdx_register;
rte_cdx_unmap_device;
+
+ local: *;
+};
+
+INTERNAL {
+ global:
+
+ rte_cdx_register;
rte_cdx_unregister;
rte_cdx_vfio_intr_disable;
rte_cdx_vfio_intr_enable;