DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest
@ 2019-04-10  7:25 Vamsi Attunuru
  2019-04-10  7:25 ` Vamsi Attunuru
                   ` (3 more replies)
  0 siblings, 4 replies; 14+ messages in thread
From: Vamsi Attunuru @ 2019-04-10  7:25 UTC (permalink / raw)
  To: dev; +Cc: Vamsi Attunuru

"argv2[]" positive test case fails with RTE_MAX_NUMA_NODES=1 config
because of "--socket-mem=0,0,0,0" option, which passes memory sizes
for multiple sockets. This patch fixes the issue by passing memory
size for node 0 alone.

Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
---
 app/test/test_eal_flags.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index 9112c96..90df7b3 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -1161,7 +1161,7 @@ test_memory_flags(void)
 
 	/* valid (zero) --socket-mem flag */
 	const char *argv2[] = {prgname, "-c", "10", "-n", "2",
-			"--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
+			"--file-prefix=" memtest, "--socket-mem=0"};
 
 	/* invalid (incomplete) --socket-mem flag */
 	const char *argv3[] = {prgname, "-c", "10", "-n", "2",
-- 
2.8.4

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

* [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-04-10  7:25 [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest Vamsi Attunuru
@ 2019-04-10  7:25 ` Vamsi Attunuru
  2019-04-10  8:26 ` David Marchand
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 14+ messages in thread
From: Vamsi Attunuru @ 2019-04-10  7:25 UTC (permalink / raw)
  To: dev; +Cc: Vamsi Attunuru

"argv2[]" positive test case fails with RTE_MAX_NUMA_NODES=1 config
because of "--socket-mem=0,0,0,0" option, which passes memory sizes
for multiple sockets. This patch fixes the issue by passing memory
size for node 0 alone.

Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
---
 app/test/test_eal_flags.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index 9112c96..90df7b3 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -1161,7 +1161,7 @@ test_memory_flags(void)
 
 	/* valid (zero) --socket-mem flag */
 	const char *argv2[] = {prgname, "-c", "10", "-n", "2",
-			"--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
+			"--file-prefix=" memtest, "--socket-mem=0"};
 
 	/* invalid (incomplete) --socket-mem flag */
 	const char *argv3[] = {prgname, "-c", "10", "-n", "2",
-- 
2.8.4


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

* Re: [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-04-10  7:25 [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest Vamsi Attunuru
  2019-04-10  7:25 ` Vamsi Attunuru
@ 2019-04-10  8:26 ` David Marchand
  2019-04-10  8:26   ` David Marchand
  2019-04-10 11:43   ` [dpdk-dev] [EXT] " Vamsi Krishna Attunuru
  2019-07-11  5:15 ` [dpdk-dev] [PATCH v2 " vattunuru
  2019-07-29  8:08 ` [dpdk-dev] [PATCH v4] test: " David Marchand
  3 siblings, 2 replies; 14+ messages in thread
From: David Marchand @ 2019-04-10  8:26 UTC (permalink / raw)
  To: Vamsi Attunuru; +Cc: dev, Michael Santana, Aaron Conole

On Wed, Apr 10, 2019 at 9:26 AM Vamsi Attunuru <vattunuru@marvell.com>
wrote:

> "argv2[]" positive test case fails with RTE_MAX_NUMA_NODES=1 config
> because of "--socket-mem=0,0,0,0" option, which passes memory sizes
> for multiple sockets. This patch fixes the issue by passing memory
> size for node 0 alone.
>

How about modifying the test so that it also validates the format is
consistent with the RTE_MAX_NUMA_NODES value ?


-- 
David Marchand

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

* Re: [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-04-10  8:26 ` David Marchand
@ 2019-04-10  8:26   ` David Marchand
  2019-04-10 11:43   ` [dpdk-dev] [EXT] " Vamsi Krishna Attunuru
  1 sibling, 0 replies; 14+ messages in thread
From: David Marchand @ 2019-04-10  8:26 UTC (permalink / raw)
  To: Vamsi Attunuru; +Cc: dev, Michael Santana, Aaron Conole

On Wed, Apr 10, 2019 at 9:26 AM Vamsi Attunuru <vattunuru@marvell.com>
wrote:

> "argv2[]" positive test case fails with RTE_MAX_NUMA_NODES=1 config
> because of "--socket-mem=0,0,0,0" option, which passes memory sizes
> for multiple sockets. This patch fixes the issue by passing memory
> size for node 0 alone.
>

How about modifying the test so that it also validates the format is
consistent with the RTE_MAX_NUMA_NODES value ?


-- 
David Marchand

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

* Re: [dpdk-dev] [EXT] Re: [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-04-10  8:26 ` David Marchand
  2019-04-10  8:26   ` David Marchand
@ 2019-04-10 11:43   ` Vamsi Krishna Attunuru
  2019-04-10 11:43     ` Vamsi Krishna Attunuru
  1 sibling, 1 reply; 14+ messages in thread
From: Vamsi Krishna Attunuru @ 2019-04-10 11:43 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, Michael Santana, Aaron Conole




________________________________
From: David Marchand <david.marchand@redhat.com>
Sent: Wednesday, April 10, 2019 1:56 PM
To: Vamsi Krishna Attunuru
Cc: dev; Michael Santana; Aaron Conole
Subject: [EXT] Re: [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest

External Email
________________________________
On Wed, Apr 10, 2019 at 9:26 AM Vamsi Attunuru <vattunuru@marvell.com<mailto:vattunuru@marvell.com>> wrote:
"argv2[]" positive test case fails with RTE_MAX_NUMA_NODES=1 config
because of "--socket-mem=0,0,0,0" option, which passes memory sizes
for multiple sockets. This patch fixes the issue by passing memory
size for node 0 alone.

How about modifying the test so that it also validates the format is consistent with the RTE_MAX_NUMA_NODES value ?

Vamsi > Yes, started working on it, it should also fix other negative tests(false negative) beneath argv2[] test.


--
David Marchand

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

* Re: [dpdk-dev] [EXT] Re: [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-04-10 11:43   ` [dpdk-dev] [EXT] " Vamsi Krishna Attunuru
@ 2019-04-10 11:43     ` Vamsi Krishna Attunuru
  0 siblings, 0 replies; 14+ messages in thread
From: Vamsi Krishna Attunuru @ 2019-04-10 11:43 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, Michael Santana, Aaron Conole




________________________________
From: David Marchand <david.marchand@redhat.com>
Sent: Wednesday, April 10, 2019 1:56 PM
To: Vamsi Krishna Attunuru
Cc: dev; Michael Santana; Aaron Conole
Subject: [EXT] Re: [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest

External Email
________________________________
On Wed, Apr 10, 2019 at 9:26 AM Vamsi Attunuru <vattunuru@marvell.com<mailto:vattunuru@marvell.com>> wrote:
"argv2[]" positive test case fails with RTE_MAX_NUMA_NODES=1 config
because of "--socket-mem=0,0,0,0" option, which passes memory sizes
for multiple sockets. This patch fixes the issue by passing memory
size for node 0 alone.

How about modifying the test so that it also validates the format is consistent with the RTE_MAX_NUMA_NODES value ?

Vamsi > Yes, started working on it, it should also fix other negative tests(false negative) beneath argv2[] test.


--
David Marchand

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

* [dpdk-dev] [PATCH v2 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-04-10  7:25 [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest Vamsi Attunuru
  2019-04-10  7:25 ` Vamsi Attunuru
  2019-04-10  8:26 ` David Marchand
@ 2019-07-11  5:15 ` vattunuru
  2019-07-11 13:56   ` Aaron Conole
  2019-07-12  6:43   ` [dpdk-dev] [PATCH v3 " vattunuru
  2019-07-29  8:08 ` [dpdk-dev] [PATCH v4] test: " David Marchand
  3 siblings, 2 replies; 14+ messages in thread
From: vattunuru @ 2019-07-11  5:15 UTC (permalink / raw)
  To: dev; +Cc: thomas, jerinj, david.marchand, Vamsi Attunuru

From: Vamsi Attunuru <vattunuru@marvell.com>

eal flag autotest fails when multiple mem size flags are passed
to --socket-mem option irrespective of RTE_MAX_NUMA_NODES.

Patch fixes --socket-mem option by setting enough numbers
of numa node mem flags based on RTE_MAX_NUMA_NODES config.

Fixes: 45f1b6e8680a ("app: add new tests on eal flags")

Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
---
V2 changes:
* Add routine to populate --socket-mem option and use it to form
valid and invalid test commands.

 app/test/test_eal_flags.c | 118 ++++++++++++++++++++++++++--------------------
 1 file changed, 68 insertions(+), 50 deletions(-)

diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index 672ca0a..c8e5c46 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -1250,12 +1250,45 @@ test_file_prefix(void)
 	return 0;
 }
 
+static void
+populate_socket_mem_param(int num_sockets, const char *mem_size, char *buf)
+{
+	char tmp[SOCKET_MEM_STRLEN];
+	int i;
+
+	snprintf(buf, SOCKET_MEM_STRLEN, "--socket-mem=");
+
+	for (i = 0; i < num_sockets ; i++) {
+		snprintf(tmp, sizeof(tmp), "%s%s", buf, mem_size);
+		strlcpy(buf, tmp, sizeof(tmp));
+
+		if (num_sockets + 1 - i > 1) {
+			snprintf(tmp, sizeof(tmp), "%s,", buf);
+			strlcpy(buf, tmp, sizeof(tmp));
+		}
+	}
+}
+
 /*
  * Tests for correct handling of -m and --socket-mem flags
  */
 static int
 test_memory_flags(void)
 {
+	char buf[SOCKET_MEM_STRLEN]; /* to avoid copying string onto itself */
+
+#ifdef RTE_EXEC_ENV_FREEBSD
+	int num_sockets = 1;
+#else
+	int num_sockets = RTE_MIN(get_number_of_sockets(),
+			RTE_MAX_NUMA_NODES);
+#endif
+
+	if (num_sockets <= 0) {
+		printf("Error - cannot get number of sockets!\n");
+		return -1;
+	}
+
 #ifdef RTE_EXEC_ENV_FREEBSD
 	/* BSD target doesn't support prefixes at this point */
 	const char * prefix = "";
@@ -1277,85 +1310,70 @@ test_memory_flags(void)
 			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE};
 
 	/* valid (zero) --socket-mem flag */
+	char arg2_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "0", buf);
+	snprintf(arg2_socket_mem, sizeof(arg2_socket_mem), "%s%s", buf, "0");
 	const char *argv2[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
+			"--file-prefix=" memtest, arg2_socket_mem};
 
 	/* invalid (incomplete) --socket-mem flag */
+	char arg3_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf);
+	snprintf(arg3_socket_mem, sizeof(arg3_socket_mem), "%s%s", buf, "2,");
 	const char *argv3[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,"};
+			"--file-prefix=" memtest, arg3_socket_mem};
 
 	/* invalid (mixed with invalid data) --socket-mem flag */
+	char arg4_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf);
+	snprintf(arg4_socket_mem, sizeof(arg4_socket_mem), "%s%s", buf, "Fred");
 	const char *argv4[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,Fred"};
+			"--file-prefix=" memtest, arg4_socket_mem};
 
 	/* invalid (with numeric value as last character) --socket-mem flag */
+	char arg5_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf);
+	snprintf(arg5_socket_mem, sizeof(arg5_socket_mem),
+		"%s%s", buf, "Fred0");
 	const char *argv5[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,Fred0"};
+			"--file-prefix=" memtest, arg5_socket_mem};
 
 	/* invalid (with empty socket) --socket-mem flag */
+	char arg6_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf);
+	snprintf(arg6_socket_mem, sizeof(arg6_socket_mem), "%s%s", buf, ",,");
 	const char *argv6[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,,2"};
+			"--file-prefix=" memtest, arg6_socket_mem};
 
 	/* invalid (null) --socket-mem flag */
 	const char *argv7[] = {prgname,
 			"--file-prefix=" memtest, "--socket-mem="};
 
 	/* valid --socket-mem specified together with -m flag */
+	char arg8_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf);
+	snprintf(arg8_socket_mem, sizeof(arg8_socket_mem), "%s%s", buf, "2");
 	const char *argv8[] = {prgname,
-			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE, "--socket-mem=2,2"};
+			"--file-prefix=" memtest, "-m",
+			DEFAULT_MEM_SIZE, arg8_socket_mem};
 
 	/* construct an invalid socket mask with 2 megs on each socket plus
 	 * extra 2 megs on socket that doesn't exist on current system */
 	char invalid_socket_mem[SOCKET_MEM_STRLEN];
-	char buf[SOCKET_MEM_STRLEN];	/* to avoid copying string onto itself */
-
-#ifdef RTE_EXEC_ENV_FREEBSD
-	int i, num_sockets = 1;
-#else
-	int i, num_sockets = RTE_MIN(get_number_of_sockets(),
-			RTE_MAX_NUMA_NODES);
-#endif
-
-	if (num_sockets <= 0) {
-		printf("Error - cannot get number of sockets!\n");
-		return -1;
-	}
-
-	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "--socket-mem=");
-
-	/* add one extra socket */
-	for (i = 0; i < num_sockets + 1; i++) {
-		snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem, DEFAULT_MEM_SIZE);
-		strlcpy(invalid_socket_mem, buf, sizeof(invalid_socket_mem));
-
-		if (num_sockets + 1 - i > 1) {
-			snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem);
-			strlcpy(invalid_socket_mem, buf,
-				sizeof(invalid_socket_mem));
-		}
-	}
-
-	/* construct a valid socket mask with 2 megs on each existing socket */
-	char valid_socket_mem[SOCKET_MEM_STRLEN];
-
-	snprintf(valid_socket_mem, sizeof(valid_socket_mem), "--socket-mem=");
-
-	/* add one extra socket */
-	for (i = 0; i < num_sockets; i++) {
-		snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem, DEFAULT_MEM_SIZE);
-		strlcpy(valid_socket_mem, buf, sizeof(valid_socket_mem));
-
-		if (num_sockets - i > 1) {
-			snprintf(buf, sizeof(buf), "%s,", valid_socket_mem);
-			strlcpy(valid_socket_mem, buf,
-				sizeof(valid_socket_mem));
-		}
-	}
+	populate_socket_mem_param(num_sockets, DEFAULT_MEM_SIZE, buf);
+	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem),
+		"%s%s", buf, DEFAULT_MEM_SIZE);
 
 	/* invalid --socket-mem flag (with extra socket) */
 	const char *argv9[] = {prgname,
 			"--file-prefix=" memtest, invalid_socket_mem};
 
+	/* construct a valid socket mask with 2 megs on each existing socket */
+	char valid_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, DEFAULT_MEM_SIZE, buf);
+	snprintf(valid_socket_mem, sizeof(valid_socket_mem),
+		"%s%s", buf, DEFAULT_MEM_SIZE);
+
 	/* valid --socket-mem flag */
 	const char *argv10[] = {prgname,
 			"--file-prefix=" memtest, valid_socket_mem};
-- 
2.8.4


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

* Re: [dpdk-dev] [PATCH v2 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-07-11  5:15 ` [dpdk-dev] [PATCH v2 " vattunuru
@ 2019-07-11 13:56   ` Aaron Conole
  2019-07-12  6:43   ` [dpdk-dev] [PATCH v3 " vattunuru
  1 sibling, 0 replies; 14+ messages in thread
From: Aaron Conole @ 2019-07-11 13:56 UTC (permalink / raw)
  To: vattunuru; +Cc: dev, thomas, jerinj, david.marchand

<vattunuru@marvell.com> writes:

> From: Vamsi Attunuru <vattunuru@marvell.com>
>
> eal flag autotest fails when multiple mem size flags are passed
> to --socket-mem option irrespective of RTE_MAX_NUMA_NODES.
>
> Patch fixes --socket-mem option by setting enough numbers
> of numa node mem flags based on RTE_MAX_NUMA_NODES config.
>
> Fixes: 45f1b6e8680a ("app: add new tests on eal flags")
>
> Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
> ---
> V2 changes:
> * Add routine to populate --socket-mem option and use it to form
> valid and invalid test commands.
>
>  app/test/test_eal_flags.c | 118 ++++++++++++++++++++++++++--------------------
>  1 file changed, 68 insertions(+), 50 deletions(-)
>
> diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
> index 672ca0a..c8e5c46 100644
> --- a/app/test/test_eal_flags.c
> +++ b/app/test/test_eal_flags.c
> @@ -1250,12 +1250,45 @@ test_file_prefix(void)
>  	return 0;
>  }
>  
> +static void
> +populate_socket_mem_param(int num_sockets, const char *mem_size, char *buf)
> +{
> +	char tmp[SOCKET_MEM_STRLEN];
> +	int i;
> +
> +	snprintf(buf, SOCKET_MEM_STRLEN, "--socket-mem=");
> +
> +	for (i = 0; i < num_sockets ; i++) {
> +		snprintf(tmp, sizeof(tmp), "%s%s", buf, mem_size);
> +		strlcpy(buf, tmp, sizeof(tmp));

strlcpy requires the 3rd parameter be the size of the destination not
the size of the source.

You'll need to pass sizeof(buf) into this function.

Same goes for everywhere strlcpy is used.

> +		if (num_sockets + 1 - i > 1) {
> +			snprintf(tmp, sizeof(tmp), "%s,", buf);
> +			strlcpy(buf, tmp, sizeof(tmp));
> +		}
> +	}
> +}
> +
>  /*
>   * Tests for correct handling of -m and --socket-mem flags
>   */
>  static int
>  test_memory_flags(void)
>  {
> +	char buf[SOCKET_MEM_STRLEN]; /* to avoid copying string onto itself */
> +
> +#ifdef RTE_EXEC_ENV_FREEBSD
> +	int num_sockets = 1;
> +#else
> +	int num_sockets = RTE_MIN(get_number_of_sockets(),
> +			RTE_MAX_NUMA_NODES);
> +#endif
> +
> +	if (num_sockets <= 0) {
> +		printf("Error - cannot get number of sockets!\n");
> +		return -1;
> +	}
> +
>  #ifdef RTE_EXEC_ENV_FREEBSD
>  	/* BSD target doesn't support prefixes at this point */
>  	const char * prefix = "";
> @@ -1277,85 +1310,70 @@ test_memory_flags(void)
>  			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE};
>  
>  	/* valid (zero) --socket-mem flag */
> +	char arg2_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "0", buf);
> +	snprintf(arg2_socket_mem, sizeof(arg2_socket_mem), "%s%s", buf, "0");
>  	const char *argv2[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
> +			"--file-prefix=" memtest, arg2_socket_mem};
>  
>  	/* invalid (incomplete) --socket-mem flag */
> +	char arg3_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf);
> +	snprintf(arg3_socket_mem, sizeof(arg3_socket_mem), "%s%s", buf, "2,");
>  	const char *argv3[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=2,2,"};
> +			"--file-prefix=" memtest, arg3_socket_mem};
>  
>  	/* invalid (mixed with invalid data) --socket-mem flag */
> +	char arg4_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf);
> +	snprintf(arg4_socket_mem, sizeof(arg4_socket_mem), "%s%s", buf, "Fred");
>  	const char *argv4[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=2,2,Fred"};
> +			"--file-prefix=" memtest, arg4_socket_mem};
>  
>  	/* invalid (with numeric value as last character) --socket-mem flag */
> +	char arg5_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf);
> +	snprintf(arg5_socket_mem, sizeof(arg5_socket_mem),
> +		"%s%s", buf, "Fred0");
>  	const char *argv5[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=2,2,Fred0"};
> +			"--file-prefix=" memtest, arg5_socket_mem};
>  
>  	/* invalid (with empty socket) --socket-mem flag */
> +	char arg6_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf);
> +	snprintf(arg6_socket_mem, sizeof(arg6_socket_mem), "%s%s", buf, ",,");
>  	const char *argv6[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=2,,2"};
> +			"--file-prefix=" memtest, arg6_socket_mem};
>  
>  	/* invalid (null) --socket-mem flag */
>  	const char *argv7[] = {prgname,
>  			"--file-prefix=" memtest, "--socket-mem="};
>  
>  	/* valid --socket-mem specified together with -m flag */
> +	char arg8_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf);
> +	snprintf(arg8_socket_mem, sizeof(arg8_socket_mem), "%s%s", buf, "2");
>  	const char *argv8[] = {prgname,
> -			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE, "--socket-mem=2,2"};
> +			"--file-prefix=" memtest, "-m",
> +			DEFAULT_MEM_SIZE, arg8_socket_mem};
>  
>  	/* construct an invalid socket mask with 2 megs on each socket plus
>  	 * extra 2 megs on socket that doesn't exist on current system */
>  	char invalid_socket_mem[SOCKET_MEM_STRLEN];
> -	char buf[SOCKET_MEM_STRLEN];	/* to avoid copying string onto itself */
> -
> -#ifdef RTE_EXEC_ENV_FREEBSD
> -	int i, num_sockets = 1;
> -#else
> -	int i, num_sockets = RTE_MIN(get_number_of_sockets(),
> -			RTE_MAX_NUMA_NODES);
> -#endif
> -
> -	if (num_sockets <= 0) {
> -		printf("Error - cannot get number of sockets!\n");
> -		return -1;
> -	}
> -
> -	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "--socket-mem=");
> -
> -	/* add one extra socket */
> -	for (i = 0; i < num_sockets + 1; i++) {
> -		snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem, DEFAULT_MEM_SIZE);
> -		strlcpy(invalid_socket_mem, buf, sizeof(invalid_socket_mem));
> -
> -		if (num_sockets + 1 - i > 1) {
> -			snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem);
> -			strlcpy(invalid_socket_mem, buf,
> -				sizeof(invalid_socket_mem));
> -		}
> -	}
> -
> -	/* construct a valid socket mask with 2 megs on each existing socket */
> -	char valid_socket_mem[SOCKET_MEM_STRLEN];
> -
> -	snprintf(valid_socket_mem, sizeof(valid_socket_mem), "--socket-mem=");
> -
> -	/* add one extra socket */
> -	for (i = 0; i < num_sockets; i++) {
> -		snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem, DEFAULT_MEM_SIZE);
> -		strlcpy(valid_socket_mem, buf, sizeof(valid_socket_mem));
> -
> -		if (num_sockets - i > 1) {
> -			snprintf(buf, sizeof(buf), "%s,", valid_socket_mem);
> -			strlcpy(valid_socket_mem, buf,
> -				sizeof(valid_socket_mem));
> -		}
> -	}
> +	populate_socket_mem_param(num_sockets, DEFAULT_MEM_SIZE, buf);
> +	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem),
> +		"%s%s", buf, DEFAULT_MEM_SIZE);
>  
>  	/* invalid --socket-mem flag (with extra socket) */
>  	const char *argv9[] = {prgname,
>  			"--file-prefix=" memtest, invalid_socket_mem};
>  
> +	/* construct a valid socket mask with 2 megs on each existing socket */
> +	char valid_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, DEFAULT_MEM_SIZE, buf);
> +	snprintf(valid_socket_mem, sizeof(valid_socket_mem),
> +		"%s%s", buf, DEFAULT_MEM_SIZE);
> +
>  	/* valid --socket-mem flag */
>  	const char *argv10[] = {prgname,
>  			"--file-prefix=" memtest, valid_socket_mem};

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

* [dpdk-dev] [PATCH v3 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-07-11  5:15 ` [dpdk-dev] [PATCH v2 " vattunuru
  2019-07-11 13:56   ` Aaron Conole
@ 2019-07-12  6:43   ` vattunuru
  2019-07-23  6:13     ` Vamsi Krishna Attunuru
  2019-07-26 13:39     ` David Marchand
  1 sibling, 2 replies; 14+ messages in thread
From: vattunuru @ 2019-07-12  6:43 UTC (permalink / raw)
  To: dev; +Cc: thomas, jerinj, david.marchand, aconole, Vamsi Attunuru

From: Vamsi Attunuru <vattunuru@marvell.com>

eal flag autotest fails when multiple mem size flags are passed
to --socket-mem option irrespective of RTE_MAX_NUMA_NODES.

Patch fixes --socket-mem option by setting enough numbers
of numa node mem flags based on RTE_MAX_NUMA_NODES config.

Fixes: 45f1b6e8680a ("app: add new tests on eal flags")

Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
---
V3 changes:
* Pass buffer size info to populate socket mem routine which
strlcpy requires.

V2 changes:
* Add routine to populate --socket-mem option and use it to form
valid and invalid test commands.

 app/test/test_eal_flags.c | 121 +++++++++++++++++++++++++++-------------------
 1 file changed, 71 insertions(+), 50 deletions(-)

diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index 672ca0a..053d694 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -1250,12 +1250,46 @@ test_file_prefix(void)
 	return 0;
 }
 
+static void
+populate_socket_mem_param(int num_sockets, const char *mem,
+			 char *buf, size_t buf_size)
+{
+	char tmp[SOCKET_MEM_STRLEN];
+	int i;
+
+	snprintf(buf, SOCKET_MEM_STRLEN, "--socket-mem=");
+
+	for (i = 0; i < num_sockets ; i++) {
+		snprintf(tmp, sizeof(tmp), "%s%s", buf, mem);
+		strlcpy(buf, tmp, buf_size);
+
+		if (num_sockets + 1 - i > 1) {
+			snprintf(tmp, sizeof(tmp), "%s,", buf);
+			strlcpy(buf, tmp, buf_size);
+		}
+	}
+}
+
 /*
  * Tests for correct handling of -m and --socket-mem flags
  */
 static int
 test_memory_flags(void)
 {
+	char buf[SOCKET_MEM_STRLEN]; /* to avoid copying string onto itself */
+
+#ifdef RTE_EXEC_ENV_FREEBSD
+	int num_sockets = 1;
+#else
+	int num_sockets = RTE_MIN(get_number_of_sockets(),
+			RTE_MAX_NUMA_NODES);
+#endif
+
+	if (num_sockets <= 0) {
+		printf("Error - cannot get number of sockets!\n");
+		return -1;
+	}
+
 #ifdef RTE_EXEC_ENV_FREEBSD
 	/* BSD target doesn't support prefixes at this point */
 	const char * prefix = "";
@@ -1277,85 +1311,72 @@ test_memory_flags(void)
 			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE};
 
 	/* valid (zero) --socket-mem flag */
+	char arg2_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "0", buf, sizeof(buf));
+	snprintf(arg2_socket_mem, sizeof(arg2_socket_mem), "%s%s", buf, "0");
 	const char *argv2[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
+			"--file-prefix=" memtest, arg2_socket_mem};
 
 	/* invalid (incomplete) --socket-mem flag */
+	char arg3_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
+	snprintf(arg3_socket_mem, sizeof(arg3_socket_mem), "%s%s", buf, "2,");
 	const char *argv3[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,"};
+			"--file-prefix=" memtest, arg3_socket_mem};
 
 	/* invalid (mixed with invalid data) --socket-mem flag */
+	char arg4_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
+	snprintf(arg4_socket_mem, sizeof(arg4_socket_mem), "%s%s", buf, "Fred");
 	const char *argv4[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,Fred"};
+			"--file-prefix=" memtest, arg4_socket_mem};
 
 	/* invalid (with numeric value as last character) --socket-mem flag */
+	char arg5_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
+	snprintf(arg5_socket_mem, sizeof(arg5_socket_mem),
+		"%s%s", buf, "Fred0");
 	const char *argv5[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,Fred0"};
+			"--file-prefix=" memtest, arg5_socket_mem};
 
 	/* invalid (with empty socket) --socket-mem flag */
+	char arg6_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
+	snprintf(arg6_socket_mem, sizeof(arg6_socket_mem), "%s%s", buf, ",,");
 	const char *argv6[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,,2"};
+			"--file-prefix=" memtest, arg6_socket_mem};
 
 	/* invalid (null) --socket-mem flag */
 	const char *argv7[] = {prgname,
 			"--file-prefix=" memtest, "--socket-mem="};
 
 	/* valid --socket-mem specified together with -m flag */
+	char arg8_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
+	snprintf(arg8_socket_mem, sizeof(arg8_socket_mem), "%s%s", buf, "2");
 	const char *argv8[] = {prgname,
-			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE, "--socket-mem=2,2"};
+			"--file-prefix=" memtest, "-m",
+			DEFAULT_MEM_SIZE, arg8_socket_mem};
 
 	/* construct an invalid socket mask with 2 megs on each socket plus
 	 * extra 2 megs on socket that doesn't exist on current system */
 	char invalid_socket_mem[SOCKET_MEM_STRLEN];
-	char buf[SOCKET_MEM_STRLEN];	/* to avoid copying string onto itself */
-
-#ifdef RTE_EXEC_ENV_FREEBSD
-	int i, num_sockets = 1;
-#else
-	int i, num_sockets = RTE_MIN(get_number_of_sockets(),
-			RTE_MAX_NUMA_NODES);
-#endif
-
-	if (num_sockets <= 0) {
-		printf("Error - cannot get number of sockets!\n");
-		return -1;
-	}
-
-	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "--socket-mem=");
-
-	/* add one extra socket */
-	for (i = 0; i < num_sockets + 1; i++) {
-		snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem, DEFAULT_MEM_SIZE);
-		strlcpy(invalid_socket_mem, buf, sizeof(invalid_socket_mem));
-
-		if (num_sockets + 1 - i > 1) {
-			snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem);
-			strlcpy(invalid_socket_mem, buf,
-				sizeof(invalid_socket_mem));
-		}
-	}
-
-	/* construct a valid socket mask with 2 megs on each existing socket */
-	char valid_socket_mem[SOCKET_MEM_STRLEN];
-
-	snprintf(valid_socket_mem, sizeof(valid_socket_mem), "--socket-mem=");
-
-	/* add one extra socket */
-	for (i = 0; i < num_sockets; i++) {
-		snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem, DEFAULT_MEM_SIZE);
-		strlcpy(valid_socket_mem, buf, sizeof(valid_socket_mem));
-
-		if (num_sockets - i > 1) {
-			snprintf(buf, sizeof(buf), "%s,", valid_socket_mem);
-			strlcpy(valid_socket_mem, buf,
-				sizeof(valid_socket_mem));
-		}
-	}
+	populate_socket_mem_param(num_sockets, DEFAULT_MEM_SIZE,
+				 buf, sizeof(buf));
+	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem),
+		"%s%s", buf, DEFAULT_MEM_SIZE);
 
 	/* invalid --socket-mem flag (with extra socket) */
 	const char *argv9[] = {prgname,
 			"--file-prefix=" memtest, invalid_socket_mem};
 
+	/* construct a valid socket mask with 2 megs on each existing socket */
+	char valid_socket_mem[SOCKET_MEM_STRLEN];
+	populate_socket_mem_param(num_sockets - 1, DEFAULT_MEM_SIZE,
+				 buf, sizeof(buf));
+	snprintf(valid_socket_mem, sizeof(valid_socket_mem),
+		"%s%s", buf, DEFAULT_MEM_SIZE);
+
 	/* valid --socket-mem flag */
 	const char *argv10[] = {prgname,
 			"--file-prefix=" memtest, valid_socket_mem};
-- 
2.8.4


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

* Re: [dpdk-dev] [PATCH v3 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-07-12  6:43   ` [dpdk-dev] [PATCH v3 " vattunuru
@ 2019-07-23  6:13     ` Vamsi Krishna Attunuru
  2019-07-26 13:39     ` David Marchand
  1 sibling, 0 replies; 14+ messages in thread
From: Vamsi Krishna Attunuru @ 2019-07-23  6:13 UTC (permalink / raw)
  To: dev
  Cc: thomas, Jerin Jacob Kollanukkaran, david.marchand, aconole,
	Anatoly Burakov

Ping

V3 review request..

> -----Original Message-----
> From: vattunuru@marvell.com <vattunuru@marvell.com>
> Sent: Friday, July 12, 2019 12:13 PM
> To: dev@dpdk.org
> Cc: thomas@monjalon.net; Jerin Jacob Kollanukkaran <jerinj@marvell.com>;
> david.marchand@redhat.com; aconole@redhat.com; Vamsi Krishna Attunuru
> <vattunuru@marvell.com>
> Subject: [PATCH v3 1/1] app/test: fix --socket-mem option in eal flag autotest
> 
> From: Vamsi Attunuru <vattunuru@marvell.com>
> 
> eal flag autotest fails when multiple mem size flags are passed to --socket-mem
> option irrespective of RTE_MAX_NUMA_NODES.
> 
> Patch fixes --socket-mem option by setting enough numbers of numa node mem
> flags based on RTE_MAX_NUMA_NODES config.
> 
> Fixes: 45f1b6e8680a ("app: add new tests on eal flags")
> 
> Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
> ---
> V3 changes:
> * Pass buffer size info to populate socket mem routine which strlcpy requires.
> 
> V2 changes:
> * Add routine to populate --socket-mem option and use it to form valid and
> invalid test commands.
> 
>  app/test/test_eal_flags.c | 121 +++++++++++++++++++++++++++------------------
> -
>  1 file changed, 71 insertions(+), 50 deletions(-)
> 
> diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c index
> 672ca0a..053d694 100644
> --- a/app/test/test_eal_flags.c
> +++ b/app/test/test_eal_flags.c
> @@ -1250,12 +1250,46 @@ test_file_prefix(void)
>  	return 0;
>  }
> 
> +static void
> +populate_socket_mem_param(int num_sockets, const char *mem,
> +			 char *buf, size_t buf_size)
> +{
> +	char tmp[SOCKET_MEM_STRLEN];
> +	int i;
> +
> +	snprintf(buf, SOCKET_MEM_STRLEN, "--socket-mem=");
> +
> +	for (i = 0; i < num_sockets ; i++) {
> +		snprintf(tmp, sizeof(tmp), "%s%s", buf, mem);
> +		strlcpy(buf, tmp, buf_size);
> +
> +		if (num_sockets + 1 - i > 1) {
> +			snprintf(tmp, sizeof(tmp), "%s,", buf);
> +			strlcpy(buf, tmp, buf_size);
> +		}
> +	}
> +}
> +
>  /*
>   * Tests for correct handling of -m and --socket-mem flags
>   */
>  static int
>  test_memory_flags(void)
>  {
> +	char buf[SOCKET_MEM_STRLEN]; /* to avoid copying string onto itself
> */
> +
> +#ifdef RTE_EXEC_ENV_FREEBSD
> +	int num_sockets = 1;
> +#else
> +	int num_sockets = RTE_MIN(get_number_of_sockets(),
> +			RTE_MAX_NUMA_NODES);
> +#endif
> +
> +	if (num_sockets <= 0) {
> +		printf("Error - cannot get number of sockets!\n");
> +		return -1;
> +	}
> +
>  #ifdef RTE_EXEC_ENV_FREEBSD
>  	/* BSD target doesn't support prefixes at this point */
>  	const char * prefix = "";
> @@ -1277,85 +1311,72 @@ test_memory_flags(void)
>  			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE};
> 
>  	/* valid (zero) --socket-mem flag */
> +	char arg2_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "0", buf, sizeof(buf));
> +	snprintf(arg2_socket_mem, sizeof(arg2_socket_mem), "%s%s", buf,
> "0");
>  	const char *argv2[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
> +			"--file-prefix=" memtest, arg2_socket_mem};
> 
>  	/* invalid (incomplete) --socket-mem flag */
> +	char arg3_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +	snprintf(arg3_socket_mem, sizeof(arg3_socket_mem), "%s%s", buf,
> "2,");
>  	const char *argv3[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=2,2,"};
> +			"--file-prefix=" memtest, arg3_socket_mem};
> 
>  	/* invalid (mixed with invalid data) --socket-mem flag */
> +	char arg4_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +	snprintf(arg4_socket_mem, sizeof(arg4_socket_mem), "%s%s", buf,
> +"Fred");
>  	const char *argv4[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=2,2,Fred"};
> +			"--file-prefix=" memtest, arg4_socket_mem};
> 
>  	/* invalid (with numeric value as last character) --socket-mem flag */
> +	char arg5_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +	snprintf(arg5_socket_mem, sizeof(arg5_socket_mem),
> +		"%s%s", buf, "Fred0");
>  	const char *argv5[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=2,2,Fred0"};
> +			"--file-prefix=" memtest, arg5_socket_mem};
> 
>  	/* invalid (with empty socket) --socket-mem flag */
> +	char arg6_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +	snprintf(arg6_socket_mem, sizeof(arg6_socket_mem), "%s%s", buf,
> ",,");
>  	const char *argv6[] = {prgname,
> -			"--file-prefix=" memtest, "--socket-mem=2,,2"};
> +			"--file-prefix=" memtest, arg6_socket_mem};
> 
>  	/* invalid (null) --socket-mem flag */
>  	const char *argv7[] = {prgname,
>  			"--file-prefix=" memtest, "--socket-mem="};
> 
>  	/* valid --socket-mem specified together with -m flag */
> +	char arg8_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +	snprintf(arg8_socket_mem, sizeof(arg8_socket_mem), "%s%s", buf,
> "2");
>  	const char *argv8[] = {prgname,
> -			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE, "-
> -socket-mem=2,2"};
> +			"--file-prefix=" memtest, "-m",
> +			DEFAULT_MEM_SIZE, arg8_socket_mem};
> 
>  	/* construct an invalid socket mask with 2 megs on each socket plus
>  	 * extra 2 megs on socket that doesn't exist on current system */
>  	char invalid_socket_mem[SOCKET_MEM_STRLEN];
> -	char buf[SOCKET_MEM_STRLEN];	/* to avoid copying string onto
> itself */
> -
> -#ifdef RTE_EXEC_ENV_FREEBSD
> -	int i, num_sockets = 1;
> -#else
> -	int i, num_sockets = RTE_MIN(get_number_of_sockets(),
> -			RTE_MAX_NUMA_NODES);
> -#endif
> -
> -	if (num_sockets <= 0) {
> -		printf("Error - cannot get number of sockets!\n");
> -		return -1;
> -	}
> -
> -	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "--socket-
> mem=");
> -
> -	/* add one extra socket */
> -	for (i = 0; i < num_sockets + 1; i++) {
> -		snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem,
> DEFAULT_MEM_SIZE);
> -		strlcpy(invalid_socket_mem, buf, sizeof(invalid_socket_mem));
> -
> -		if (num_sockets + 1 - i > 1) {
> -			snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem);
> -			strlcpy(invalid_socket_mem, buf,
> -				sizeof(invalid_socket_mem));
> -		}
> -	}
> -
> -	/* construct a valid socket mask with 2 megs on each existing socket */
> -	char valid_socket_mem[SOCKET_MEM_STRLEN];
> -
> -	snprintf(valid_socket_mem, sizeof(valid_socket_mem), "--socket-
> mem=");
> -
> -	/* add one extra socket */
> -	for (i = 0; i < num_sockets; i++) {
> -		snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem,
> DEFAULT_MEM_SIZE);
> -		strlcpy(valid_socket_mem, buf, sizeof(valid_socket_mem));
> -
> -		if (num_sockets - i > 1) {
> -			snprintf(buf, sizeof(buf), "%s,", valid_socket_mem);
> -			strlcpy(valid_socket_mem, buf,
> -				sizeof(valid_socket_mem));
> -		}
> -	}
> +	populate_socket_mem_param(num_sockets, DEFAULT_MEM_SIZE,
> +				 buf, sizeof(buf));
> +	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem),
> +		"%s%s", buf, DEFAULT_MEM_SIZE);
> 
>  	/* invalid --socket-mem flag (with extra socket) */
>  	const char *argv9[] = {prgname,
>  			"--file-prefix=" memtest, invalid_socket_mem};
> 
> +	/* construct a valid socket mask with 2 megs on each existing socket */
> +	char valid_socket_mem[SOCKET_MEM_STRLEN];
> +	populate_socket_mem_param(num_sockets - 1, DEFAULT_MEM_SIZE,
> +				 buf, sizeof(buf));
> +	snprintf(valid_socket_mem, sizeof(valid_socket_mem),
> +		"%s%s", buf, DEFAULT_MEM_SIZE);
> +
>  	/* valid --socket-mem flag */
>  	const char *argv10[] = {prgname,
>  			"--file-prefix=" memtest, valid_socket_mem};
> --
> 2.8.4


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

* Re: [dpdk-dev] [PATCH v3 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-07-12  6:43   ` [dpdk-dev] [PATCH v3 " vattunuru
  2019-07-23  6:13     ` Vamsi Krishna Attunuru
@ 2019-07-26 13:39     ` David Marchand
  2019-07-28  4:19       ` [dpdk-dev] [EXT] " Vamsi Krishna Attunuru
  1 sibling, 1 reply; 14+ messages in thread
From: David Marchand @ 2019-07-26 13:39 UTC (permalink / raw)
  To: Vamsi Attunuru
  Cc: dev, Thomas Monjalon, Jerin Jacob Kollanukkaran, Aaron Conole

Hello,

On Fri, Jul 12, 2019 at 8:43 AM <vattunuru@marvell.com> wrote:
>
> From: Vamsi Attunuru <vattunuru@marvell.com>
>
> eal flag autotest fails when multiple mem size flags are passed
> to --socket-mem option irrespective of RTE_MAX_NUMA_NODES.
>
> Patch fixes --socket-mem option by setting enough numbers
> of numa node mem flags based on RTE_MAX_NUMA_NODES config.
>
> Fixes: 45f1b6e8680a ("app: add new tests on eal flags")
>
> Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
> ---
> V3 changes:
> * Pass buffer size info to populate socket mem routine which
> strlcpy requires.
>
> V2 changes:
> * Add routine to populate --socket-mem option and use it to form
> valid and invalid test commands.
>
>  app/test/test_eal_flags.c | 121 +++++++++++++++++++++++++++-------------------
>  1 file changed, 71 insertions(+), 50 deletions(-)
>
> diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
> index 672ca0a..053d694 100644
> --- a/app/test/test_eal_flags.c
> +++ b/app/test/test_eal_flags.c
> @@ -1250,12 +1250,46 @@ test_file_prefix(void)
>         return 0;
>  }
>
> +static void
> +populate_socket_mem_param(int num_sockets, const char *mem,
> +                        char *buf, size_t buf_size)
> +{
> +       char tmp[SOCKET_MEM_STRLEN];

You don't need this temp buffer.

> +       int i;
> +
> +       snprintf(buf, SOCKET_MEM_STRLEN, "--socket-mem=");

buf is buf_size large, not SOCKET_MEM_STRLEN.


> +
> +       for (i = 0; i < num_sockets ; i++) {
> +               snprintf(tmp, sizeof(tmp), "%s%s", buf, mem);
> +               strlcpy(buf, tmp, buf_size);
> +
> +               if (num_sockets + 1 - i > 1) {
> +                       snprintf(tmp, sizeof(tmp), "%s,", buf);
> +                       strlcpy(buf, tmp, buf_size);
> +               }
> +       }
> +}
> +


How about the following:

/* This function writes in passed buf pointer a valid --socket-mem= option
 * for num_sockets then concatenates the provided suffix string.
 *
 * Example for num_sockets 4, mem "2", suffix "plop"
 * --socket-mem=2,2,2,2plop
 */
static void
populate_socket_mem_param(int num_sockets, const char *mem,
                const char *suffix, char *buf, size_t buf_size)
{
        unsigned int offset = 0;
        int written;
        int i;

        written = snprintf(&buf[offset], buf_size - offset, "--socket-mem=");
        if (written < 0 || written + offset >= buf_size)
                return;
        offset += written;

        for (i = 0; i < num_sockets - 1; i++) {
                written = snprintf(&buf[offset], buf_size - offset,
                        "%s,", mem);
                if (written < 0 || written + offset >= buf_size)
                        return;
                offset += written;
        }

        written = snprintf(&buf[offset], buf_size - offset, "%s%s", mem,
                suffix);
        if (written < 0 || written + offset >= buf_size)
                return;
        offset += written;
}

See below for usage.



>  /*
>   * Tests for correct handling of -m and --socket-mem flags
>   */
>  static int
>  test_memory_flags(void)
>  {
> +       char buf[SOCKET_MEM_STRLEN]; /* to avoid copying string onto itself */

You don't need this temp buffer.


> +
> +#ifdef RTE_EXEC_ENV_FREEBSD
> +       int num_sockets = 1;
> +#else
> +       int num_sockets = RTE_MIN(get_number_of_sockets(),
> +                       RTE_MAX_NUMA_NODES);
> +#endif
> +
> +       if (num_sockets <= 0) {
> +               printf("Error - cannot get number of sockets!\n");
> +               return -1;
> +       }
> +
>  #ifdef RTE_EXEC_ENV_FREEBSD
>         /* BSD target doesn't support prefixes at this point */
>         const char * prefix = "";
> @@ -1277,85 +1311,72 @@ test_memory_flags(void)
>                         "--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE};
>
>         /* valid (zero) --socket-mem flag */
> +       char arg2_socket_mem[SOCKET_MEM_STRLEN];
> +       populate_socket_mem_param(num_sockets - 1, "0", buf, sizeof(buf));
> +       snprintf(arg2_socket_mem, sizeof(arg2_socket_mem), "%s%s", buf, "0");

With the proposed populate_socket_mem_param, it becomes:

        populate_socket_mem_param(num_sockets, "0", "",
                        arg2_socket_mem, sizeof(arg2_socket_mem));

>         const char *argv2[] = {prgname,
> -                       "--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
> +                       "--file-prefix=" memtest, arg2_socket_mem};
>
>         /* invalid (incomplete) --socket-mem flag */
> +       char arg3_socket_mem[SOCKET_MEM_STRLEN];
> +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));

What happens when num_socket == 1?

With the proposed populate_socket_mem_param, it would become:

        populate_socket_mem_param(num_sockets - 1, "2", ",",
                        arg3_socket_mem, sizeof(arg3_socket_mem));

But we need to ensure that we have at least two sockets before
starting the test on argv3.


> +       snprintf(arg3_socket_mem, sizeof(arg3_socket_mem), "%s%s", buf, "2,");
>         const char *argv3[] = {prgname,
> -                       "--file-prefix=" memtest, "--socket-mem=2,2,"};
> +                       "--file-prefix=" memtest, arg3_socket_mem};
>
>         /* invalid (mixed with invalid data) --socket-mem flag */
> +       char arg4_socket_mem[SOCKET_MEM_STRLEN];
> +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +       snprintf(arg4_socket_mem, sizeof(arg4_socket_mem), "%s%s", buf, "Fred");
>         const char *argv4[] = {prgname,
> -                       "--file-prefix=" memtest, "--socket-mem=2,2,Fred"};
> +                       "--file-prefix=" memtest, arg4_socket_mem};

Idem argv3.

>
>         /* invalid (with numeric value as last character) --socket-mem flag */
> +       char arg5_socket_mem[SOCKET_MEM_STRLEN];
> +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +       snprintf(arg5_socket_mem, sizeof(arg5_socket_mem),
> +               "%s%s", buf, "Fred0");
>         const char *argv5[] = {prgname,
> -                       "--file-prefix=" memtest, "--socket-mem=2,2,Fred0"};
> +                       "--file-prefix=" memtest, arg5_socket_mem};

Idem argv3.

>
>         /* invalid (with empty socket) --socket-mem flag */
> +       char arg6_socket_mem[SOCKET_MEM_STRLEN];
> +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +       snprintf(arg6_socket_mem, sizeof(arg6_socket_mem), "%s%s", buf, ",,");
>         const char *argv6[] = {prgname,
> -                       "--file-prefix=" memtest, "--socket-mem=2,,2"};
> +                       "--file-prefix=" memtest, arg6_socket_mem};

Here, this test requires at least 3 sockets so that we can test at minimum 2,,2.


>
>         /* invalid (null) --socket-mem flag */
>         const char *argv7[] = {prgname,
>                         "--file-prefix=" memtest, "--socket-mem="};
>
>         /* valid --socket-mem specified together with -m flag */
> +       char arg8_socket_mem[SOCKET_MEM_STRLEN];
> +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> +       snprintf(arg8_socket_mem, sizeof(arg8_socket_mem), "%s%s", buf, "2");
>         const char *argv8[] = {prgname,
> -                       "--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE, "--socket-mem=2,2"};
> +                       "--file-prefix=" memtest, "-m",
> +                       DEFAULT_MEM_SIZE, arg8_socket_mem};
>
>         /* construct an invalid socket mask with 2 megs on each socket plus
>          * extra 2 megs on socket that doesn't exist on current system */
>         char invalid_socket_mem[SOCKET_MEM_STRLEN];
> -       char buf[SOCKET_MEM_STRLEN];    /* to avoid copying string onto itself */
> -
> -#ifdef RTE_EXEC_ENV_FREEBSD
> -       int i, num_sockets = 1;
> -#else
> -       int i, num_sockets = RTE_MIN(get_number_of_sockets(),
> -                       RTE_MAX_NUMA_NODES);
> -#endif
> -
> -       if (num_sockets <= 0) {
> -               printf("Error - cannot get number of sockets!\n");
> -               return -1;
> -       }
> -
> -       snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "--socket-mem=");
> -
> -       /* add one extra socket */
> -       for (i = 0; i < num_sockets + 1; i++) {
> -               snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem, DEFAULT_MEM_SIZE);
> -               strlcpy(invalid_socket_mem, buf, sizeof(invalid_socket_mem));
> -
> -               if (num_sockets + 1 - i > 1) {
> -                       snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem);
> -                       strlcpy(invalid_socket_mem, buf,
> -                               sizeof(invalid_socket_mem));
> -               }
> -       }
> -
> -       /* construct a valid socket mask with 2 megs on each existing socket */
> -       char valid_socket_mem[SOCKET_MEM_STRLEN];
> -
> -       snprintf(valid_socket_mem, sizeof(valid_socket_mem), "--socket-mem=");
> -
> -       /* add one extra socket */
> -       for (i = 0; i < num_sockets; i++) {
> -               snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem, DEFAULT_MEM_SIZE);
> -               strlcpy(valid_socket_mem, buf, sizeof(valid_socket_mem));
> -
> -               if (num_sockets - i > 1) {
> -                       snprintf(buf, sizeof(buf), "%s,", valid_socket_mem);
> -                       strlcpy(valid_socket_mem, buf,
> -                               sizeof(valid_socket_mem));
> -               }
> -       }
> +       populate_socket_mem_param(num_sockets, DEFAULT_MEM_SIZE,
> +                                buf, sizeof(buf));
> +       snprintf(invalid_socket_mem, sizeof(invalid_socket_mem),
> +               "%s%s", buf, DEFAULT_MEM_SIZE);

The comment says you want to generate a string with 2M per socket, not
DEFAULT_MEM_SIZE.

>
>         /* invalid --socket-mem flag (with extra socket) */
>         const char *argv9[] = {prgname,
>                         "--file-prefix=" memtest, invalid_socket_mem};
>
> +       /* construct a valid socket mask with 2 megs on each existing socket */
> +       char valid_socket_mem[SOCKET_MEM_STRLEN];
> +       populate_socket_mem_param(num_sockets - 1, DEFAULT_MEM_SIZE,
> +                                buf, sizeof(buf));
> +       snprintf(valid_socket_mem, sizeof(valid_socket_mem),
> +               "%s%s", buf, DEFAULT_MEM_SIZE);
> +

Idem 2M, not DEFAULT_MEM_SIZE.


>         /* valid --socket-mem flag */
>         const char *argv10[] = {prgname,
>                         "--file-prefix=" memtest, valid_socket_mem};
> --
> 2.8.4
>

I prepared a patch with my comments addressed, can you have a look ?
https://github.com/david-marchand/dpdk/commit/a78b7572a402579d775f1d0622d1454eb36e0ad4

Thanks.


--
David Marchand

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

* Re: [dpdk-dev] [EXT] Re: [PATCH v3 1/1] app/test: fix --socket-mem option in eal flag autotest
  2019-07-26 13:39     ` David Marchand
@ 2019-07-28  4:19       ` Vamsi Krishna Attunuru
  0 siblings, 0 replies; 14+ messages in thread
From: Vamsi Krishna Attunuru @ 2019-07-28  4:19 UTC (permalink / raw)
  To: David Marchand
  Cc: dev, Thomas Monjalon, Jerin Jacob Kollanukkaran, Aaron Conole

Hi,

> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Friday, July 26, 2019 7:10 PM
> To: Vamsi Krishna Attunuru <vattunuru@marvell.com>
> Cc: dev <dev@dpdk.org>; Thomas Monjalon <thomas@monjalon.net>; Jerin
> Jacob Kollanukkaran <jerinj@marvell.com>; Aaron Conole
> <aconole@redhat.com>
> Subject: [EXT] Re: [PATCH v3 1/1] app/test: fix --socket-mem option in eal flag
> autotest
> 
> External Email
> 
> ----------------------------------------------------------------------
> Hello,
> 
> On Fri, Jul 12, 2019 at 8:43 AM <vattunuru@marvell.com> wrote:
> >
> > From: Vamsi Attunuru <vattunuru@marvell.com>
> >
> > eal flag autotest fails when multiple mem size flags are passed to
> > --socket-mem option irrespective of RTE_MAX_NUMA_NODES.
> >
> > Patch fixes --socket-mem option by setting enough numbers of numa node
> > mem flags based on RTE_MAX_NUMA_NODES config.
> >
> > Fixes: 45f1b6e8680a ("app: add new tests on eal flags")
> >
> > Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
> > ---
> > V3 changes:
> > * Pass buffer size info to populate socket mem routine which strlcpy
> > requires.
> >
> > V2 changes:
> > * Add routine to populate --socket-mem option and use it to form valid
> > and invalid test commands.
> >
> >  app/test/test_eal_flags.c | 121
> > +++++++++++++++++++++++++++-------------------
> >  1 file changed, 71 insertions(+), 50 deletions(-)
> >
> > diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
> > index 672ca0a..053d694 100644
> > --- a/app/test/test_eal_flags.c
> > +++ b/app/test/test_eal_flags.c
> > @@ -1250,12 +1250,46 @@ test_file_prefix(void)
> >         return 0;
> >  }
> >
> > +static void
> > +populate_socket_mem_param(int num_sockets, const char *mem,
> > +                        char *buf, size_t buf_size) {
> > +       char tmp[SOCKET_MEM_STRLEN];
> 
> You don't need this temp buffer.
> 
> > +       int i;
> > +
> > +       snprintf(buf, SOCKET_MEM_STRLEN, "--socket-mem=");
> 
> buf is buf_size large, not SOCKET_MEM_STRLEN.
> 
> 
> > +
> > +       for (i = 0; i < num_sockets ; i++) {
> > +               snprintf(tmp, sizeof(tmp), "%s%s", buf, mem);
> > +               strlcpy(buf, tmp, buf_size);
> > +
> > +               if (num_sockets + 1 - i > 1) {
> > +                       snprintf(tmp, sizeof(tmp), "%s,", buf);
> > +                       strlcpy(buf, tmp, buf_size);
> > +               }
> > +       }
> > +}
> > +
> 
> 
> How about the following:
> 
> /* This function writes in passed buf pointer a valid --socket-mem= option
>  * for num_sockets then concatenates the provided suffix string.
>  *
>  * Example for num_sockets 4, mem "2", suffix "plop"
>  * --socket-mem=2,2,2,2plop
>  */
> static void
> populate_socket_mem_param(int num_sockets, const char *mem,
>                 const char *suffix, char *buf, size_t buf_size) {
>         unsigned int offset = 0;
>         int written;
>         int i;
> 
>         written = snprintf(&buf[offset], buf_size - offset, "--socket-mem=");
>         if (written < 0 || written + offset >= buf_size)
>                 return;
>         offset += written;
> 
>         for (i = 0; i < num_sockets - 1; i++) {
>                 written = snprintf(&buf[offset], buf_size - offset,
>                         "%s,", mem);
>                 if (written < 0 || written + offset >= buf_size)
>                         return;
>                 offset += written;
>         }
> 
>         written = snprintf(&buf[offset], buf_size - offset, "%s%s", mem,
>                 suffix);
>         if (written < 0 || written + offset >= buf_size)
>                 return;
>         offset += written;
> }
> 
> See below for usage.
> 
> 
> 
> >  /*
> >   * Tests for correct handling of -m and --socket-mem flags
> >   */
> >  static int
> >  test_memory_flags(void)
> >  {
> > +       char buf[SOCKET_MEM_STRLEN]; /* to avoid copying string onto
> > + itself */
> 
> You don't need this temp buffer.
> 
> 
> > +
> > +#ifdef RTE_EXEC_ENV_FREEBSD
> > +       int num_sockets = 1;
> > +#else
> > +       int num_sockets = RTE_MIN(get_number_of_sockets(),
> > +                       RTE_MAX_NUMA_NODES); #endif
> > +
> > +       if (num_sockets <= 0) {
> > +               printf("Error - cannot get number of sockets!\n");
> > +               return -1;
> > +       }
> > +
> >  #ifdef RTE_EXEC_ENV_FREEBSD
> >         /* BSD target doesn't support prefixes at this point */
> >         const char * prefix = "";
> > @@ -1277,85 +1311,72 @@ test_memory_flags(void)
> >                         "--file-prefix=" memtest, "-m",
> > DEFAULT_MEM_SIZE};
> >
> >         /* valid (zero) --socket-mem flag */
> > +       char arg2_socket_mem[SOCKET_MEM_STRLEN];
> > +       populate_socket_mem_param(num_sockets - 1, "0", buf, sizeof(buf));
> > +       snprintf(arg2_socket_mem, sizeof(arg2_socket_mem), "%s%s",
> > + buf, "0");
> 
> With the proposed populate_socket_mem_param, it becomes:
> 
>         populate_socket_mem_param(num_sockets, "0", "",
>                         arg2_socket_mem, sizeof(arg2_socket_mem));
> 
> >         const char *argv2[] = {prgname,
> > -                       "--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
> > +                       "--file-prefix=" memtest, arg2_socket_mem};
> >
> >         /* invalid (incomplete) --socket-mem flag */
> > +       char arg3_socket_mem[SOCKET_MEM_STRLEN];
> > +       populate_socket_mem_param(num_sockets - 1, "2", buf,
> > + sizeof(buf));
> 
> What happens when num_socket == 1?
> 
> With the proposed populate_socket_mem_param, it would become:
> 
>         populate_socket_mem_param(num_sockets - 1, "2", ",",
>                         arg3_socket_mem, sizeof(arg3_socket_mem));
> 
> But we need to ensure that we have at least two sockets before starting the
> test on argv3.
> 
> 
> > +       snprintf(arg3_socket_mem, sizeof(arg3_socket_mem), "%s%s",
> > + buf, "2,");
> >         const char *argv3[] = {prgname,
> > -                       "--file-prefix=" memtest, "--socket-mem=2,2,"};
> > +                       "--file-prefix=" memtest, arg3_socket_mem};
> >
> >         /* invalid (mixed with invalid data) --socket-mem flag */
> > +       char arg4_socket_mem[SOCKET_MEM_STRLEN];
> > +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> > +       snprintf(arg4_socket_mem, sizeof(arg4_socket_mem), "%s%s",
> > + buf, "Fred");
> >         const char *argv4[] = {prgname,
> > -                       "--file-prefix=" memtest, "--socket-mem=2,2,Fred"};
> > +                       "--file-prefix=" memtest, arg4_socket_mem};
> 
> Idem argv3.
> 
> >
> >         /* invalid (with numeric value as last character) --socket-mem
> > flag */
> > +       char arg5_socket_mem[SOCKET_MEM_STRLEN];
> > +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> > +       snprintf(arg5_socket_mem, sizeof(arg5_socket_mem),
> > +               "%s%s", buf, "Fred0");
> >         const char *argv5[] = {prgname,
> > -                       "--file-prefix=" memtest, "--socket-mem=2,2,Fred0"};
> > +                       "--file-prefix=" memtest, arg5_socket_mem};
> 
> Idem argv3.
> 
> >
> >         /* invalid (with empty socket) --socket-mem flag */
> > +       char arg6_socket_mem[SOCKET_MEM_STRLEN];
> > +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> > +       snprintf(arg6_socket_mem, sizeof(arg6_socket_mem), "%s%s",
> > + buf, ",,");
> >         const char *argv6[] = {prgname,
> > -                       "--file-prefix=" memtest, "--socket-mem=2,,2"};
> > +                       "--file-prefix=" memtest, arg6_socket_mem};
> 
> Here, this test requires at least 3 sockets so that we can test at minimum 2,,2.
> 
> 
> >
> >         /* invalid (null) --socket-mem flag */
> >         const char *argv7[] = {prgname,
> >                         "--file-prefix=" memtest, "--socket-mem="};
> >
> >         /* valid --socket-mem specified together with -m flag */
> > +       char arg8_socket_mem[SOCKET_MEM_STRLEN];
> > +       populate_socket_mem_param(num_sockets - 1, "2", buf, sizeof(buf));
> > +       snprintf(arg8_socket_mem, sizeof(arg8_socket_mem), "%s%s",
> > + buf, "2");
> >         const char *argv8[] = {prgname,
> > -                       "--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE, "--
> socket-mem=2,2"};
> > +                       "--file-prefix=" memtest, "-m",
> > +                       DEFAULT_MEM_SIZE, arg8_socket_mem};
> >
> >         /* construct an invalid socket mask with 2 megs on each socket plus
> >          * extra 2 megs on socket that doesn't exist on current system */
> >         char invalid_socket_mem[SOCKET_MEM_STRLEN];
> > -       char buf[SOCKET_MEM_STRLEN];    /* to avoid copying string onto
> itself */
> > -
> > -#ifdef RTE_EXEC_ENV_FREEBSD
> > -       int i, num_sockets = 1;
> > -#else
> > -       int i, num_sockets = RTE_MIN(get_number_of_sockets(),
> > -                       RTE_MAX_NUMA_NODES);
> > -#endif
> > -
> > -       if (num_sockets <= 0) {
> > -               printf("Error - cannot get number of sockets!\n");
> > -               return -1;
> > -       }
> > -
> > -       snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "--socket-
> mem=");
> > -
> > -       /* add one extra socket */
> > -       for (i = 0; i < num_sockets + 1; i++) {
> > -               snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem,
> DEFAULT_MEM_SIZE);
> > -               strlcpy(invalid_socket_mem, buf, sizeof(invalid_socket_mem));
> > -
> > -               if (num_sockets + 1 - i > 1) {
> > -                       snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem);
> > -                       strlcpy(invalid_socket_mem, buf,
> > -                               sizeof(invalid_socket_mem));
> > -               }
> > -       }
> > -
> > -       /* construct a valid socket mask with 2 megs on each existing socket */
> > -       char valid_socket_mem[SOCKET_MEM_STRLEN];
> > -
> > -       snprintf(valid_socket_mem, sizeof(valid_socket_mem), "--socket-
> mem=");
> > -
> > -       /* add one extra socket */
> > -       for (i = 0; i < num_sockets; i++) {
> > -               snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem,
> DEFAULT_MEM_SIZE);
> > -               strlcpy(valid_socket_mem, buf, sizeof(valid_socket_mem));
> > -
> > -               if (num_sockets - i > 1) {
> > -                       snprintf(buf, sizeof(buf), "%s,", valid_socket_mem);
> > -                       strlcpy(valid_socket_mem, buf,
> > -                               sizeof(valid_socket_mem));
> > -               }
> > -       }
> > +       populate_socket_mem_param(num_sockets, DEFAULT_MEM_SIZE,
> > +                                buf, sizeof(buf));
> > +       snprintf(invalid_socket_mem, sizeof(invalid_socket_mem),
> > +               "%s%s", buf, DEFAULT_MEM_SIZE);
> 
> The comment says you want to generate a string with 2M per socket, not
> DEFAULT_MEM_SIZE.
> 
> >
> >         /* invalid --socket-mem flag (with extra socket) */
> >         const char *argv9[] = {prgname,
> >                         "--file-prefix=" memtest, invalid_socket_mem};
> >
> > +       /* construct a valid socket mask with 2 megs on each existing socket */
> > +       char valid_socket_mem[SOCKET_MEM_STRLEN];
> > +       populate_socket_mem_param(num_sockets - 1, DEFAULT_MEM_SIZE,
> > +                                buf, sizeof(buf));
> > +       snprintf(valid_socket_mem, sizeof(valid_socket_mem),
> > +               "%s%s", buf, DEFAULT_MEM_SIZE);
> > +
> 
> Idem 2M, not DEFAULT_MEM_SIZE.
> 
> 
> >         /* valid --socket-mem flag */
> >         const char *argv10[] = {prgname,
> >                         "--file-prefix=" memtest, valid_socket_mem};
> > --
> > 2.8.4
> >
> 
> I prepared a patch with my comments addressed, can you have a look ?
> https://github.com/david-
> marchand/dpdk/commit/a78b7572a402579d775f1d0622d1454eb36e0ad4

Thanks for the comments and new patch, reviewed and verified it.
Patch looks good to me.

Reviewed-by: Vamsi Attunuru <vattunuru@marvell.com>
Tested-by: Vamsi Attunuru <vattunuru@marvell.com>

> 
> Thanks.
> 
> 
> --
> David Marchand

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

* [dpdk-dev] [PATCH v4] test: fix --socket-mem option in eal flag autotest
  2019-04-10  7:25 [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest Vamsi Attunuru
                   ` (2 preceding siblings ...)
  2019-07-11  5:15 ` [dpdk-dev] [PATCH v2 " vattunuru
@ 2019-07-29  8:08 ` David Marchand
  2019-07-30  9:24   ` Thomas Monjalon
  3 siblings, 1 reply; 14+ messages in thread
From: David Marchand @ 2019-07-29  8:08 UTC (permalink / raw)
  To: dev; +Cc: Vamsi Attunuru, stable

From: Vamsi Attunuru <vattunuru@marvell.com>

eal flag autotest fails when multiple mem size flags are passed to
--socket-mem option irrespective of RTE_MAX_NUMA_NODES and the number of
available sockets on the test system.

Fixes: 45f1b6e8680a ("app: add new tests on eal flags")
Cc: stable@dpdk.org

Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
Reviewed-by: Vamsi Attunuru <vattunuru@marvell.com>
Tested-by: Vamsi Attunuru <vattunuru@marvell.com>
---
 app/test/test_eal_flags.c | 144 +++++++++++++++++++++++++++-------------------
 1 file changed, 86 insertions(+), 58 deletions(-)

diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index 672ca0a..827ea88 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -1250,6 +1250,40 @@ test_file_prefix(void)
 	return 0;
 }
 
+/* This function writes in passed buf pointer a valid --socket-mem= option
+ * for num_sockets then concatenates the provided suffix string.
+ *
+ * Example for num_sockets 4, mem "2", suffix "plop"
+ * --socket-mem=2,2,2,2plop
+ */
+static void
+populate_socket_mem_param(int num_sockets, const char *mem,
+		const char *suffix, char *buf, size_t buf_size)
+{
+	unsigned int offset = 0;
+	int written;
+	int i;
+
+	written = snprintf(&buf[offset], buf_size - offset, "--socket-mem=");
+	if (written < 0 || written + offset >= buf_size)
+		return;
+	offset += written;
+
+	for (i = 0; i < num_sockets - 1; i++) {
+		written = snprintf(&buf[offset], buf_size - offset,
+			"%s,", mem);
+		if (written < 0 || written + offset >= buf_size)
+			return;
+		offset += written;
+	}
+
+	written = snprintf(&buf[offset], buf_size - offset, "%s%s", mem,
+		suffix);
+	if (written < 0 || written + offset >= buf_size)
+		return;
+	offset += written;
+}
+
 /*
  * Tests for correct handling of -m and --socket-mem flags
  */
@@ -1277,42 +1311,44 @@ test_memory_flags(void)
 			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE};
 
 	/* valid (zero) --socket-mem flag */
+	char arg2_socket_mem[SOCKET_MEM_STRLEN];
 	const char *argv2[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
+			"--file-prefix=" memtest, arg2_socket_mem};
 
 	/* invalid (incomplete) --socket-mem flag */
+	char arg3_socket_mem[SOCKET_MEM_STRLEN];
 	const char *argv3[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,"};
+			"--file-prefix=" memtest, arg3_socket_mem};
 
 	/* invalid (mixed with invalid data) --socket-mem flag */
+	char arg4_socket_mem[SOCKET_MEM_STRLEN];
 	const char *argv4[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,Fred"};
+			"--file-prefix=" memtest, arg4_socket_mem};
 
 	/* invalid (with numeric value as last character) --socket-mem flag */
+	char arg5_socket_mem[SOCKET_MEM_STRLEN];
 	const char *argv5[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,2,Fred0"};
+			"--file-prefix=" memtest, arg5_socket_mem};
 
 	/* invalid (with empty socket) --socket-mem flag */
+	char arg6_socket_mem[SOCKET_MEM_STRLEN];
 	const char *argv6[] = {prgname,
-			"--file-prefix=" memtest, "--socket-mem=2,,2"};
+			"--file-prefix=" memtest, arg6_socket_mem};
 
 	/* invalid (null) --socket-mem flag */
 	const char *argv7[] = {prgname,
 			"--file-prefix=" memtest, "--socket-mem="};
 
 	/* valid --socket-mem specified together with -m flag */
+	char arg8_socket_mem[SOCKET_MEM_STRLEN];
 	const char *argv8[] = {prgname,
-			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE, "--socket-mem=2,2"};
-
-	/* construct an invalid socket mask with 2 megs on each socket plus
-	 * extra 2 megs on socket that doesn't exist on current system */
-	char invalid_socket_mem[SOCKET_MEM_STRLEN];
-	char buf[SOCKET_MEM_STRLEN];	/* to avoid copying string onto itself */
+			"--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE,
+			arg8_socket_mem};
 
 #ifdef RTE_EXEC_ENV_FREEBSD
-	int i, num_sockets = 1;
+	int num_sockets = 1;
 #else
-	int i, num_sockets = RTE_MIN(get_number_of_sockets(),
+	int num_sockets = RTE_MIN(get_number_of_sockets(),
 			RTE_MAX_NUMA_NODES);
 #endif
 
@@ -1321,42 +1357,13 @@ test_memory_flags(void)
 		return -1;
 	}
 
-	snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "--socket-mem=");
-
-	/* add one extra socket */
-	for (i = 0; i < num_sockets + 1; i++) {
-		snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem, DEFAULT_MEM_SIZE);
-		strlcpy(invalid_socket_mem, buf, sizeof(invalid_socket_mem));
-
-		if (num_sockets + 1 - i > 1) {
-			snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem);
-			strlcpy(invalid_socket_mem, buf,
-				sizeof(invalid_socket_mem));
-		}
-	}
-
-	/* construct a valid socket mask with 2 megs on each existing socket */
-	char valid_socket_mem[SOCKET_MEM_STRLEN];
-
-	snprintf(valid_socket_mem, sizeof(valid_socket_mem), "--socket-mem=");
-
-	/* add one extra socket */
-	for (i = 0; i < num_sockets; i++) {
-		snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem, DEFAULT_MEM_SIZE);
-		strlcpy(valid_socket_mem, buf, sizeof(valid_socket_mem));
-
-		if (num_sockets - i > 1) {
-			snprintf(buf, sizeof(buf), "%s,", valid_socket_mem);
-			strlcpy(valid_socket_mem, buf,
-				sizeof(valid_socket_mem));
-		}
-	}
-
 	/* invalid --socket-mem flag (with extra socket) */
+	char invalid_socket_mem[SOCKET_MEM_STRLEN];
 	const char *argv9[] = {prgname,
 			"--file-prefix=" memtest, invalid_socket_mem};
 
 	/* valid --socket-mem flag */
+	char valid_socket_mem[SOCKET_MEM_STRLEN];
 	const char *argv10[] = {prgname,
 			"--file-prefix=" memtest, valid_socket_mem};
 
@@ -1374,34 +1381,49 @@ test_memory_flags(void)
 		printf("Error - process failed with valid -m flag!\n");
 		return -1;
 	}
+
+	populate_socket_mem_param(num_sockets, "0", "",
+		arg2_socket_mem, sizeof(arg2_socket_mem));
 	if (launch_proc(argv2) != 0) {
 		printf("Error - process failed with valid (zero) --socket-mem!\n");
 		return -1;
 	}
 
-	if (launch_proc(argv3) == 0) {
-		printf("Error - process run ok with invalid "
+	if (num_sockets > 1) {
+		populate_socket_mem_param(num_sockets - 1, "2", ",",
+			arg3_socket_mem, sizeof(arg3_socket_mem));
+		if (launch_proc(argv3) == 0) {
+			printf("Error - process run ok with invalid "
 				"(incomplete) --socket-mem!\n");
-		return -1;
-	}
+			return -1;
+		}
 
-	if (launch_proc(argv4) == 0) {
-		printf("Error - process run ok with invalid "
+		populate_socket_mem_param(num_sockets - 1, "2", ",Fred",
+			arg4_socket_mem, sizeof(arg4_socket_mem));
+		if (launch_proc(argv4) == 0) {
+			printf("Error - process run ok with invalid "
 				"(mixed with invalid input) --socket-mem!\n");
-		return -1;
-	}
+			return -1;
+		}
 
-	if (launch_proc(argv5) == 0) {
-		printf("Error - process run ok with invalid "
+		populate_socket_mem_param(num_sockets - 1, "2", ",Fred0",
+			arg5_socket_mem, sizeof(arg5_socket_mem));
+		if (launch_proc(argv5) == 0) {
+			printf("Error - process run ok with invalid "
 				"(mixed with invalid input with a numeric value as "
 				"last character) --socket-mem!\n");
-		return -1;
+			return -1;
+		}
 	}
 
-	if (launch_proc(argv6) == 0) {
-		printf("Error - process run ok with invalid "
+	if (num_sockets > 2) {
+		populate_socket_mem_param(num_sockets - 2, "2", ",,2",
+			arg6_socket_mem, sizeof(arg6_socket_mem));
+		if (launch_proc(argv6) == 0) {
+			printf("Error - process run ok with invalid "
 				"(with empty socket) --socket-mem!\n");
-		return -1;
+			return -1;
+		}
 	}
 
 	if (launch_proc(argv7) == 0) {
@@ -1409,16 +1431,22 @@ test_memory_flags(void)
 		return -1;
 	}
 
+	populate_socket_mem_param(num_sockets, "2", "",
+		arg8_socket_mem, sizeof(arg8_socket_mem));
 	if (launch_proc(argv8) == 0) {
 		printf("Error - process run ok with --socket-mem and -m specified!\n");
 		return -1;
 	}
 
+	populate_socket_mem_param(num_sockets + 1, "2", "",
+		invalid_socket_mem, sizeof(invalid_socket_mem));
 	if (launch_proc(argv9) == 0) {
 		printf("Error - process run ok with extra socket in --socket-mem!\n");
 		return -1;
 	}
 
+	populate_socket_mem_param(num_sockets, "2", "",
+		valid_socket_mem, sizeof(valid_socket_mem));
 	if (launch_proc(argv10) != 0) {
 		printf("Error - process failed with valid --socket-mem!\n");
 		return -1;
-- 
1.8.3.1


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

* Re: [dpdk-dev] [PATCH v4] test: fix --socket-mem option in eal flag autotest
  2019-07-29  8:08 ` [dpdk-dev] [PATCH v4] test: " David Marchand
@ 2019-07-30  9:24   ` Thomas Monjalon
  0 siblings, 0 replies; 14+ messages in thread
From: Thomas Monjalon @ 2019-07-30  9:24 UTC (permalink / raw)
  To: David Marchand, Vamsi Attunuru; +Cc: dev, stable

29/07/2019 10:08, David Marchand:
> From: Vamsi Attunuru <vattunuru@marvell.com>
> 
> eal flag autotest fails when multiple mem size flags are passed to
> --socket-mem option irrespective of RTE_MAX_NUMA_NODES and the number of
> available sockets on the test system.
> 
> Fixes: 45f1b6e8680a ("app: add new tests on eal flags")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> Reviewed-by: Vamsi Attunuru <vattunuru@marvell.com>
> Tested-by: Vamsi Attunuru <vattunuru@marvell.com>

Applied, thanks




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

end of thread, other threads:[~2019-07-30  9:24 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-10  7:25 [dpdk-dev] [PATCH v1 1/1] app/test: fix --socket-mem option in eal flag autotest Vamsi Attunuru
2019-04-10  7:25 ` Vamsi Attunuru
2019-04-10  8:26 ` David Marchand
2019-04-10  8:26   ` David Marchand
2019-04-10 11:43   ` [dpdk-dev] [EXT] " Vamsi Krishna Attunuru
2019-04-10 11:43     ` Vamsi Krishna Attunuru
2019-07-11  5:15 ` [dpdk-dev] [PATCH v2 " vattunuru
2019-07-11 13:56   ` Aaron Conole
2019-07-12  6:43   ` [dpdk-dev] [PATCH v3 " vattunuru
2019-07-23  6:13     ` Vamsi Krishna Attunuru
2019-07-26 13:39     ` David Marchand
2019-07-28  4:19       ` [dpdk-dev] [EXT] " Vamsi Krishna Attunuru
2019-07-29  8:08 ` [dpdk-dev] [PATCH v4] test: " David Marchand
2019-07-30  9:24   ` Thomas Monjalon

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).