DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 0/4] test/dma: run tests as per configured pmd
@ 2023-08-10 12:21 Gowrishankar Muthukrishnan
  2023-08-10 12:21 ` [PATCH 1/4] dmadev: add function to get list of device identifiers Gowrishankar Muthukrishnan
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Gowrishankar Muthukrishnan @ 2023-08-10 12:21 UTC (permalink / raw)
  To: dev; +Cc: anoobj, Chengwen Feng, Vamsi Attunuru, Gowrishankar Muthukrishnan

This series enables dmadev tests to run as per configured PMDs,
similar to other subsystem like cryptodev.

Gowrishankar Muthukrishnan (4):
  dmadev: add function to get list of device identifiers
  test/dma: run tests according to PMD
  dma/cnxk: update PCI driver name
  test/dma: enable cnxk tests

 app/test/meson.build           |  8 ++-
 app/test/test_dmadev.c         | 96 ++++++++++++++++++++++++++--------
 drivers/dma/cnxk/cnxk_dmadev.c |  8 +--
 lib/dmadev/rte_dmadev.c        | 20 +++++++
 lib/dmadev/rte_dmadev.h        | 21 ++++++++
 lib/dmadev/version.map         |  1 +
 6 files changed, 128 insertions(+), 26 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/4] dmadev: add function to get list of device identifiers
  2023-08-10 12:21 [PATCH 0/4] test/dma: run tests as per configured pmd Gowrishankar Muthukrishnan
@ 2023-08-10 12:21 ` Gowrishankar Muthukrishnan
  2023-10-08  1:40   ` fengchengwen
  2023-08-10 12:21 ` [PATCH 2/4] test/dma: run tests according to PMD Gowrishankar Muthukrishnan
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Gowrishankar Muthukrishnan @ 2023-08-10 12:21 UTC (permalink / raw)
  To: dev; +Cc: anoobj, Chengwen Feng, Vamsi Attunuru, Gowrishankar Muthukrishnan

Add a function to get list of device identifiers for a given driver
name.

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
 lib/dmadev/rte_dmadev.c | 20 ++++++++++++++++++++
 lib/dmadev/rte_dmadev.h | 21 +++++++++++++++++++++
 lib/dmadev/version.map  |  1 +
 3 files changed, 42 insertions(+)

diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c
index 8c095e1f35..f2a106564d 100644
--- a/lib/dmadev/rte_dmadev.c
+++ b/lib/dmadev/rte_dmadev.c
@@ -388,6 +388,26 @@ rte_dma_get_dev_id_by_name(const char *name)
 	return dev->data->dev_id;
 }
 
+uint8_t
+rte_dma_get_dev_list_by_driver(const char *name, int16_t *devs, uint8_t nb_devs)
+{
+	uint8_t i, count = 0;
+
+	if (name == NULL)
+		return count;
+
+	for (i = 0; i < dma_devices_max && count < nb_devs; i++) {
+		if (rte_dma_devices[i].state == RTE_DMA_DEV_UNUSED)
+			continue;
+
+		if (strncmp(rte_dma_devices[i].device->driver->name,
+					name, strlen(name) + 1) == 0)
+			devs[count++] = i;
+	}
+
+	return count;
+}
+
 bool
 rte_dma_is_valid(int16_t dev_id)
 {
diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h
index e61d71959e..689062a686 100644
--- a/lib/dmadev/rte_dmadev.h
+++ b/lib/dmadev/rte_dmadev.h
@@ -191,6 +191,27 @@ int rte_dma_dev_max(size_t dev_max);
 __rte_experimental
 int rte_dma_get_dev_id_by_name(const char *name);
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Get the list of device identifiers for the DMA driver.
+ *
+ * @param name
+ *   DMA driver name.
+ * @param devs
+ *   Output devices identifiers.
+ * @param nb_devs
+ *   Maximal number of devices.
+ *
+ * @return
+ *   Returns number of device identifiers.
+ */
+__rte_experimental
+uint8_t rte_dma_get_dev_list_by_driver(const char *name,
+				       int16_t *devs,
+				       uint8_t nb_devs);
+
 /**
  * @warning
  * @b EXPERIMENTAL: this API may change without prior notice.
diff --git a/lib/dmadev/version.map b/lib/dmadev/version.map
index 7031d6b335..b4d56b41a0 100644
--- a/lib/dmadev/version.map
+++ b/lib/dmadev/version.map
@@ -7,6 +7,7 @@ EXPERIMENTAL {
 	rte_dma_dev_max;
 	rte_dma_dump;
 	rte_dma_get_dev_id_by_name;
+	rte_dma_get_dev_list_by_driver;
 	rte_dma_info_get;
 	rte_dma_is_valid;
 	rte_dma_next_dev;
-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 2/4] test/dma: run tests according to PMD
  2023-08-10 12:21 [PATCH 0/4] test/dma: run tests as per configured pmd Gowrishankar Muthukrishnan
  2023-08-10 12:21 ` [PATCH 1/4] dmadev: add function to get list of device identifiers Gowrishankar Muthukrishnan
@ 2023-08-10 12:21 ` Gowrishankar Muthukrishnan
  2023-08-10 12:21 ` [PATCH 3/4] dma/cnxk: update PCI driver name Gowrishankar Muthukrishnan
  2023-08-10 12:21 ` [PATCH 4/4] test/dma: enable cnxk tests Gowrishankar Muthukrishnan
  3 siblings, 0 replies; 6+ messages in thread
From: Gowrishankar Muthukrishnan @ 2023-08-10 12:21 UTC (permalink / raw)
  To: dev; +Cc: anoobj, Chengwen Feng, Vamsi Attunuru, Gowrishankar Muthukrishnan

Run tests according to PMD configured.

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
 app/test/meson.build   |  7 +++-
 app/test/test_dmadev.c | 87 +++++++++++++++++++++++++++++++-----------
 2 files changed, 71 insertions(+), 23 deletions(-)

diff --git a/app/test/meson.build b/app/test/meson.build
index 66897c14a3..de671b665f 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -319,7 +319,12 @@ driver_test_names = [
         'cryptodev_sw_snow3g_autotest',
         'cryptodev_sw_zuc_autotest',
         'cryptodev_uadk_autotest',
-        'dmadev_autotest',
+        'dmadev_dpaa_autotest',
+        'dmadev_dpaa2_autotest',
+        'dmadev_hisilicon_autotest',
+        'dmadev_idxd_autotest',
+        'dmadev_ioat_autotest',
+        'dmadev_skeleton_autotest',
 ]
 
 dump_test_names = []
diff --git a/app/test/test_dmadev.c b/app/test/test_dmadev.c
index abe970baaf..5e72e8535c 100644
--- a/app/test/test_dmadev.c
+++ b/app/test/test_dmadev.c
@@ -1025,40 +1025,83 @@ test_dmadev_instance(int16_t dev_id)
 }
 
 static int
-test_apis(void)
+test_dma(const char *pmd)
+{
+	int16_t devs[UINT8_MAX];
+	uint8_t nb_devs;
+	int i;
+
+	if (rte_dma_count_avail() == 0)
+		return TEST_SKIPPED;
+
+	nb_devs = rte_dma_get_dev_list_by_driver(pmd, devs, UINT8_MAX);
+	if (nb_devs == 0)
+		ERR_RETURN("Error, No device found for pmd %s\n", pmd);
+
+	printf("\n### Test dmadev infrastructure using %s driver\n", pmd);
+	if (test_dma_api(devs[0]) < 0)
+		ERR_RETURN("Error, test failure for %d device\n", devs[0]);
+
+	for (i = 0; i < nb_devs; i++)
+		if (test_dmadev_instance(devs[i]) < 0)
+			ERR_RETURN("Error, test failure for %d device\n", devs[i]);
+
+	return 0;
+}
+
+static int
+test_skeleton_dma(void)
 {
 	const char *pmd = "dma_skeleton";
-	int id;
-	int ret;
 
-	/* attempt to create skeleton instance - ignore errors due to one being already present */
+	/* Attempt to create skeleton instance - ignore errors due to one being already present */
 	rte_vdev_init(pmd, NULL);
-	id = rte_dma_get_dev_id_by_name(pmd);
-	if (id < 0)
-		return TEST_SKIPPED;
-	printf("\n### Test dmadev infrastructure using skeleton driver\n");
-	ret = test_dma_api(id);
+	return test_dma(pmd);
+}
 
-	return ret;
+static int
+test_dpaa_dma(void)
+{
+	const char *pmd = "dpaa_qdma";
+
+	return test_dma(pmd);
 }
 
 static int
-test_dma(void)
+test_dpaa2_dma(void)
 {
-	int i;
+	const char *pmd = "dpaa2_qdma";
 
-	/* basic sanity on dmadev infrastructure */
-	if (test_apis() < 0)
-		ERR_RETURN("Error performing API tests\n");
+	return test_dma(pmd);
+}
 
-	if (rte_dma_count_avail() == 0)
-		return TEST_SKIPPED;
+static int
+test_hisilicon_dma(void)
+{
+	const char *pmd = "dma_hisilicon";
 
-	RTE_DMA_FOREACH_DEV(i)
-		if (test_dmadev_instance(i) < 0)
-			ERR_RETURN("Error, test failure for device %d\n", i);
+	return test_dma(pmd);
+}
 
-	return 0;
+static int
+test_idxd_dma(void)
+{
+	const char *pmd = "dmadev_idxd_pci";
+
+	return test_dma(pmd);
+}
+
+static int
+test_ioat_dma(void)
+{
+	const char *pmd = "dmadev_ioat";
+
+	return test_dma(pmd);
 }
 
-REGISTER_TEST_COMMAND(dmadev_autotest, test_dma);
+REGISTER_TEST_COMMAND(dmadev_skeleton_autotest, test_skeleton_dma);
+REGISTER_TEST_COMMAND(dmadev_dpaa_autotest, test_dpaa_dma);
+REGISTER_TEST_COMMAND(dmadev_dpaa2_autotest, test_dpaa2_dma);
+REGISTER_TEST_COMMAND(dmadev_hisilicon_autotest, test_hisilicon_dma);
+REGISTER_TEST_COMMAND(dmadev_idxd_autotest, test_idxd_dma);
+REGISTER_TEST_COMMAND(dmadev_ioat_autotest, test_ioat_dma);
-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 3/4] dma/cnxk: update PCI driver name
  2023-08-10 12:21 [PATCH 0/4] test/dma: run tests as per configured pmd Gowrishankar Muthukrishnan
  2023-08-10 12:21 ` [PATCH 1/4] dmadev: add function to get list of device identifiers Gowrishankar Muthukrishnan
  2023-08-10 12:21 ` [PATCH 2/4] test/dma: run tests according to PMD Gowrishankar Muthukrishnan
@ 2023-08-10 12:21 ` Gowrishankar Muthukrishnan
  2023-08-10 12:21 ` [PATCH 4/4] test/dma: enable cnxk tests Gowrishankar Muthukrishnan
  3 siblings, 0 replies; 6+ messages in thread
From: Gowrishankar Muthukrishnan @ 2023-08-10 12:21 UTC (permalink / raw)
  To: dev; +Cc: anoobj, Chengwen Feng, Vamsi Attunuru, Gowrishankar Muthukrishnan

Follow PCI driver naming convention standard across drivers.

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
 drivers/dma/cnxk/cnxk_dmadev.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/dma/cnxk/cnxk_dmadev.c b/drivers/dma/cnxk/cnxk_dmadev.c
index a6f4a31e0e..8c5d1409b3 100644
--- a/drivers/dma/cnxk/cnxk_dmadev.c
+++ b/drivers/dma/cnxk/cnxk_dmadev.c
@@ -17,6 +17,8 @@
 #include <roc_api.h>
 #include <cnxk_dmadev.h>
 
+#define PCI_DRIVER_NAME dma_cnxk
+
 static int
 cnxk_dmadev_info_get(const struct rte_dma_dev *dev,
 		     struct rte_dma_info *dev_info, uint32_t size)
@@ -719,6 +721,6 @@ static struct rte_pci_driver cnxk_dmadev = {
 	.remove    = cnxk_dmadev_remove,
 };
 
-RTE_PMD_REGISTER_PCI(cnxk_dmadev_pci_driver, cnxk_dmadev);
-RTE_PMD_REGISTER_PCI_TABLE(cnxk_dmadev_pci_driver, cnxk_dma_pci_map);
-RTE_PMD_REGISTER_KMOD_DEP(cnxk_dmadev_pci_driver, "vfio-pci");
+RTE_PMD_REGISTER_PCI(PCI_DRIVER_NAME, cnxk_dmadev);
+RTE_PMD_REGISTER_PCI_TABLE(PCI_DRIVER_NAME, cnxk_dma_pci_map);
+RTE_PMD_REGISTER_KMOD_DEP(PCI_DRIVER_NAME, "vfio-pci");
-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 4/4] test/dma: enable cnxk tests
  2023-08-10 12:21 [PATCH 0/4] test/dma: run tests as per configured pmd Gowrishankar Muthukrishnan
                   ` (2 preceding siblings ...)
  2023-08-10 12:21 ` [PATCH 3/4] dma/cnxk: update PCI driver name Gowrishankar Muthukrishnan
@ 2023-08-10 12:21 ` Gowrishankar Muthukrishnan
  3 siblings, 0 replies; 6+ messages in thread
From: Gowrishankar Muthukrishnan @ 2023-08-10 12:21 UTC (permalink / raw)
  To: dev; +Cc: anoobj, Chengwen Feng, Vamsi Attunuru, Gowrishankar Muthukrishnan

Enable DMA tests for CNXK driver.

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
 app/test/meson.build   | 1 +
 app/test/test_dmadev.c | 9 +++++++++
 2 files changed, 10 insertions(+)

diff --git a/app/test/meson.build b/app/test/meson.build
index de671b665f..fa5987f3a2 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -319,6 +319,7 @@ driver_test_names = [
         'cryptodev_sw_snow3g_autotest',
         'cryptodev_sw_zuc_autotest',
         'cryptodev_uadk_autotest',
+        'dmadev_cnxk_autotest',
         'dmadev_dpaa_autotest',
         'dmadev_dpaa2_autotest',
         'dmadev_hisilicon_autotest',
diff --git a/app/test/test_dmadev.c b/app/test/test_dmadev.c
index 5e72e8535c..090a6e3ce3 100644
--- a/app/test/test_dmadev.c
+++ b/app/test/test_dmadev.c
@@ -1099,9 +1099,18 @@ test_ioat_dma(void)
 	return test_dma(pmd);
 }
 
+static int
+test_cnxk_dma(void)
+{
+	const char *pmd = "dma_cnxk";
+
+	return test_dma(pmd);
+}
+
 REGISTER_TEST_COMMAND(dmadev_skeleton_autotest, test_skeleton_dma);
 REGISTER_TEST_COMMAND(dmadev_dpaa_autotest, test_dpaa_dma);
 REGISTER_TEST_COMMAND(dmadev_dpaa2_autotest, test_dpaa2_dma);
 REGISTER_TEST_COMMAND(dmadev_hisilicon_autotest, test_hisilicon_dma);
 REGISTER_TEST_COMMAND(dmadev_idxd_autotest, test_idxd_dma);
 REGISTER_TEST_COMMAND(dmadev_ioat_autotest, test_ioat_dma);
+REGISTER_TEST_COMMAND(dmadev_cnxk_autotest, test_cnxk_dma);
-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/4] dmadev: add function to get list of device identifiers
  2023-08-10 12:21 ` [PATCH 1/4] dmadev: add function to get list of device identifiers Gowrishankar Muthukrishnan
@ 2023-10-08  1:40   ` fengchengwen
  0 siblings, 0 replies; 6+ messages in thread
From: fengchengwen @ 2023-10-08  1:40 UTC (permalink / raw)
  To: Gowrishankar Muthukrishnan, dev; +Cc: anoobj, Vamsi Attunuru

Hi Gowrishankar,

This could create a help function in test, just like:

func() {
    RTE_DMA_FOREACH_DEV(i) {
        rte_dma_info_get(i, &dev_info);
        if (strncmp(dev_info->dev_name, xxx)
            ...
    }
}


If some application (not test) should pick some specific device, I suggest
add more general API, e.g.

typedef int (*rte_dma_filter_fn)(struct rte_dma_info *dev_info, void *param);
uint16_t
rte_dma_get_devs_by_filter(rte_dma_filter_fn fn, void *param, uint16_t *dev_ids, uint16_t nb_ids) {
    RTE_DMA_FOREACH_DEV(i) {
        rte_dma_info_get(i, &dev_info);
        if (fn(&dev_info, param) == 0) {
            // add to out list
        }
    }
}

So we could filter special name-prefix/capability/multi-vchans

Thanks.

On 2023/8/10 20:21, Gowrishankar Muthukrishnan wrote:
> Add a function to get list of device identifiers for a given driver
> name.
> 
> Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
> ---
>  lib/dmadev/rte_dmadev.c | 20 ++++++++++++++++++++
>  lib/dmadev/rte_dmadev.h | 21 +++++++++++++++++++++
>  lib/dmadev/version.map  |  1 +
>  3 files changed, 42 insertions(+)
> 
> diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c
> index 8c095e1f35..f2a106564d 100644
> --- a/lib/dmadev/rte_dmadev.c
> +++ b/lib/dmadev/rte_dmadev.c
> @@ -388,6 +388,26 @@ rte_dma_get_dev_id_by_name(const char *name)
>  	return dev->data->dev_id;
>  }
>  
> +uint8_t
> +rte_dma_get_dev_list_by_driver(const char *name, int16_t *devs, uint8_t nb_devs)
> +{
> +	uint8_t i, count = 0;
> +
> +	if (name == NULL)
> +		return count;
> +
> +	for (i = 0; i < dma_devices_max && count < nb_devs; i++) {
> +		if (rte_dma_devices[i].state == RTE_DMA_DEV_UNUSED)
> +			continue;
> +
> +		if (strncmp(rte_dma_devices[i].device->driver->name,
> +					name, strlen(name) + 1) == 0)
> +			devs[count++] = i;
> +	}
> +
> +	return count;
> +}
> +
>  bool
>  rte_dma_is_valid(int16_t dev_id)
>  {
> diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h
> index e61d71959e..689062a686 100644
> --- a/lib/dmadev/rte_dmadev.h
> +++ b/lib/dmadev/rte_dmadev.h
> @@ -191,6 +191,27 @@ int rte_dma_dev_max(size_t dev_max);
>  __rte_experimental
>  int rte_dma_get_dev_id_by_name(const char *name);
>  
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * Get the list of device identifiers for the DMA driver.
> + *
> + * @param name
> + *   DMA driver name.
> + * @param devs
> + *   Output devices identifiers.
> + * @param nb_devs
> + *   Maximal number of devices.
> + *
> + * @return
> + *   Returns number of device identifiers.
> + */
> +__rte_experimental
> +uint8_t rte_dma_get_dev_list_by_driver(const char *name,
> +				       int16_t *devs,
> +				       uint8_t nb_devs);
> +
>  /**
>   * @warning
>   * @b EXPERIMENTAL: this API may change without prior notice.
> diff --git a/lib/dmadev/version.map b/lib/dmadev/version.map
> index 7031d6b335..b4d56b41a0 100644
> --- a/lib/dmadev/version.map
> +++ b/lib/dmadev/version.map
> @@ -7,6 +7,7 @@ EXPERIMENTAL {
>  	rte_dma_dev_max;
>  	rte_dma_dump;
>  	rte_dma_get_dev_id_by_name;
> +	rte_dma_get_dev_list_by_driver;
>  	rte_dma_info_get;
>  	rte_dma_is_valid;
>  	rte_dma_next_dev;
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-10-08  1:40 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-10 12:21 [PATCH 0/4] test/dma: run tests as per configured pmd Gowrishankar Muthukrishnan
2023-08-10 12:21 ` [PATCH 1/4] dmadev: add function to get list of device identifiers Gowrishankar Muthukrishnan
2023-10-08  1:40   ` fengchengwen
2023-08-10 12:21 ` [PATCH 2/4] test/dma: run tests according to PMD Gowrishankar Muthukrishnan
2023-08-10 12:21 ` [PATCH 3/4] dma/cnxk: update PCI driver name Gowrishankar Muthukrishnan
2023-08-10 12:21 ` [PATCH 4/4] test/dma: enable cnxk tests Gowrishankar Muthukrishnan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).