From: Euan Bourke <euan.bourke@intel.com>
To: dev@dpdk.org
Cc: Euan Bourke <euan.bourke@intel.com>
Subject: [PATCH 24.03 3/4] eal: add support for new arg parsing library
Date: Wed, 22 Nov 2023 16:45:49 +0000 [thread overview]
Message-ID: <20231122164550.3873633-4-euan.bourke@intel.com> (raw)
In-Reply-To: <20231122164550.3873633-1-euan.bourke@intel.com>
Update to eal functions relating to corelist and coremask parsing to support the
new arg parsing library. Functions now call the API instead of implementing
their own version.
Signed-off-by: Euan Bourke <euan.bourke@intel.com>
---
lib/eal/common/eal_common_options.c | 114 ++++------------------------
lib/eal/meson.build | 2 +-
2 files changed, 14 insertions(+), 102 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index a6d21f1cba..7c89a1e18b 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -30,6 +30,7 @@
#include <rte_tailq.h>
#include <rte_version.h>
#include <rte_devargs.h>
+#include <rte_arg_parser.h>
#include <rte_memcpy.h>
#ifndef RTE_EXEC_ENV_WINDOWS
#include <rte_telemetry.h>
@@ -706,7 +707,7 @@ update_lcore_config(int *cores)
}
static int
-check_core_list(int *lcores, unsigned int count)
+check_core_list(uint16_t *lcores, unsigned int count)
{
char lcorestr[RTE_MAX_LCORE * 10];
bool overflow = false;
@@ -746,60 +747,18 @@ check_core_list(int *lcores, unsigned int count)
int
rte_eal_parse_coremask(const char *coremask, int *cores)
{
- const char *coremask_orig = coremask;
- int lcores[RTE_MAX_LCORE];
- unsigned int count = 0;
- int i, j, idx;
- int val;
- char c;
+ int count;
+ uint16_t lcores[RTE_MAX_LCORE];
+ int idx;
for (idx = 0; idx < RTE_MAX_LCORE; idx++)
cores[idx] = -1;
- idx = 0;
- /* Remove all blank characters ahead and after .
- * Remove 0x/0X if exists.
- */
- while (isblank(*coremask))
- coremask++;
- if (coremask[0] == '0' && ((coremask[1] == 'x')
- || (coremask[1] == 'X')))
- coremask += 2;
- i = strlen(coremask);
- while ((i > 0) && isblank(coremask[i - 1]))
- i--;
- if (i == 0) {
- RTE_LOG(ERR, EAL, "No lcores in coremask: [%s]\n",
- coremask_orig);
- return -1;
- }
+ /* Call public coremask parsing API */
+ count = rte_parse_coremask(coremask, lcores, RTE_MAX_LCORE);
- for (i = i - 1; i >= 0; i--) {
- c = coremask[i];
- if (isxdigit(c) == 0) {
- /* invalid characters */
- RTE_LOG(ERR, EAL, "invalid characters in coremask: [%s]\n",
- coremask_orig);
- return -1;
- }
- val = xdigit2val(c);
- for (j = 0; j < BITS_PER_HEX; j++, idx++)
- {
- if ((1 << j) & val) {
- if (count >= RTE_MAX_LCORE) {
- RTE_LOG(ERR, EAL, "Too many lcores provided. Cannot exceed RTE_MAX_LCORE (%d)\n",
- RTE_MAX_LCORE);
- return -1;
- }
- lcores[count++] = idx;
- }
- }
- }
- if (count == 0) {
- RTE_LOG(ERR, EAL, "No lcores in coremask: [%s]\n",
- coremask_orig);
+ if (count <= 0 || count > RTE_MAX_LCORE)
return -1;
- }
if (check_core_list(lcores, count))
return -1;
@@ -898,64 +857,17 @@ eal_parse_service_corelist(const char *corelist)
static int
eal_parse_corelist(const char *corelist, int *cores)
{
- unsigned int count = 0, i;
- int lcores[RTE_MAX_LCORE];
- char *end = NULL;
- int min, max;
+ int count;
+ uint16_t lcores[RTE_MAX_LCORE];
int idx;
for (idx = 0; idx < RTE_MAX_LCORE; idx++)
cores[idx] = -1;
- /* Remove all blank characters ahead */
- while (isblank(*corelist))
- corelist++;
+ /* Call public corelist parsing API */
+ count = rte_parse_corelist(corelist, lcores, RTE_MAX_LCORE);
- /* Get list of cores */
- min = -1;
- do {
- while (isblank(*corelist))
- corelist++;
- if (*corelist == '\0')
- return -1;
- errno = 0;
- idx = strtol(corelist, &end, 10);
- if (errno || end == NULL)
- return -1;
- if (idx < 0)
- return -1;
- while (isblank(*end))
- end++;
- if (*end == '-') {
- min = idx;
- } else if ((*end == ',') || (*end == '\0')) {
- max = idx;
- if (min == -1)
- min = idx;
- for (idx = min; idx <= max; idx++) {
- bool dup = false;
-
- /* Check if this idx is already present */
- for (i = 0; i < count; i++) {
- if (lcores[i] == idx)
- dup = true;
- }
- if (dup)
- continue;
- if (count >= RTE_MAX_LCORE) {
- RTE_LOG(ERR, EAL, "Too many lcores provided. Cannot exceed RTE_MAX_LCORE (%d)\n",
- RTE_MAX_LCORE);
- return -1;
- }
- lcores[count++] = idx;
- }
- min = -1;
- } else
- return -1;
- corelist = end + 1;
- } while (*end != '\0');
-
- if (count == 0)
+ if (count <= 0 || count > RTE_MAX_LCORE)
return -1;
if (check_core_list(lcores, count))
diff --git a/lib/eal/meson.build b/lib/eal/meson.build
index e1d6c4cf17..52a22e2e66 100644
--- a/lib/eal/meson.build
+++ b/lib/eal/meson.build
@@ -14,7 +14,7 @@ subdir(exec_env)
subdir(arch_subdir)
-deps += ['log', 'kvargs']
+deps += ['log', 'kvargs', 'arg_parser']
if not is_windows
deps += ['telemetry']
endif
--
2.34.1
next prev parent reply other threads:[~2023-11-22 16:48 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-22 16:45 [PATCH 24.03 0/4] add new command line argument parsing library Euan Bourke
2023-11-22 16:45 ` [PATCH 24.03 1/4] arg_parser: new library for command line parsing Euan Bourke
2023-11-23 15:50 ` Bruce Richardson
2023-11-22 16:45 ` [PATCH 24.03 2/4] arg_parser: add new coremask parsing API Euan Bourke
2023-11-23 15:55 ` Bruce Richardson
2023-11-22 16:45 ` Euan Bourke [this message]
2023-11-22 16:45 ` [PATCH 24.03 4/4] dlb2: add new arg parsing library API support Euan Bourke
2023-11-28 14:07 ` [PATCH 24.03 v2 0/5] add new command line argument parsing library Euan Bourke
2023-11-28 14:07 ` [PATCH 24.03 v2 1/5] arg_parser: new library for command line parsing Euan Bourke
2023-11-29 22:12 ` Stephen Hemminger
2023-11-29 22:12 ` Stephen Hemminger
2023-11-29 22:14 ` Stephen Hemminger
2023-11-30 8:59 ` Bruce Richardson
2023-11-28 14:07 ` [PATCH 24.03 v2 2/5] arg_parser: add new coremask parsing API Euan Bourke
2023-11-28 14:07 ` [PATCH 24.03 v2 3/5] eal: add support for new arg parsing library Euan Bourke
2023-11-28 14:07 ` [PATCH 24.03 v2 4/5] eal: update to service core related parsers Euan Bourke
2023-11-28 14:07 ` [PATCH 24.03 v2 5/5] event/dlb2: add new arg parsing library API support Euan Bourke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231122164550.3873633-4-euan.bourke@intel.com \
--to=euan.bourke@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.