From: Bruce Richardson <bruce.richardson@intel.com>
To: dev@dpdk.org
Cc: david.marchand@redhat.com, Bruce Richardson <bruce.richardson@intel.com>
Subject: [PATCH v8 16/18] eal: rework internal coremask parsing to use cpu sets
Date: Thu, 2 Oct 2025 18:43:13 +0100 [thread overview]
Message-ID: <20251002174315.962992-17-bruce.richardson@intel.com> (raw)
In-Reply-To: <20251002174315.962992-1-bruce.richardson@intel.com>
Rather than working off arrays of lcore values, update the coremask
handling to use rte_cpuset_t. The use of the array provides no
additional value for coremasks, since the order of the bits set will
always be from lowest core number to highest, making the tracking of
what core was 0, 1, 2 etc. pointless.
As part of this change, move the prototype for the parse_coremask
function from rte_eal.h to eal_options.h, for two reasons:
1. This is an internal function that should not be used by apps and so
there is no need to have it in a public header.
2. If the compilation command is run without the _GNU_SOURCE flag, we
miss definitions from sched.h and so get build errors for the
rte_cpuset_t type when compiling examples against an installed DPDK.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/event/dlb2/dlb2_priv.h | 2 +-
drivers/event/dlb2/pf/base/dlb2_resource.c | 11 ++++----
lib/eal/common/eal_common_options.c | 30 ++++++++--------------
lib/eal/common/eal_options.h | 2 ++
lib/eal/include/rte_eal.h | 22 ----------------
5 files changed, 19 insertions(+), 48 deletions(-)
diff --git a/drivers/event/dlb2/dlb2_priv.h b/drivers/event/dlb2/dlb2_priv.h
index 6e0a5bc936..607b4d24d0 100644
--- a/drivers/event/dlb2/dlb2_priv.h
+++ b/drivers/event/dlb2/dlb2_priv.h
@@ -750,7 +750,7 @@ void dlb2_event_build_hcws(struct dlb2_port *qm_port,
uint8_t *queue_id);
/* Extern functions */
-extern int rte_eal_parse_coremask(const char *coremask, int *cores, bool limit_range);
+extern int rte_eal_parse_coremask(const char *coremask, rte_cpuset_t *cpuset, bool limit_range);
/* Extern globals */
extern struct process_local_port_data dlb2_port[][DLB2_NUM_PORT_TYPES];
diff --git a/drivers/event/dlb2/pf/base/dlb2_resource.c b/drivers/event/dlb2/pf/base/dlb2_resource.c
index 6742c470f1..490dcaf7dd 100644
--- a/drivers/event/dlb2/pf/base/dlb2_resource.c
+++ b/drivers/event/dlb2/pf/base/dlb2_resource.c
@@ -922,28 +922,29 @@ dlb2_resource_probe(struct dlb2_hw *hw, const void *probe_args)
{
const struct dlb2_devargs *args = (const struct dlb2_devargs *)probe_args;
const char *mask = args ? args->producer_coremask : NULL;
- int cpu = 0, cnt = 0, cores[CPU_SETSIZE], i;
+ rte_cpuset_t cpuset;
+ int cpu = 0, cnt = 0, i, set_count = 0;
if (args) {
mask = (const char *)args->producer_coremask;
}
- if (mask && rte_eal_parse_coremask(mask, cores, true)) {
+ if (mask && rte_eal_parse_coremask(mask, &cpuset, true)) {
DLB2_HW_ERR(hw, ": Invalid producer coremask=%s\n", mask);
return -1;
}
hw->num_prod_cores = 0;
for (i = 0; i < RTE_MAX_LCORE; i++) {
- bool is_pcore = (mask && cores[i] != -1);
+ bool is_pcore = (mask && CPU_ISSET(i, &cpuset));
if (rte_lcore_is_enabled(i)) {
if (is_pcore) {
/*
* Populate the producer cores from parsed
- * coremask
+ * coremask using the set_count as index.
*/
- hw->prod_core_list[cores[i]] = i;
+ hw->prod_core_list[set_count++] = i;
hw->num_prod_cores++;
} else if ((++cnt == DLB2_EAL_PROBE_CORE ||
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index 95081c9f54..86351535ee 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -841,7 +841,7 @@ eal_parse_service_coremask(const char *coremask)
}
static int
-update_lcore_config(int *cores, bool remap, uint16_t remap_base)
+update_lcore_config(const rte_cpuset_t *cpuset, bool remap, uint16_t remap_base)
{
struct rte_config *cfg = rte_eal_get_configuration();
unsigned int count = 0;
@@ -855,9 +855,9 @@ update_lcore_config(int *cores, bool remap, uint16_t remap_base)
lcore_config[i].core_index = -1;
}
- /* now go through the core mask */
+ /* now go through the cpuset */
for (i = 0; i < CPU_SETSIZE; i++) {
- if (cores[i] != -1) {
+ if (CPU_ISSET(i, cpuset)) {
if (eal_cpu_detected(i) == 0) {
EAL_LOG(ERR, "lcore %u unavailable", i);
ret = -1;
@@ -866,7 +866,7 @@ update_lcore_config(int *cores, bool remap, uint16_t remap_base)
if (!remap)
lcore_id = i;
cfg->lcore_role[lcore_id] = ROLE_RTE;
- lcore_config[lcore_id].core_index = cores[i];
+ lcore_config[lcore_id].core_index = count;
CPU_ZERO(&lcore_config[lcore_id].cpuset);
CPU_SET(i, &lcore_config[lcore_id].cpuset);
EAL_LOG(DEBUG, "lcore %u mapped to physical core %u", lcore_id, i);
@@ -919,7 +919,7 @@ check_core_list(int *lcores, unsigned int count)
RTE_EXPORT_INTERNAL_SYMBOL(rte_eal_parse_coremask)
int
-rte_eal_parse_coremask(const char *coremask, int *cores, bool limit_range)
+rte_eal_parse_coremask(const char *coremask, rte_cpuset_t *cpuset, bool limit_range)
{
const char *coremask_orig = coremask;
int lcores[CPU_SETSIZE];
@@ -928,8 +928,7 @@ rte_eal_parse_coremask(const char *coremask, int *cores, bool limit_range)
int val;
char c;
- for (idx = 0; idx < CPU_SETSIZE; idx++)
- cores[idx] = -1;
+ CPU_ZERO(cpuset);
idx = 0;
EAL_LOG(WARNING, "'-c <coremask>' option is deprecated, and will be removed in a future release");
@@ -975,6 +974,7 @@ rte_eal_parse_coremask(const char *coremask, int *cores, bool limit_range)
return -1;
}
lcores[count++] = idx;
+ CPU_SET(idx, cpuset);
}
}
}
@@ -988,16 +988,6 @@ rte_eal_parse_coremask(const char *coremask, int *cores, bool limit_range)
if (limit_range && check_core_list(lcores, count) != 0)
return -1;
- /*
- * Now that we've got a list of cores no longer than RTE_MAX_LCORE,
- * and no lcore in that list is greater than RTE_MAX_LCORE, populate
- * the cores array.
- */
- do {
- count--;
- cores[lcores[count]] = count;
- } while (count != 0);
-
return 0;
}
@@ -1931,13 +1921,13 @@ eal_parse_args(void)
/* parse the core list arguments */
if (args.coremask != NULL) {
- int lcore_indexes[CPU_SETSIZE];
+ rte_cpuset_t cpuset;
- if (rte_eal_parse_coremask(args.coremask, lcore_indexes, !remap_lcores) < 0) {
+ if (rte_eal_parse_coremask(args.coremask, &cpuset, !remap_lcores) < 0) {
EAL_LOG(ERR, "invalid coremask syntax");
return -1;
}
- if (update_lcore_config(lcore_indexes, remap_lcores, lcore_id_base) < 0) {
+ if (update_lcore_config(&cpuset, remap_lcores, lcore_id_base) < 0) {
char *available = available_cores();
EAL_LOG(ERR, "invalid coremask '%s', please check specified cores are part of %s",
diff --git a/lib/eal/common/eal_options.h b/lib/eal/common/eal_options.h
index 4a8a0f1df7..f5e7905609 100644
--- a/lib/eal/common/eal_options.h
+++ b/lib/eal/common/eal_options.h
@@ -20,5 +20,7 @@ int eal_save_args(int argc, char **argv);
void eal_clean_saved_args(void);
int handle_eal_info_request(const char *cmd, const char *params __rte_unused,
struct rte_tel_data *d);
+__rte_internal
+int rte_eal_parse_coremask(const char *coremask, rte_cpuset_t *cpuset, bool limit_range);
#endif /* EAL_OPTIONS_H */
diff --git a/lib/eal/include/rte_eal.h b/lib/eal/include/rte_eal.h
index bc58254ece..619b8fbade 100644
--- a/lib/eal/include/rte_eal.h
+++ b/lib/eal/include/rte_eal.h
@@ -491,28 +491,6 @@ rte_eal_mbuf_user_pool_ops(void);
const char *
rte_eal_get_runtime_dir(void);
-/**
- * Convert a string describing a mask of core ids into an array of core ids.
- *
- * On success, the passed array is filled with the orders of the core ids
- * present in the mask (-1 indicating that a core id is absent).
- * For example, passing a 0xa coremask results in cores[1] = 0, cores[3] = 1,
- * and the rest of the array is set to -1.
- *
- * @param coremask
- * A string describing a mask of core ids.
- * @param cores
- * An array where to store the core ids orders.
- * This array must be at least CPU_SETSIZE large.
- * @param limit_range
- * If set, return an error if any cores in the mask are >= RTE_MAX_LCORE.
- * @return
- * 0 on success, -1 if the string content was invalid.
- */
-__rte_internal
-int
-rte_eal_parse_coremask(const char *coremask, int *cores, bool limit_range);
-
#ifdef __cplusplus
}
#endif
--
2.48.1
next prev parent reply other threads:[~2025-10-02 17:45 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-20 16:40 [RFC PATCH 0/7] rework EAL argument parsing in DPDK Bruce Richardson
2025-05-20 16:40 ` [RFC PATCH 1/7] eal: add long options for each short option Bruce Richardson
2025-05-20 16:40 ` [RFC PATCH 2/7] argparse: add support for string and boolean args Bruce Richardson
2025-05-20 16:40 ` [RFC PATCH 3/7] argparse: make argparse EAL-args compatible Bruce Richardson
2025-05-22 10:44 ` Bruce Richardson
2025-05-20 16:40 ` [RFC PATCH 4/7] eal: define the EAL parameters in argparse format Bruce Richardson
2025-05-20 16:40 ` [RFC PATCH 5/7] eal: gather EAL args before processing Bruce Richardson
2025-05-20 16:40 ` [RFC PATCH 6/7] eal: combine parameter validation checks Bruce Richardson
2025-05-20 16:40 ` [RFC PATCH 7/7] eal: simplify handling of conflicting cmdline options Bruce Richardson
2025-07-08 17:20 ` [RFC PATCH v2 0/5] rework EAL argument parsing in DPDK Bruce Richardson
2025-07-08 17:20 ` [RFC PATCH v2 1/5] eal: add long options for each short option Bruce Richardson
2025-07-08 17:20 ` [RFC PATCH v2 2/5] eal: define the EAL parameters in argparse format Bruce Richardson
2025-07-08 17:20 ` [RFC PATCH v2 3/5] eal: gather EAL args before processing Bruce Richardson
2025-07-08 17:20 ` [RFC PATCH v2 4/5] eal: combine parameter validation checks Bruce Richardson
2025-07-08 17:20 ` [RFC PATCH v2 5/5] eal: simplify handling of conflicting cmdline options Bruce Richardson
2025-07-08 18:41 ` [RFC PATCH v2 0/5] rework EAL argument parsing in DPDK Stephen Hemminger
2025-07-09 7:50 ` Bruce Richardson
2025-07-09 12:30 ` David Marchand
2025-07-09 12:54 ` Bruce Richardson
2025-07-17 10:41 ` David Marchand
2025-07-17 10:54 ` Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 0/9] rework EAL argument parsing Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 1/9] build: add define for the OS environment name Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 2/9] argparse: export function to print help text for object Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 3/9] argparse: allow user-override of help printing Bruce Richardson
2025-07-21 8:43 ` David Marchand
2025-07-21 9:00 ` Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 4/9] eal: add long options for each short option Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 5/9] eal: define the EAL parameters in argparse format Bruce Richardson
2025-07-21 8:41 ` David Marchand
2025-07-21 9:05 ` Bruce Richardson
2025-07-21 12:53 ` Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 6/9] eal: gather EAL args before processing Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 7/9] eal: ensure proper cleanup on EAL init failure Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 8/9] eal: combine parameter validation checks Bruce Richardson
2025-07-18 14:33 ` [PATCH v3 9/9] eal: simplify handling of conflicting cmdline options Bruce Richardson
2025-07-18 14:41 ` [PATCH v3 0/9] rework EAL argument parsing Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 " Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 1/9] build: add define for the OS environment name Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 2/9] argparse: export function to print help text for object Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 3/9] argparse: allow user-override of help printing Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 4/9] eal: add long options for each short option Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 5/9] eal: define the EAL parameters in argparse format Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 6/9] eal: gather EAL args before processing Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 7/9] eal: ensure proper cleanup on EAL init failure Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 8/9] eal: combine parameter validation checks Bruce Richardson
2025-07-21 15:08 ` [PATCH v4 9/9] eal: simplify handling of conflicting cmdline options Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 0/9] rework EAL argument parsing Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 1/9] build: add define for the OS environment name Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 2/9] argparse: export function to print help text for object Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 3/9] argparse: allow user-override of help printing Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 4/9] eal: add long options for each short option Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 5/9] eal: define the EAL parameters in argparse format Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 6/9] eal: gather EAL args before processing Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 7/9] eal: ensure proper cleanup on EAL init failure Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 8/9] eal: combine parameter validation checks Bruce Richardson
2025-07-21 15:16 ` [PATCH v5 9/9] eal: simplify handling of conflicting cmdline options Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 0/9] rework EAL argument parsing Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 1/9] build: add define for the OS environment name Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 2/9] argparse: export function to print help text for object Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 3/9] argparse: allow user-override of help printing Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 4/9] eal: add long options for each short option Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 5/9] eal: define the EAL parameters in argparse format Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 6/9] eal: gather EAL args before processing Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 7/9] eal: ensure proper cleanup on EAL init failure Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 8/9] eal: combine parameter validation checks Bruce Richardson
2025-07-22 14:03 ` [PATCH v6 9/9] eal: simplify handling of conflicting cmdline options Bruce Richardson
2025-09-30 13:06 ` [PATCH v6 0/9] rework EAL argument parsing David Marchand
2025-09-30 13:31 ` Bruce Richardson
2025-07-23 16:19 ` [PATCH v7 00/13] Simplify running with high-numbered CPUs Bruce Richardson
2025-07-23 16:19 ` [PATCH v7 01/13] build: add define for the OS environment name Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 02/13] argparse: export function to print help text for object Bruce Richardson
2025-09-30 12:20 ` David Marchand
2025-07-23 16:20 ` [PATCH v7 03/13] argparse: allow user-override of help printing Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 04/13] argparse: add documentation on supported value types Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 05/13] eal: add long options for each short option Bruce Richardson
2025-09-30 12:21 ` David Marchand
2025-07-23 16:20 ` [PATCH v7 06/13] eal: define the EAL parameters in argparse format Bruce Richardson
2025-09-30 12:21 ` David Marchand
2025-09-30 15:12 ` Bruce Richardson
2025-10-01 8:46 ` David Marchand
2025-10-01 10:15 ` Bruce Richardson
2025-09-30 12:45 ` David Marchand
2025-09-30 12:58 ` Bruce Richardson
2025-09-30 13:16 ` David Marchand
2025-07-23 16:20 ` [PATCH v7 07/13] eal: gather EAL args before processing Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 08/13] eal: ensure proper cleanup on EAL init failure Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 09/13] eal: combine parameter validation checks Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 10/13] eal: simplify handling of conflicting cmdline options Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 11/13] argparse: add support for parsing core lists Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 12/13] eal: simplify running CPUs with ids above max lcores Bruce Richardson
2025-07-23 16:20 ` [PATCH v7 13/13] eal: add warnings about ignored options Bruce Richardson
2025-08-29 14:39 ` [PATCH v7 00/13] Simplify running with high-numbered CPUs Bruce Richardson
2025-10-02 17:42 ` [PATCH v8 00/18] " Bruce Richardson
2025-10-02 17:42 ` [PATCH v8 01/18] build: add define for the OS environment name Bruce Richardson
2025-10-02 17:42 ` [PATCH v8 02/18] argparse: export function to print help text for object Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 03/18] argparse: allow user-override of help printing Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 04/18] argparse: add documentation on supported value types Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 05/18] argparse: add support for parsing core lists Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 06/18] eal: add long options for each short option Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 07/18] eal: define the EAL parameters in argparse format Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 08/18] eal: gather EAL args before processing Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 09/18] eal: ensure proper cleanup on EAL init failure Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 10/18] eal: combine parameter validation checks Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 11/18] eal: simplify handling of conflicting cmdline options Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 12/18] eal: automatically init arg list options Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 13/18] eal: add internal fn for converting cpuset to string Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 14/18] eal: use common cpuset to string function Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 15/18] eal: introduce lcore remapping option for coremasks Bruce Richardson
2025-10-02 17:43 ` Bruce Richardson [this message]
2025-10-02 17:43 ` [PATCH v8 17/18] eal: allow lcore id remapping with core lists Bruce Richardson
2025-10-02 17:43 ` [PATCH v8 18/18] eal: allow lcore remapping with autodetected core affinity Bruce Richardson
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=20251002174315.962992-17-bruce.richardson@intel.com \
--to=bruce.richardson@intel.com \
--cc=david.marchand@redhat.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 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).