DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/4] simplify unit-testing of rawdevs
@ 2020-08-21 15:59 Bruce Richardson
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 1/4] raw/ioat: support multiple devices being tested Bruce Richardson
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Bruce Richardson @ 2020-08-21 15:59 UTC (permalink / raw)
  To: Hemant Agrawal, Nipun Gupta; +Cc: dev, Bruce Richardson

At present the "rawdev_autotest" command creates a skeleton rawdev and runs
a series of tests on the rawdev API and on that rawdev. While the rawdev
API set includes a "selftest" function, it is not hooked up to this test so
to test an individual rawdev driver, e.g. ioat, requires that a new test
command be added.

This patchset improves the situation by changing the UT to first run the
existing API tests, but then call selftest on all rawdevs on the system.
This removes the need for any new test commands for new drivers. If there
are multiple rawdevs on a system, the sub-set to be tested can be limited
via existing means such as using the device block/allow EAL parameters or
similarly via vdev args, etc.

As part of this change, the ioat rawdev autotest is fixed to allow calling
on multiple instances inside the one test run, and thereafter the custom
test command for it is removed as it is no longer necessary.

Bruce Richardson (4):
  raw/ioat: support multiple devices being tested
  raw/ioat: include extra info in error messages
  app/test: change rawdev autotest to run selftest on all devs
  app/test: remove ioat-specific autotest

 app/test/test_rawdev.c              | 38 +++++++++-------
 drivers/raw/ioat/ioat_rawdev_test.c | 69 ++++++++++++++++++++---------
 2 files changed, 68 insertions(+), 39 deletions(-)

-- 
2.25.1


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

* [dpdk-dev] [PATCH 1/4] raw/ioat: support multiple devices being tested
  2020-08-21 15:59 [dpdk-dev] [PATCH 0/4] simplify unit-testing of rawdevs Bruce Richardson
@ 2020-08-21 15:59 ` Bruce Richardson
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 2/4] raw/ioat: include extra info in error messages Bruce Richardson
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 13+ messages in thread
From: Bruce Richardson @ 2020-08-21 15:59 UTC (permalink / raw)
  To: Hemant Agrawal, Nipun Gupta; +Cc: dev, Bruce Richardson

The current selftest function uses a single global variable to track state
which implies that only a single instance can have the selftest function
called on it. Change this to an array to allow multiple instances to be
tested.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/raw/ioat/ioat_rawdev_test.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/raw/ioat/ioat_rawdev_test.c b/drivers/raw/ioat/ioat_rawdev_test.c
index 724cdb9e74..6262995256 100644
--- a/drivers/raw/ioat/ioat_rawdev_test.c
+++ b/drivers/raw/ioat/ioat_rawdev_test.c
@@ -9,10 +9,13 @@
 #include "rte_ioat_rawdev.h"
 #include "ioat_private.h"
 
+#define MAX_SUPPORTED_RAWDEVS 64
+#define TEST_SKIPPED 77
+
 int ioat_rawdev_test(uint16_t dev_id); /* pre-define to keep compiler happy */
 
 static struct rte_mempool *pool;
-static unsigned short expected_ring_size;
+static unsigned short expected_ring_size[MAX_SUPPORTED_RAWDEVS];
 
 static int
 test_enqueue_copies(int dev_id)
@@ -149,10 +152,16 @@ ioat_rawdev_test(uint16_t dev_id)
 	unsigned int nb_xstats;
 	unsigned int i;
 
+	if (dev_id >= MAX_SUPPORTED_RAWDEVS) {
+		printf("Skipping test. Cannot test rawdevs with id's greater than %d\n",
+				MAX_SUPPORTED_RAWDEVS);
+		return TEST_SKIPPED;
+	}
+
 	rte_rawdev_info_get(dev_id, &info, sizeof(p));
-	if (p.ring_size != expected_ring_size) {
+	if (p.ring_size != expected_ring_size[dev_id]) {
 		printf("Error, initial ring size is not as expected (Actual: %d, Expected: %d)\n",
-				(int)p.ring_size, expected_ring_size);
+				(int)p.ring_size, expected_ring_size[dev_id]);
 		return -1;
 	}
 
@@ -167,7 +176,7 @@ ioat_rawdev_test(uint16_t dev_id)
 				IOAT_TEST_RINGSIZE, (int)p.ring_size);
 		return -1;
 	}
-	expected_ring_size = p.ring_size;
+	expected_ring_size[dev_id] = p.ring_size;
 
 	if (rte_rawdev_start(dev_id) != 0) {
 		printf("Error with rte_rawdev_start()\n");
-- 
2.25.1


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

* [dpdk-dev] [PATCH 2/4] raw/ioat: include extra info in error messages
  2020-08-21 15:59 [dpdk-dev] [PATCH 0/4] simplify unit-testing of rawdevs Bruce Richardson
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 1/4] raw/ioat: support multiple devices being tested Bruce Richardson
@ 2020-08-21 15:59 ` Bruce Richardson
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 3/4] app/test: change rawdev autotest to run selftest on all devs Bruce Richardson
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 13+ messages in thread
From: Bruce Richardson @ 2020-08-21 15:59 UTC (permalink / raw)
  To: Hemant Agrawal, Nipun Gupta; +Cc: dev, Bruce Richardson

In case of any failures, include the function name and the line number of
the error message in the message, to make tracking down the failure easier.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/raw/ioat/ioat_rawdev_test.c | 52 +++++++++++++++++++----------
 1 file changed, 34 insertions(+), 18 deletions(-)

diff --git a/drivers/raw/ioat/ioat_rawdev_test.c b/drivers/raw/ioat/ioat_rawdev_test.c
index 6262995256..534b07b124 100644
--- a/drivers/raw/ioat/ioat_rawdev_test.c
+++ b/drivers/raw/ioat/ioat_rawdev_test.c
@@ -17,6 +17,22 @@ int ioat_rawdev_test(uint16_t dev_id); /* pre-define to keep compiler happy */
 static struct rte_mempool *pool;
 static unsigned short expected_ring_size[MAX_SUPPORTED_RAWDEVS];
 
+#define PRINT_ERR(...) print_err(__func__, __LINE__, __VA_ARGS__)
+
+static inline int
+print_err(const char *func, int lineno, const char *format, ...)
+{
+	va_list ap;
+	int ret;
+
+	ret = fprintf(stderr, "In %s:%d - ", func, lineno);
+	va_start(ap, format);
+	ret += vfprintf(stderr, format, ap);
+	va_end(ap);
+
+	return ret;
+}
+
 static int
 test_enqueue_copies(int dev_id)
 {
@@ -46,7 +62,7 @@ test_enqueue_copies(int dev_id)
 				(uintptr_t)src,
 				(uintptr_t)dst,
 				0 /* no fence */) != 1) {
-			printf("Error with rte_ioat_enqueue_copy\n");
+			PRINT_ERR("Error with rte_ioat_enqueue_copy\n");
 			return -1;
 		}
 		rte_ioat_do_copies(dev_id);
@@ -54,18 +70,18 @@ test_enqueue_copies(int dev_id)
 
 		if (rte_ioat_completed_copies(dev_id, 1, (void *)&completed[0],
 				(void *)&completed[1]) != 1) {
-			printf("Error with rte_ioat_completed_copies\n");
+			PRINT_ERR("Error with rte_ioat_completed_copies\n");
 			return -1;
 		}
 		if (completed[0] != src || completed[1] != dst) {
-			printf("Error with completions: got (%p, %p), not (%p,%p)\n",
+			PRINT_ERR("Error with completions: got (%p, %p), not (%p,%p)\n",
 					completed[0], completed[1], src, dst);
 			return -1;
 		}
 
 		for (i = 0; i < length; i++)
 			if (dst_data[i] != src_data[i]) {
-				printf("Data mismatch at char %u\n", i);
+				PRINT_ERR("Data mismatch at char %u\n", i);
 				return -1;
 			}
 		rte_pktmbuf_free(src);
@@ -98,7 +114,7 @@ test_enqueue_copies(int dev_id)
 					(uintptr_t)srcs[i],
 					(uintptr_t)dsts[i],
 					0 /* nofence */) != 1) {
-				printf("Error with rte_ioat_enqueue_copy for buffer %u\n",
+				PRINT_ERR("Error with rte_ioat_enqueue_copy for buffer %u\n",
 						i);
 				return -1;
 			}
@@ -108,18 +124,18 @@ test_enqueue_copies(int dev_id)
 
 		if (rte_ioat_completed_copies(dev_id, 64, (void *)completed_src,
 				(void *)completed_dst) != RTE_DIM(srcs)) {
-			printf("Error with rte_ioat_completed_copies\n");
+			PRINT_ERR("Error with rte_ioat_completed_copies\n");
 			return -1;
 		}
 		for (i = 0; i < RTE_DIM(srcs); i++) {
 			char *src_data, *dst_data;
 
 			if (completed_src[i] != srcs[i]) {
-				printf("Error with source pointer %u\n", i);
+				PRINT_ERR("Error with source pointer %u\n", i);
 				return -1;
 			}
 			if (completed_dst[i] != dsts[i]) {
-				printf("Error with dest pointer %u\n", i);
+				PRINT_ERR("Error with dest pointer %u\n", i);
 				return -1;
 			}
 
@@ -127,7 +143,7 @@ test_enqueue_copies(int dev_id)
 			dst_data = rte_pktmbuf_mtod(dsts[i], char *);
 			for (j = 0; j < length; j++)
 				if (src_data[j] != dst_data[j]) {
-					printf("Error with copy of packet %u, byte %u\n",
+					PRINT_ERR("Error with copy of packet %u, byte %u\n",
 							i, j);
 					return -1;
 				}
@@ -160,26 +176,26 @@ ioat_rawdev_test(uint16_t dev_id)
 
 	rte_rawdev_info_get(dev_id, &info, sizeof(p));
 	if (p.ring_size != expected_ring_size[dev_id]) {
-		printf("Error, initial ring size is not as expected (Actual: %d, Expected: %d)\n",
+		PRINT_ERR("Error, initial ring size is not as expected (Actual: %d, Expected: %d)\n",
 				(int)p.ring_size, expected_ring_size[dev_id]);
 		return -1;
 	}
 
 	p.ring_size = IOAT_TEST_RINGSIZE;
 	if (rte_rawdev_configure(dev_id, &info, sizeof(p)) != 0) {
-		printf("Error with rte_rawdev_configure()\n");
+		PRINT_ERR("Error with rte_rawdev_configure()\n");
 		return -1;
 	}
 	rte_rawdev_info_get(dev_id, &info, sizeof(p));
 	if (p.ring_size != IOAT_TEST_RINGSIZE) {
-		printf("Error, ring size is not %d (%d)\n",
+		PRINT_ERR("Error, ring size is not %d (%d)\n",
 				IOAT_TEST_RINGSIZE, (int)p.ring_size);
 		return -1;
 	}
 	expected_ring_size[dev_id] = p.ring_size;
 
 	if (rte_rawdev_start(dev_id) != 0) {
-		printf("Error with rte_rawdev_start()\n");
+		PRINT_ERR("Error with rte_rawdev_start()\n");
 		return -1;
 	}
 
@@ -190,7 +206,7 @@ ioat_rawdev_test(uint16_t dev_id)
 			2048, /* data room size */
 			info.socket_id);
 	if (pool == NULL) {
-		printf("Error with mempool creation\n");
+		PRINT_ERR("Error with mempool creation\n");
 		return -1;
 	}
 
@@ -199,14 +215,14 @@ ioat_rawdev_test(uint16_t dev_id)
 
 	snames = malloc(sizeof(*snames) * nb_xstats);
 	if (snames == NULL) {
-		printf("Error allocating xstat names memory\n");
+		PRINT_ERR("Error allocating xstat names memory\n");
 		goto err;
 	}
 	rte_rawdev_xstats_names_get(dev_id, snames, nb_xstats);
 
 	ids = malloc(sizeof(*ids) * nb_xstats);
 	if (ids == NULL) {
-		printf("Error allocating xstat ids memory\n");
+		PRINT_ERR("Error allocating xstat ids memory\n");
 		goto err;
 	}
 	for (i = 0; i < nb_xstats; i++)
@@ -214,7 +230,7 @@ ioat_rawdev_test(uint16_t dev_id)
 
 	stats = malloc(sizeof(*stats) * nb_xstats);
 	if (stats == NULL) {
-		printf("Error allocating xstat memory\n");
+		PRINT_ERR("Error allocating xstat memory\n");
 		goto err;
 	}
 
@@ -234,7 +250,7 @@ ioat_rawdev_test(uint16_t dev_id)
 
 	rte_rawdev_stop(dev_id);
 	if (rte_rawdev_xstats_reset(dev_id, NULL, 0) != 0) {
-		printf("Error resetting xstat values\n");
+		PRINT_ERR("Error resetting xstat values\n");
 		goto err;
 	}
 
-- 
2.25.1


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

* [dpdk-dev] [PATCH 3/4] app/test: change rawdev autotest to run selftest on all devs
  2020-08-21 15:59 [dpdk-dev] [PATCH 0/4] simplify unit-testing of rawdevs Bruce Richardson
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 1/4] raw/ioat: support multiple devices being tested Bruce Richardson
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 2/4] raw/ioat: include extra info in error messages Bruce Richardson
@ 2020-08-21 15:59 ` Bruce Richardson
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 4/4] app/test: remove ioat-specific autotest Bruce Richardson
  2020-09-10 16:47 ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Bruce Richardson
  4 siblings, 0 replies; 13+ messages in thread
From: Bruce Richardson @ 2020-08-21 15:59 UTC (permalink / raw)
  To: Hemant Agrawal, Nipun Gupta; +Cc: dev, Bruce Richardson

Rather than having each rawdev provide its own autotest command, we can
instead just use the generic rawdev_autotest to test any and all available
rawdevs.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/test/test_rawdev.c | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/app/test/test_rawdev.c b/app/test/test_rawdev.c
index d8d9595be1..0e25ccf8dc 100644
--- a/app/test/test_rawdev.c
+++ b/app/test/test_rawdev.c
@@ -14,14 +14,38 @@
 static int
 test_rawdev_selftest_impl(const char *pmd, const char *opts)
 {
+	int ret;
+
+	printf("\n### Test rawdev infrastructure using skeleton driver\n");
 	rte_vdev_init(pmd, opts);
-	return rte_rawdev_selftest(rte_rawdev_get_dev_id(pmd));
+	ret = rte_rawdev_selftest(rte_rawdev_get_dev_id(pmd));
+	rte_vdev_uninit(pmd);
+	return ret;
 }
 
 static int
 test_rawdev_selftest_skeleton(void)
 {
-	return test_rawdev_selftest_impl("rawdev_skeleton", "");
+	const int count = rte_rawdev_count();
+	int ret = 0;
+	int i;
+
+	/* basic sanity on rawdev infrastructure */
+	if (test_rawdev_selftest_impl("rawdev_skeleton", "") < 0)
+		return -1;
+
+	/* now run self-test on all rawdevs */
+	if (count > 0)
+		printf("\n### Run selftest on each available rawdev\n");
+	for (i = 0; i < count; i++) {
+		int result = rte_rawdev_selftest(i);
+		printf("Rawdev %u (%s) selftest: %s\n", i,
+				rte_rawdevs[i].name,
+				result == 0 ? "Passed" : "Failed");
+		ret |=  result;
+	}
+
+	return ret;
 }
 
 REGISTER_TEST_COMMAND(rawdev_autotest, test_rawdev_selftest_skeleton);
-- 
2.25.1


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

* [dpdk-dev] [PATCH 4/4] app/test: remove ioat-specific autotest
  2020-08-21 15:59 [dpdk-dev] [PATCH 0/4] simplify unit-testing of rawdevs Bruce Richardson
                   ` (2 preceding siblings ...)
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 3/4] app/test: change rawdev autotest to run selftest on all devs Bruce Richardson
@ 2020-08-21 15:59 ` Bruce Richardson
  2020-09-10 16:47 ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Bruce Richardson
  4 siblings, 0 replies; 13+ messages in thread
From: Bruce Richardson @ 2020-08-21 15:59 UTC (permalink / raw)
  To: Hemant Agrawal, Nipun Gupta; +Cc: dev, Bruce Richardson

Since the rawdev autotest can now be used to test all rawdevs on the
system, there is no need for a dedicated ioat autotest command.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/test/test_rawdev.c | 20 --------------------
 1 file changed, 20 deletions(-)

diff --git a/app/test/test_rawdev.c b/app/test/test_rawdev.c
index 0e25ccf8dc..44651ba3cc 100644
--- a/app/test/test_rawdev.c
+++ b/app/test/test_rawdev.c
@@ -49,23 +49,3 @@ test_rawdev_selftest_skeleton(void)
 }
 
 REGISTER_TEST_COMMAND(rawdev_autotest, test_rawdev_selftest_skeleton);
-
-static int
-test_rawdev_selftest_ioat(void)
-{
-	const int count = rte_rawdev_count();
-	int i;
-
-	for (i = 0; i < count; i++) {
-		struct rte_rawdev_info info = { .dev_private = NULL };
-		if (rte_rawdev_info_get(i, &info, 0) == 0 &&
-				strstr(info.driver_name, "ioat") != NULL)
-			return rte_rawdev_selftest(i) == 0 ?
-					TEST_SUCCESS : TEST_FAILED;
-	}
-
-	printf("No IOAT rawdev found, skipping tests\n");
-	return TEST_SKIPPED;
-}
-
-REGISTER_TEST_COMMAND(ioat_rawdev_autotest, test_rawdev_selftest_ioat);
-- 
2.25.1


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

* [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs
  2020-08-21 15:59 [dpdk-dev] [PATCH 0/4] simplify unit-testing of rawdevs Bruce Richardson
                   ` (3 preceding siblings ...)
  2020-08-21 15:59 ` [dpdk-dev] [PATCH 4/4] app/test: remove ioat-specific autotest Bruce Richardson
@ 2020-09-10 16:47 ` Bruce Richardson
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 1/3] raw/ioat: support multiple devices being tested Bruce Richardson
                     ` (3 more replies)
  4 siblings, 4 replies; 13+ messages in thread
From: Bruce Richardson @ 2020-09-10 16:47 UTC (permalink / raw)
  To: dev; +Cc: Bruce Richardson

At present the "rawdev_autotest" command creates a skeleton rawdev and runs
a series of tests on the rawdev API and on that rawdev. While the rawdev
API set includes a "selftest" function, it is not hooked up to this test so
to test an individual rawdev driver, e.g. ioat, requires that a new test
command be added.

This patchset improves the situation by changing the UT to first run the
existing API tests, but then call selftest on all rawdevs on the system.
This removes the need for any new test commands for new drivers. If there
are multiple rawdevs on a system, the sub-set to be tested can be limited
via existing means such as using the device block/allow EAL parameters or
similarly via vdev args, etc.

As part of this change, the ioat rawdev autotest is fixed to allow calling
on multiple instances inside the one test run, and thereafter the custom
test command for it is removed as it is no longer necessary. 

Depends-on: series-12105 ("Enhance rawdev APIs")

V2:
 - dropped patch 2, which had ioat-only changes to debug prints, and wasn't
   relevant to the rest of the set
 - improved the naming of the test functions in test_rawdev.c
 - added release note entry for these changes

Bruce Richardson (3):
  raw/ioat: support multiple devices being tested
  app/test: change rawdev autotest to run selftest on all devs
  app/test: remove ioat-specific autotest

 app/test/test_rawdev.c                 | 34 +++++++++++++++++---------
 doc/guides/rel_notes/release_20_11.rst |  7 ++++++
 drivers/raw/ioat/ioat_rawdev_test.c    | 17 ++++++++++---
 3 files changed, 42 insertions(+), 16 deletions(-)

-- 
2.25.1


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

* [dpdk-dev] [PATCH v2 1/3] raw/ioat: support multiple devices being tested
  2020-09-10 16:47 ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Bruce Richardson
@ 2020-09-10 16:47   ` Bruce Richardson
  2020-09-14 12:34     ` Laatz, Kevin
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 2/3] app/test: change rawdev autotest to run selftest on all devs Bruce Richardson
                     ` (2 subsequent siblings)
  3 siblings, 1 reply; 13+ messages in thread
From: Bruce Richardson @ 2020-09-10 16:47 UTC (permalink / raw)
  To: dev; +Cc: Bruce Richardson

The current selftest function uses a single global variable to track state
which implies that only a single instance can have the selftest function
called on it. Change this to an array to allow multiple instances to be
tested.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/raw/ioat/ioat_rawdev_test.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/raw/ioat/ioat_rawdev_test.c b/drivers/raw/ioat/ioat_rawdev_test.c
index c463a82ad6..e5b50ae9f4 100644
--- a/drivers/raw/ioat/ioat_rawdev_test.c
+++ b/drivers/raw/ioat/ioat_rawdev_test.c
@@ -8,10 +8,13 @@
 #include "rte_rawdev.h"
 #include "rte_ioat_rawdev.h"
 
+#define MAX_SUPPORTED_RAWDEVS 64
+#define TEST_SKIPPED 77
+
 int ioat_rawdev_test(uint16_t dev_id); /* pre-define to keep compiler happy */
 
 static struct rte_mempool *pool;
-static unsigned short expected_ring_size;
+static unsigned short expected_ring_size[MAX_SUPPORTED_RAWDEVS];
 
 static int
 test_enqueue_copies(int dev_id)
@@ -148,10 +151,16 @@ ioat_rawdev_test(uint16_t dev_id)
 	unsigned int nb_xstats;
 	unsigned int i;
 
+	if (dev_id >= MAX_SUPPORTED_RAWDEVS) {
+		printf("Skipping test. Cannot test rawdevs with id's greater than %d\n",
+				MAX_SUPPORTED_RAWDEVS);
+		return TEST_SKIPPED;
+	}
+
 	rte_rawdev_info_get(dev_id, &info, sizeof(p));
-	if (p.ring_size != expected_ring_size) {
+	if (p.ring_size != expected_ring_size[dev_id]) {
 		printf("Error, initial ring size is not as expected (Actual: %d, Expected: %d)\n",
-				(int)p.ring_size, expected_ring_size);
+				(int)p.ring_size, expected_ring_size[dev_id]);
 		return -1;
 	}
 
@@ -166,7 +175,7 @@ ioat_rawdev_test(uint16_t dev_id)
 				IOAT_TEST_RINGSIZE, (int)p.ring_size);
 		return -1;
 	}
-	expected_ring_size = p.ring_size;
+	expected_ring_size[dev_id] = p.ring_size;
 
 	if (rte_rawdev_start(dev_id) != 0) {
 		printf("Error with rte_rawdev_start()\n");
-- 
2.25.1


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

* [dpdk-dev] [PATCH v2 2/3] app/test: change rawdev autotest to run selftest on all devs
  2020-09-10 16:47 ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Bruce Richardson
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 1/3] raw/ioat: support multiple devices being tested Bruce Richardson
@ 2020-09-10 16:47   ` Bruce Richardson
  2020-09-14 12:28     ` Laatz, Kevin
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 3/3] app/test: remove ioat-specific autotest Bruce Richardson
  2020-10-06  7:28   ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Thomas Monjalon
  3 siblings, 1 reply; 13+ messages in thread
From: Bruce Richardson @ 2020-09-10 16:47 UTC (permalink / raw)
  To: dev
  Cc: Bruce Richardson, Nipun Gupta, Hemant Agrawal, John McNamara,
	Marko Kovacevic

Rather than having each rawdev provide its own autotest command, we can
instead just use the generic rawdev_autotest to test any and all available
rawdevs.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/test/test_rawdev.c                 | 34 ++++++++++++++++++++++++--
 doc/guides/rel_notes/release_20_11.rst |  5 ++++
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/app/test/test_rawdev.c b/app/test/test_rawdev.c
index d8d9595be1..7e2fb2cf27 100644
--- a/app/test/test_rawdev.c
+++ b/app/test/test_rawdev.c
@@ -14,8 +14,13 @@
 static int
 test_rawdev_selftest_impl(const char *pmd, const char *opts)
 {
+	int ret;
+
+	printf("\n### Test rawdev infrastructure using skeleton driver\n");
 	rte_vdev_init(pmd, opts);
-	return rte_rawdev_selftest(rte_rawdev_get_dev_id(pmd));
+	ret = rte_rawdev_selftest(rte_rawdev_get_dev_id(pmd));
+	rte_vdev_uninit(pmd);
+	return ret;
 }
 
 static int
@@ -24,7 +29,32 @@ test_rawdev_selftest_skeleton(void)
 	return test_rawdev_selftest_impl("rawdev_skeleton", "");
 }
 
-REGISTER_TEST_COMMAND(rawdev_autotest, test_rawdev_selftest_skeleton);
+static int
+test_rawdev_selftests(void)
+{
+	const int count = rte_rawdev_count();
+	int ret = 0;
+	int i;
+
+	/* basic sanity on rawdev infrastructure */
+	if (test_rawdev_selftest_skeleton() < 0)
+		return -1;
+
+	/* now run self-test on all rawdevs */
+	if (count > 0)
+		printf("\n### Run selftest on each available rawdev\n");
+	for (i = 0; i < count; i++) {
+		int result = rte_rawdev_selftest(i);
+		printf("Rawdev %u (%s) selftest: %s\n", i,
+				rte_rawdevs[i].name,
+				result == 0 ? "Passed" : "Failed");
+		ret |=  result;
+	}
+
+	return ret;
+}
+
+REGISTER_TEST_COMMAND(rawdev_autotest, test_rawdev_selftests);
 
 static int
 test_rawdev_selftest_ioat(void)
diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst
index 667e3d54ad..2ac7dca9a0 100644
--- a/doc/guides/rel_notes/release_20_11.rst
+++ b/doc/guides/rel_notes/release_20_11.rst
@@ -93,6 +93,11 @@ API Changes
   and the function ``rte_rawdev_queue_conf_get()``
   from ``void`` to ``int`` allowing the return of error codes from drivers.
 
+* rawdev: The running of a drivers ``selftest()`` function can now be done
+  using the ``rawdev_autotest`` command in the ``dpdk-test`` binary. This
+  command now calls the self-test function for each rawdev found on the
+  system, and does not require a specific command per device type.
+
 
 ABI Changes
 -----------
-- 
2.25.1


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

* [dpdk-dev] [PATCH v2 3/3] app/test: remove ioat-specific autotest
  2020-09-10 16:47 ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Bruce Richardson
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 1/3] raw/ioat: support multiple devices being tested Bruce Richardson
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 2/3] app/test: change rawdev autotest to run selftest on all devs Bruce Richardson
@ 2020-09-10 16:47   ` Bruce Richardson
  2020-09-14 12:31     ` Laatz, Kevin
  2020-10-06  7:28   ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Thomas Monjalon
  3 siblings, 1 reply; 13+ messages in thread
From: Bruce Richardson @ 2020-09-10 16:47 UTC (permalink / raw)
  To: dev
  Cc: Bruce Richardson, Nipun Gupta, Hemant Agrawal, John McNamara,
	Marko Kovacevic

Since the rawdev autotest can now be used to test all rawdevs on the
system, there is no need for a dedicated ioat autotest command.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/test/test_rawdev.c                 | 20 --------------------
 doc/guides/rel_notes/release_20_11.rst |  2 ++
 2 files changed, 2 insertions(+), 20 deletions(-)

diff --git a/app/test/test_rawdev.c b/app/test/test_rawdev.c
index 7e2fb2cf27..081fab969b 100644
--- a/app/test/test_rawdev.c
+++ b/app/test/test_rawdev.c
@@ -55,23 +55,3 @@ test_rawdev_selftests(void)
 }
 
 REGISTER_TEST_COMMAND(rawdev_autotest, test_rawdev_selftests);
-
-static int
-test_rawdev_selftest_ioat(void)
-{
-	const int count = rte_rawdev_count();
-	int i;
-
-	for (i = 0; i < count; i++) {
-		struct rte_rawdev_info info = { .dev_private = NULL };
-		if (rte_rawdev_info_get(i, &info, 0) == 0 &&
-				strstr(info.driver_name, "ioat") != NULL)
-			return rte_rawdev_selftest(i) == 0 ?
-					TEST_SUCCESS : TEST_FAILED;
-	}
-
-	printf("No IOAT rawdev found, skipping tests\n");
-	return TEST_SKIPPED;
-}
-
-REGISTER_TEST_COMMAND(ioat_rawdev_autotest, test_rawdev_selftest_ioat);
diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst
index 2ac7dca9a0..0cec16b61d 100644
--- a/doc/guides/rel_notes/release_20_11.rst
+++ b/doc/guides/rel_notes/release_20_11.rst
@@ -97,6 +97,8 @@ API Changes
   using the ``rawdev_autotest`` command in the ``dpdk-test`` binary. This
   command now calls the self-test function for each rawdev found on the
   system, and does not require a specific command per device type.
+  Following this change, the ``ioat_rawdev_autotest`` command has been
+  removed as no longer needed.
 
 
 ABI Changes
-- 
2.25.1


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

* Re: [dpdk-dev] [PATCH v2 2/3] app/test: change rawdev autotest to run selftest on all devs
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 2/3] app/test: change rawdev autotest to run selftest on all devs Bruce Richardson
@ 2020-09-14 12:28     ` Laatz, Kevin
  0 siblings, 0 replies; 13+ messages in thread
From: Laatz, Kevin @ 2020-09-14 12:28 UTC (permalink / raw)
  To: Bruce Richardson, dev
  Cc: Nipun Gupta, Hemant Agrawal, John McNamara, Marko Kovacevic

On 10/09/2020 17:47, Bruce Richardson wrote:
> Rather than having each rawdev provide its own autotest command, we can
> instead just use the generic rawdev_autotest to test any and all available
> rawdevs.
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>   app/test/test_rawdev.c                 | 34 ++++++++++++++++++++++++--
>   doc/guides/rel_notes/release_20_11.rst |  5 ++++
>   2 files changed, 37 insertions(+), 2 deletions(-)
[...]

Reviewed-by: Kevin Laatz <kevin.laatz@intel.com>


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

* Re: [dpdk-dev] [PATCH v2 3/3] app/test: remove ioat-specific autotest
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 3/3] app/test: remove ioat-specific autotest Bruce Richardson
@ 2020-09-14 12:31     ` Laatz, Kevin
  0 siblings, 0 replies; 13+ messages in thread
From: Laatz, Kevin @ 2020-09-14 12:31 UTC (permalink / raw)
  To: Bruce Richardson, dev
  Cc: Nipun Gupta, Hemant Agrawal, John McNamara, Marko Kovacevic

On 10/09/2020 17:47, Bruce Richardson wrote:
> Since the rawdev autotest can now be used to test all rawdevs on the
> system, there is no need for a dedicated ioat autotest command.
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>   app/test/test_rawdev.c                 | 20 --------------------
>   doc/guides/rel_notes/release_20_11.rst |  2 ++
>   2 files changed, 2 insertions(+), 20 deletions(-)
>
[...]

Reviewed-by: Kevin Laatz <kevin.laatz@intel.com>


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

* Re: [dpdk-dev] [PATCH v2 1/3] raw/ioat: support multiple devices being tested
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 1/3] raw/ioat: support multiple devices being tested Bruce Richardson
@ 2020-09-14 12:34     ` Laatz, Kevin
  0 siblings, 0 replies; 13+ messages in thread
From: Laatz, Kevin @ 2020-09-14 12:34 UTC (permalink / raw)
  To: Bruce Richardson, dev

On 10/09/2020 17:47, Bruce Richardson wrote:
> The current selftest function uses a single global variable to track state
> which implies that only a single instance can have the selftest function
> called on it. Change this to an array to allow multiple instances to be
> tested.
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>   drivers/raw/ioat/ioat_rawdev_test.c | 17 +++++++++++++----
>   1 file changed, 13 insertions(+), 4 deletions(-)
>
[...]

Reviewed-by: Kevin Laatz <kevin.laatz@intel.com>


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

* Re: [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs
  2020-09-10 16:47 ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Bruce Richardson
                     ` (2 preceding siblings ...)
  2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 3/3] app/test: remove ioat-specific autotest Bruce Richardson
@ 2020-10-06  7:28   ` Thomas Monjalon
  3 siblings, 0 replies; 13+ messages in thread
From: Thomas Monjalon @ 2020-10-06  7:28 UTC (permalink / raw)
  To: Bruce Richardson; +Cc: dev

> At present the "rawdev_autotest" command creates a skeleton rawdev and runs
> a series of tests on the rawdev API and on that rawdev. While the rawdev
> API set includes a "selftest" function, it is not hooked up to this test so
> to test an individual rawdev driver, e.g. ioat, requires that a new test
> command be added.
> 
> This patchset improves the situation by changing the UT to first run the
> existing API tests, but then call selftest on all rawdevs on the system.
> This removes the need for any new test commands for new drivers. If there
> are multiple rawdevs on a system, the sub-set to be tested can be limited
> via existing means such as using the device block/allow EAL parameters or
> similarly via vdev args, etc.
> 
> As part of this change, the ioat rawdev autotest is fixed to allow calling
> on multiple instances inside the one test run, and thereafter the custom
> test command for it is removed as it is no longer necessary.

Applied, thanks



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

end of thread, other threads:[~2020-10-06  7:28 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-21 15:59 [dpdk-dev] [PATCH 0/4] simplify unit-testing of rawdevs Bruce Richardson
2020-08-21 15:59 ` [dpdk-dev] [PATCH 1/4] raw/ioat: support multiple devices being tested Bruce Richardson
2020-08-21 15:59 ` [dpdk-dev] [PATCH 2/4] raw/ioat: include extra info in error messages Bruce Richardson
2020-08-21 15:59 ` [dpdk-dev] [PATCH 3/4] app/test: change rawdev autotest to run selftest on all devs Bruce Richardson
2020-08-21 15:59 ` [dpdk-dev] [PATCH 4/4] app/test: remove ioat-specific autotest Bruce Richardson
2020-09-10 16:47 ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Bruce Richardson
2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 1/3] raw/ioat: support multiple devices being tested Bruce Richardson
2020-09-14 12:34     ` Laatz, Kevin
2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 2/3] app/test: change rawdev autotest to run selftest on all devs Bruce Richardson
2020-09-14 12:28     ` Laatz, Kevin
2020-09-10 16:47   ` [dpdk-dev] [PATCH v2 3/3] app/test: remove ioat-specific autotest Bruce Richardson
2020-09-14 12:31     ` Laatz, Kevin
2020-10-06  7:28   ` [dpdk-dev] [PATCH v2 0/3] simplify unit-testing of rawdevs Thomas Monjalon

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git