[dpdk-dev,v3] eal: add error check for core options

Message ID 20180202145128.6331-1-marko.kovacevic@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Kovacevic, Marko Feb. 2, 2018, 2:51 p.m. UTC
  Error information on current core usage list, mask or map
were incomplete. Added states to differentiate core usage
and to inform user.

Signed-off-by: Marko Kovacevic <marko.kovacevic@intel.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>

---

V3:
 - Changed to reflect the coding guidelines - Bruce
 - update the documentation for better clarity - Bruce
 - Added back the reviewer information - Anatoly

V2:
 - Cleaned up the logging for error cases - Anatoly
---
 doc/guides/testpmd_app_ug/run_app.rst      |  4 ++++
 lib/librte_eal/common/eal_common_options.c | 36 +++++++++++++++++++++++++++---
 2 files changed, 37 insertions(+), 3 deletions(-)
  

Comments

Bruce Richardson Feb. 2, 2018, 3:33 p.m. UTC | #1
On Fri, Feb 02, 2018 at 02:51:28PM +0000, Marko Kovacevic wrote:
> Error information on current core usage list, mask or map
> were incomplete. Added states to differentiate core usage
> and to inform user.
> 
> Signed-off-by: Marko Kovacevic <marko.kovacevic@intel.com>
> Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>

This is fine as-is - one comment below for future consideration.
> 
> ---
> 
> V3:
>  - Changed to reflect the coding guidelines - Bruce
>  - update the documentation for better clarity - Bruce
>  - Added back the reviewer information - Anatoly
> 
> V2:
>  - Cleaned up the logging for error cases - Anatoly
> ---
>  doc/guides/testpmd_app_ug/run_app.rst      |  4 ++++
>  lib/librte_eal/common/eal_common_options.c | 36 +++++++++++++++++++++++++++---
>  2 files changed, 37 insertions(+), 3 deletions(-)
> 
> diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst
> index 46da1df..85e725f 100644
> --- a/doc/guides/testpmd_app_ug/run_app.rst
> +++ b/doc/guides/testpmd_app_ug/run_app.rst
> @@ -62,6 +62,10 @@ See the DPDK Getting Started Guides for more information on these options.
>      The grouping ``()`` can be omitted for single element group.
>      The ``@`` can be omitted if cpus and lcores have the same value.
>  
> +.. Note::
> +    At a given instance only one core option ``--lcores``, ``-l`` or ``-c`` can be used.
> +
> +
>  *   ``--master-lcore ID``
>  
>      Core ID that is used as master.
> diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
> index b6d2762..66f0868 100644
> --- a/lib/librte_eal/common/eal_common_options.c
> +++ b/lib/librte_eal/common/eal_common_options.c
> @@ -57,6 +57,9 @@
>  #include "eal_filesystem.h"
>  
>  #define BITS_PER_HEX 4
> +#define LCORE_OPT_LST 1
> +#define LCORE_OPT_MSK 2
> +#define LCORE_OPT_MAP 3
>  
>  const char
>  eal_short_options[] =
> @@ -1028,7 +1031,16 @@ eal_parse_common_option(int opt, const char *optarg,
>  			RTE_LOG(ERR, EAL, "invalid coremask\n");
>  			return -1;
>  		}
> -		core_parsed = 1;
> +
> +		if (core_parsed) {
> +			RTE_LOG(ERR, EAL, "Option -c is ignored, because (%s) is set!\n",
> +				(core_parsed == LCORE_OPT_LST) ? "-l" :
> +				(core_parsed == LCORE_OPT_MAP) ? "--lcore" :
> +				"-c");

This block is repeated in slightly different forms 3 times. It should
probably be replaced using a function or macro to return the appropriate
string based on core_parsed value.

Thanks,
/Bruce
  
Thomas Monjalon Feb. 5, 2018, 11:11 p.m. UTC | #2
02/02/2018 16:33, Bruce Richardson:
> On Fri, Feb 02, 2018 at 02:51:28PM +0000, Marko Kovacevic wrote:
> > Error information on current core usage list, mask or map
> > were incomplete. Added states to differentiate core usage
> > and to inform user.
> > 
> > Signed-off-by: Marko Kovacevic <marko.kovacevic@intel.com>
> > Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Applied, thanks
  
Billy O'Mahony Feb. 22, 2018, 10:10 a.m. UTC | #3
> > +.. Note::
> > +    At a given instance only one core option ``--lcores``, ``-l`` or ``-c`` can be
> used.
> > +
> > +

Hi Marko,

I always found the n different way to specify cores perplexing. I always suspected they were mutually exclusive but that was far from clear from the docs and it never was important enough to me to try out the various options. Taking the time to add clear documentation makes everyone's work more efficient and less frustrating. 

So thank you and keep up the good work :)

Billy. 

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Bruce Richardson
> Sent: Friday, February 2, 2018 3:33 PM
> To: Kovacevic, Marko <marko.kovacevic@intel.com>
> Cc: dev@dpdk.org; Burakov, Anatoly <anatoly.burakov@intel.com>; Varghese,
> Vipin <vipin.varghese@intel.com>; stable@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v3] eal: add error check for core options
> 
> On Fri, Feb 02, 2018 at 02:51:28PM +0000, Marko Kovacevic wrote:
> > Error information on current core usage list, mask or map were
> > incomplete. Added states to differentiate core usage and to inform
> > user.
> >
> > Signed-off-by: Marko Kovacevic <marko.kovacevic@intel.com>
> > Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> 
> This is fine as-is - one comment below for future consideration.
> >
> > ---
> >
> > V3:
> >  - Changed to reflect the coding guidelines - Bruce
> >  - update the documentation for better clarity - Bruce
> >  - Added back the reviewer information - Anatoly
> >
> > V2:
> >  - Cleaned up the logging for error cases - Anatoly
> > ---
> >  doc/guides/testpmd_app_ug/run_app.rst      |  4 ++++
> >  lib/librte_eal/common/eal_common_options.c | 36
> > +++++++++++++++++++++++++++---
> >  2 files changed, 37 insertions(+), 3 deletions(-)
> >
> > diff --git a/doc/guides/testpmd_app_ug/run_app.rst
> > b/doc/guides/testpmd_app_ug/run_app.rst
> > index 46da1df..85e725f 100644
> > --- a/doc/guides/testpmd_app_ug/run_app.rst
> > +++ b/doc/guides/testpmd_app_ug/run_app.rst
> > @@ -62,6 +62,10 @@ See the DPDK Getting Started Guides for more
> information on these options.
> >      The grouping ``()`` can be omitted for single element group.
> >      The ``@`` can be omitted if cpus and lcores have the same value.
> >
> > +.. Note::
> > +    At a given instance only one core option ``--lcores``, ``-l`` or ``-c`` can be
> used.
> > +
> > +
> >  *   ``--master-lcore ID``
> >
> >      Core ID that is used as master.
> > diff --git a/lib/librte_eal/common/eal_common_options.c
> > b/lib/librte_eal/common/eal_common_options.c
> > index b6d2762..66f0868 100644
> > --- a/lib/librte_eal/common/eal_common_options.c
> > +++ b/lib/librte_eal/common/eal_common_options.c
> > @@ -57,6 +57,9 @@
> >  #include "eal_filesystem.h"
> >
> >  #define BITS_PER_HEX 4
> > +#define LCORE_OPT_LST 1
> > +#define LCORE_OPT_MSK 2
> > +#define LCORE_OPT_MAP 3
> >
> >  const char
> >  eal_short_options[] =
> > @@ -1028,7 +1031,16 @@ eal_parse_common_option(int opt, const char
> *optarg,
> >  			RTE_LOG(ERR, EAL, "invalid coremask\n");
> >  			return -1;
> >  		}
> > -		core_parsed = 1;
> > +
> > +		if (core_parsed) {
> > +			RTE_LOG(ERR, EAL, "Option -c is ignored, because (%s)
> is set!\n",
> > +				(core_parsed == LCORE_OPT_LST) ? "-l" :
> > +				(core_parsed == LCORE_OPT_MAP) ? "--lcore" :
> > +				"-c");
> 
> This block is repeated in slightly different forms 3 times. It should probably be
> replaced using a function or macro to return the appropriate string based on
> core_parsed value.
> 
> Thanks,
> /Bruce
  

Patch

diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst
index 46da1df..85e725f 100644
--- a/doc/guides/testpmd_app_ug/run_app.rst
+++ b/doc/guides/testpmd_app_ug/run_app.rst
@@ -62,6 +62,10 @@  See the DPDK Getting Started Guides for more information on these options.
     The grouping ``()`` can be omitted for single element group.
     The ``@`` can be omitted if cpus and lcores have the same value.
 
+.. Note::
+    At a given instance only one core option ``--lcores``, ``-l`` or ``-c`` can be used.
+
+
 *   ``--master-lcore ID``
 
     Core ID that is used as master.
diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
index b6d2762..66f0868 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -57,6 +57,9 @@ 
 #include "eal_filesystem.h"
 
 #define BITS_PER_HEX 4
+#define LCORE_OPT_LST 1
+#define LCORE_OPT_MSK 2
+#define LCORE_OPT_MAP 3
 
 const char
 eal_short_options[] =
@@ -1028,7 +1031,16 @@  eal_parse_common_option(int opt, const char *optarg,
 			RTE_LOG(ERR, EAL, "invalid coremask\n");
 			return -1;
 		}
-		core_parsed = 1;
+
+		if (core_parsed) {
+			RTE_LOG(ERR, EAL, "Option -c is ignored, because (%s) is set!\n",
+				(core_parsed == LCORE_OPT_LST) ? "-l" :
+				(core_parsed == LCORE_OPT_MAP) ? "--lcore" :
+				"-c");
+			return -1;
+		}
+
+		core_parsed = LCORE_OPT_MSK;
 		break;
 	/* corelist */
 	case 'l':
@@ -1036,7 +1048,16 @@  eal_parse_common_option(int opt, const char *optarg,
 			RTE_LOG(ERR, EAL, "invalid core list\n");
 			return -1;
 		}
-		core_parsed = 1;
+
+		if (core_parsed) {
+			RTE_LOG(ERR, EAL, "Option -l is ignored, because (%s) is set!\n",
+				(core_parsed == LCORE_OPT_MSK) ? "-c" :
+				(core_parsed == LCORE_OPT_MAP) ? "--lcore" :
+				"-l");
+			return -1;
+		}
+
+		core_parsed = LCORE_OPT_LST;
 		break;
 	/* service coremask */
 	case 's':
@@ -1156,7 +1177,16 @@  eal_parse_common_option(int opt, const char *optarg,
 				OPT_LCORES "\n");
 			return -1;
 		}
-		core_parsed = 1;
+
+		if (core_parsed) {
+			RTE_LOG(ERR, EAL, "Option --lcore is ignored, because (%s) is set!\n",
+				(core_parsed == LCORE_OPT_LST) ? "-l" :
+				(core_parsed == LCORE_OPT_MSK) ? "-c" :
+				"--lcore");
+			return -1;
+		}
+
+		core_parsed = LCORE_OPT_MAP;
 		break;
 
 	/* don't know what to do, leave this to caller */