From: Bruce Richardson <bruce.richardson@intel.com>
To: dev@dpdk.org
Cc: Bruce Richardson <bruce.richardson@intel.com>
Subject: [PATCH 31/39] eal: store user-provided lcore info in user config struct
Date: Tue, 21 Jul 2026 10:45:39 +0100 [thread overview]
Message-ID: <20260721094555.2188496-32-bruce.richardson@intel.com> (raw)
In-Reply-To: <20260721094555.2188496-1-bruce.richardson@intel.com>
The user provides details of what lcores are to run on what cpus in a
variety of ways. Map all those to a single array of cpusets in the
user_cfg struct, such that each lcore id has a cpuset of physical lcore
ids if it is to be used. Then post-parse of args, we can use that to
appropriately populate the runtime configuration.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/eal/common/eal_common_options.c | 151 ++++++++++++++++++----------
lib/eal/common/eal_internal_cfg.h | 9 +-
lib/eal/freebsd/eal.c | 1 +
lib/eal/linux/eal.c | 1 +
lib/eal/windows/eal.c | 1 +
5 files changed, 109 insertions(+), 54 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index 31eff2c59d..a0b2243873 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -546,6 +546,10 @@ eal_reset_internal_config(void)
CPU_ZERO(&runtime_state->ctrl_cpuset);
runtime_state->init_complete = 0;
CPU_ZERO(&user_cfg->service_cpuset);
+ for (i = 0; i < RTE_MAX_LCORE; i++) {
+ free(user_cfg->lcore_cpusets[i]);
+ user_cfg->lcore_cpusets[i] = NULL;
+ }
user_cfg->max_simd_bitwidth.bitwidth = RTE_VECT_DEFAULT_SIMD_BITWIDTH;
user_cfg->max_simd_bitwidth.forced = 0;
}
@@ -913,23 +917,20 @@ eal_parse_service_corelist(const char *corelist, rte_cpuset_t *cpuset)
return CPU_COUNT(cpuset) > 0 ? 0 : -1;
}
+/* Expand a flat cpuset into lcore_cpusets[], assigning lcore IDs.
+ * If remap is false: lcore_id == physical CPU id (identity mapping).
+ * If remap is true: lcore IDs are assigned sequentially from remap_base.
+ * Returns the number of lcores configured, or -1 on error.
+ */
static int
-update_lcore_config(const rte_cpuset_t *cpuset, bool remap, uint16_t remap_base)
+eal_expand_cpuset_to_map(const rte_cpuset_t *cpuset, bool remap, uint16_t remap_base,
+ rte_cpuset_t **lcore_cpusets)
{
- struct eal_runtime_state *runtime_state = eal_get_runtime_state();
unsigned int lcore_id = remap_base;
unsigned int count = 0;
unsigned int i;
int ret = 0;
- /* set everything to disabled first, then set up values */
- rte_bitset_clear_all(runtime_state->core_indices, RTE_MAX_LCORE);
- for (i = 0; i < RTE_MAX_LCORE; i++) {
- runtime_state->lcore_cfg[i].role = ROLE_OFF;
- runtime_state->lcore_cfg[i].core_index = -1;
- }
-
- /* now go through the cpuset */
for (i = 0; i < CPU_SETSIZE; i++) {
if (CPU_ISSET(i, cpuset)) {
if (eal_cpu_detected(i) == 0) {
@@ -953,12 +954,17 @@ update_lcore_config(const rte_cpuset_t *cpuset, bool remap, uint16_t remap_base)
continue;
}
- rte_bitset_set(runtime_state->core_indices, count);
- runtime_state->lcore_cfg[lcore_id].role = ROLE_RTE;
- runtime_state->lcore_cfg[lcore_id].core_index = count;
- CPU_ZERO(&runtime_state->lcore_cfg[lcore_id].cpuset);
- CPU_SET(i, &runtime_state->lcore_cfg[lcore_id].cpuset);
- runtime_state->lcore_cfg[lcore_id].first_cpu = i;
+ lcore_cpusets[lcore_id] = malloc(sizeof(rte_cpuset_t));
+ if (lcore_cpusets[lcore_id] == NULL) {
+ EAL_LOG(ERR, "failed to allocate cpuset for lcore %u", lcore_id);
+ for (unsigned int j = 0; j < lcore_id; j++) {
+ free(lcore_cpusets[j]);
+ lcore_cpusets[j] = NULL;
+ }
+ return -1;
+ }
+ CPU_ZERO(lcore_cpusets[lcore_id]);
+ CPU_SET(i, lcore_cpusets[lcore_id]);
EAL_LOG(DEBUG, "lcore %u mapped to physical core %u", lcore_id, i);
lcore_id++;
count++;
@@ -968,9 +974,9 @@ update_lcore_config(const rte_cpuset_t *cpuset, bool remap, uint16_t remap_base)
EAL_LOG(ERR, "No valid lcores in core list");
ret = -1;
}
- if (!ret)
- runtime_state->lcore_count = count;
- return ret;
+ if (ret == -1)
+ return -1;
+ return (int)count;
}
static int
@@ -1092,7 +1098,6 @@ eal_parse_main_lcore(const char *arg)
char *parsing_end;
long main_lcore;
struct eal_user_cfg *user_cfg = eal_get_user_configuration();
- struct eal_runtime_state *runtime_state = eal_get_runtime_state();
errno = 0;
main_lcore = strtol(arg, &parsing_end, 0);
@@ -1106,8 +1111,9 @@ eal_parse_main_lcore(const char *arg)
EAL_LOG(ERR, "Error: Main lcore is used as a service core");
return -1;
}
- /* check that we have the core recorded in the core list */
- if (runtime_state->lcore_cfg[user_cfg->main_lcore].role != ROLE_RTE) {
+
+ /* lcore_cpusets is always populated before eal_parse_main_lcore is called */
+ if (user_cfg->lcore_cpusets[user_cfg->main_lcore] == NULL) {
EAL_LOG(ERR, "Error: Main lcore is not enabled for DPDK");
return -1;
}
@@ -1269,15 +1275,18 @@ check_cpuset(rte_cpuset_t *set)
* lcore 6 runs on cpuset 0x41 (cpu 0,6)
* lcore 7 runs on cpuset 0x80 (cpu 7)
* lcore 8 runs on cpuset 0x100 (cpu 8)
+ *
+ * Writes the physical-CPU affinity for each mentioned lcore_id into
+ * cpusets[lcore_id]. Slots not mentioned are left as NULL.
+ * Returns the number of distinct lcore IDs configured, or -1 on error.
*/
static int
-eal_parse_lcores(const char *lcores)
+eal_parse_lcores_to_map(const char *lcores, rte_cpuset_t **cpusets)
{
- struct eal_runtime_state *runtime_state = eal_get_runtime_state();
rte_cpuset_t lcore_set;
unsigned int set_count;
- unsigned idx = 0;
- unsigned count = 0;
+ unsigned int idx;
+ int count = 0;
const char *lcore_start = NULL;
const char *end = NULL;
int offset;
@@ -1294,15 +1303,6 @@ eal_parse_lcores(const char *lcores)
CPU_ZERO(&cpuset);
- /* Reset lcore config */
- rte_bitset_clear_all(runtime_state->core_indices, RTE_MAX_LCORE);
- for (idx = 0; idx < RTE_MAX_LCORE; idx++) {
- runtime_state->lcore_cfg[idx].role = ROLE_OFF;
- runtime_state->lcore_cfg[idx].core_index = -1;
- CPU_ZERO(&runtime_state->lcore_cfg[idx].cpuset);
- runtime_state->lcore_cfg[idx].first_cpu = UINT16_MAX;
- }
-
/* Get list of cores */
do {
while (isblank(*lcores))
@@ -1351,7 +1351,7 @@ eal_parse_lcores(const char *lcores)
/* without '@', by default using lcore_set as cpuset */
if (*lcores != '@')
- rte_memcpy(&cpuset, &lcore_set, sizeof(cpuset));
+ memcpy(&cpuset, &lcore_set, sizeof(cpuset));
set_count = CPU_COUNT(&lcore_set);
/* start to update lcore_set */
@@ -1360,13 +1360,6 @@ eal_parse_lcores(const char *lcores)
continue;
set_count--;
- if (runtime_state->lcore_cfg[idx].role != ROLE_RTE) {
- rte_bitset_set(runtime_state->core_indices, count);
- runtime_state->lcore_cfg[idx].core_index = count;
- runtime_state->lcore_cfg[idx].role = ROLE_RTE;
- count++;
- }
-
if (lflags) {
CPU_ZERO(&cpuset);
CPU_SET(idx, &cpuset);
@@ -1374,10 +1367,16 @@ eal_parse_lcores(const char *lcores)
if (check_cpuset(&cpuset) < 0)
goto err;
- rte_memcpy(&runtime_state->lcore_cfg[idx].cpuset, &cpuset,
- sizeof(rte_cpuset_t));
- runtime_state->lcore_cfg[idx].first_cpu =
- (uint16_t)(RTE_CPU_FFS(&cpuset) - 1);
+ if (cpusets[idx] == NULL) {
+ cpusets[idx] = malloc(sizeof(rte_cpuset_t));
+ if (cpusets[idx] == NULL) {
+ EAL_LOG(ERR, "failed to allocate cpuset for lcore %u", idx);
+ ret = -1;
+ goto err;
+ }
+ count++;
+ }
+ memcpy(cpusets[idx], &cpuset, sizeof(rte_cpuset_t));
}
/* some cores from the lcore_set can't be handled by EAL */
@@ -1390,11 +1389,14 @@ eal_parse_lcores(const char *lcores)
if (count == 0)
goto err;
- runtime_state->lcore_count = count;
- ret = 0;
-
+ ret = count;
err:
-
+ if (ret == -1) {
+ for (unsigned int j = 0; j < RTE_MAX_LCORE; j++) {
+ free(cpusets[j]);
+ cpusets[j] = NULL;
+ }
+ }
return ret;
}
@@ -2036,7 +2038,7 @@ eal_parse_args(void)
/* First handle the special case where we have explicit core mapping/remapping */
if (manual_lcore_mapping) {
- if (eal_parse_lcores(args.lcores) < 0) {
+ if (eal_parse_lcores_to_map(args.lcores, user_cfg->lcore_cpusets) < 0) {
EAL_LOG(ERR, "invalid lcore mapping list: '%s'", args.lcores);
return -1;
}
@@ -2074,7 +2076,8 @@ eal_parse_args(void)
EAL_LOG(DEBUG, "Cores selected by %s: %s", cpuset_source, cpuset_str);
free(cpuset_str);
}
- if (update_lcore_config(&cpuset, remap_lcores, lcore_id_base) < 0) {
+ if (eal_expand_cpuset_to_map(&cpuset, remap_lcores, lcore_id_base,
+ user_cfg->lcore_cpusets) < 0) {
char *available = available_cores();
EAL_LOG(ERR, "invalid coremask or core-list parameter, please check specified cores are part of %s",
@@ -2414,7 +2417,46 @@ eal_cleanup_config(void)
free(user_cfg->hugefile_prefix);
free(user_cfg->hugepage_dir);
free(user_cfg->user_mbuf_pool_ops_name);
+ for (unsigned int i = 0; i < RTE_MAX_LCORE; i++) {
+ free(user_cfg->lcore_cpusets[i]);
+ user_cfg->lcore_cpusets[i] = NULL;
+ }
+
+ return 0;
+}
+
+static int
+eal_apply_lcore_config(void)
+{
+ struct eal_user_cfg *user_cfg = eal_get_user_configuration();
+
+ /* lcore_cpusets[] is always populated at parse time for all input forms */
+ struct eal_runtime_state *runtime_state = eal_get_runtime_state();
+ unsigned int i;
+ unsigned int count = 0;
+ rte_bitset_clear_all(runtime_state->core_indices, RTE_MAX_LCORE);
+ for (i = 0; i < RTE_MAX_LCORE; i++) {
+ if (user_cfg->lcore_cpusets[i] == NULL) {
+ runtime_state->lcore_cfg[i].role = ROLE_OFF;
+ runtime_state->lcore_cfg[i].core_index = -1;
+ CPU_ZERO(&runtime_state->lcore_cfg[i].cpuset);
+ runtime_state->lcore_cfg[i].first_cpu = UINT16_MAX;
+ continue;
+ }
+ rte_bitset_set(runtime_state->core_indices, count);
+ runtime_state->lcore_cfg[i].role = ROLE_RTE;
+ runtime_state->lcore_cfg[i].core_index = count++;
+ memcpy(&runtime_state->lcore_cfg[i].cpuset,
+ user_cfg->lcore_cpusets[i], sizeof(rte_cpuset_t));
+ runtime_state->lcore_cfg[i].first_cpu =
+ (uint16_t)(RTE_CPU_FFS(&runtime_state->lcore_cfg[i].cpuset) - 1);
+ }
+ if (count == 0) {
+ EAL_LOG(ERR, "No valid lcores in core list");
+ return -1;
+ }
+ runtime_state->lcore_count = count;
return 0;
}
@@ -2424,6 +2466,9 @@ eal_apply_runtime_state(void)
struct eal_user_cfg *user_cfg = eal_get_user_configuration();
struct eal_runtime_state *runtime_state = eal_get_runtime_state();
+ if (eal_apply_lcore_config() < 0)
+ return -1;
+
/* Apply service core roles: service_cpuset bits are lcore IDs */
if (CPU_COUNT(&user_cfg->service_cpuset) > 0) {
unsigned int i;
diff --git a/lib/eal/common/eal_internal_cfg.h b/lib/eal/common/eal_internal_cfg.h
index 26a0350660..3bdeeaea10 100644
--- a/lib/eal/common/eal_internal_cfg.h
+++ b/lib/eal/common/eal_internal_cfg.h
@@ -138,7 +138,14 @@ struct eal_user_cfg {
} pagesz_mem_overrides[MAX_HUGEPAGE_SIZES];
unsigned int num_pagesz_mem_overrides; /**< number of stored overrides */
rte_cpuset_t service_cpuset; /**< each bit set is one lcore ID to use as service core */
- int main_lcore; /**< ID of the main lcore */
+
+ /** Per-lcore cpuset array, always populated at arg-parse time for all input forms
+ * (-c coremask, -l corelist, --lcores with or without '@'/'()').
+ * Each non-NULL slot is an individually heap-allocated rte_cpuset_t.
+ * NULL means the corresponding lcore ID is not configured.
+ */
+ rte_cpuset_t *lcore_cpusets[RTE_MAX_LCORE];
+ int main_lcore; /**< ID of the main lcore */
};
/**
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index 9a976e2333..51604474cc 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -750,6 +750,7 @@ rte_eal_init(int argc, char **argv)
return fctret;
err_out:
rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
+ eal_cleanup_config();
eal_clean_saved_args();
return -1;
}
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index c1869dde2d..ff75f6d430 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -925,6 +925,7 @@ rte_eal_init(int argc, char **argv)
err_out:
rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
+ eal_cleanup_config();
eal_clean_saved_args();
return -1;
}
diff --git a/lib/eal/windows/eal.c b/lib/eal/windows/eal.c
index 734ad02c6a..d4c49f1560 100644
--- a/lib/eal/windows/eal.c
+++ b/lib/eal/windows/eal.c
@@ -414,6 +414,7 @@ rte_eal_init(int argc, char **argv)
return fctret;
err_out:
+ eal_cleanup_config();
eal_clean_saved_args();
return -1;
}
--
2.53.0
next prev parent reply other threads:[~2026-07-21 9:49 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-29 16:57 [RFC PATCH 00/44] Allow intitializing EAL without argc/argv Bruce Richardson
2026-04-29 16:57 ` [RFC PATCH 01/44] eal: define new functionally distinct config structs Bruce Richardson
2026-04-29 19:03 ` Stephen Hemminger
2026-04-30 7:56 ` Bruce Richardson
2026-04-29 16:57 ` [RFC PATCH 02/44] eal: move memory request fields to user config Bruce Richardson
2026-04-29 16:57 ` [RFC PATCH 03/44] eal: move NUMA " Bruce Richardson
2026-04-29 16:57 ` [RFC PATCH 04/44] eal: move hugepage policy " Bruce Richardson
2026-04-29 16:57 ` [RFC PATCH 05/44] eal: move process " Bruce Richardson
2026-04-29 16:57 ` [RFC PATCH 06/44] eal: move advanced user config options to user cfg struct Bruce Richardson
2026-04-29 16:57 ` [RFC PATCH 07/44] eal: move hugepage size info to platform info struct Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 08/44] telemetry: make cpuset init parameter const Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 09/44] eal: move runtime state to appropriate structure Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 10/44] eal: record details of all cpus in platform info Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 11/44] eal: use platform info for lcore lookups Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 12/44] eal: add RTE_CPU_FFS macro Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 13/44] eal: store lcore configuration in runtime data Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 14/44] eal: cleanup CPU init function Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 15/44] eal: move numa node information to platform info struct Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 16/44] eal: move lcore role and count to runtime state Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 17/44] eal: make lcore role a field in lcore config struct Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 18/44] eal: move main lcore setting to runtime " Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 19/44] eal: move iova mode and process type to runtime cfg Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 20/44] eal: move memory config pointer to runtime state struct Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 21/44] eal: remove rte_config structure Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 22/44] eal: separate runtime state update from arg parsing Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 23/44] eal: move devopt_list staging list into user_cfg Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 24/44] eal: separate plugin paths from loaded plugin objects Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 25/44] eal: simplify internal driver path iteration APIs Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 26/44] eal: move trace config into user config struct Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 27/44] eal: record service cores in " Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 28/44] eal: store user-provided lcore info " Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 29/44] eal: clarify docs on params taking lcore IDs Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 30/44] eal: remove internal config reset function Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 31/44] eal: move functions setting runtime state Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 32/44] eal: initialize platform info on first use Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 33/44] eal: remove duplicated scan of sysfs for hugepage details Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 34/44] eal: add utilities for working with user config struct Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 35/44] eal: split EAL init into two stages Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 36/44] eal: provide hooks for init with externally supplied config Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 37/44] eal_cfg: add new library to programmatically init DPDK Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 38/44] eal_cfg: configure defaults for easier testing and use Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 39/44] app/test: enable testing init using EAL config lib Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 40/44] eal_cfg: add basic setters and getters Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 41/44] eal_cfg: add hugepage memory configuration Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 42/44] eal_cfg: support configuring lcores Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 43/44] eal_cfg: support device and driver lists Bruce Richardson
2026-04-29 16:58 ` [RFC PATCH 44/44] eal_cfg: add APIs for configuring remaining init settings Bruce Richardson
2026-04-29 21:40 ` [RFC PATCH 00/44] Allow intitializing EAL without argc/argv Stephen Hemminger
2026-04-29 22:04 ` Stephen Hemminger
2026-04-30 8:00 ` Bruce Richardson
2026-07-21 9:45 ` [PATCH 00/39] Rework EAL configuration Bruce Richardson
2026-07-21 9:45 ` [PATCH 01/39] telemetry: make cpuset init parameter const Bruce Richardson
2026-07-21 9:45 ` [PATCH 02/39] argparse: check for range overflow in CPU lists Bruce Richardson
2026-07-21 9:45 ` [PATCH 03/39] eal: define new functionally distinct config structs Bruce Richardson
2026-07-21 9:45 ` [PATCH 04/39] eal: move memory request fields to user config Bruce Richardson
2026-07-21 9:45 ` [PATCH 05/39] eal: move NUMA " Bruce Richardson
2026-07-21 9:45 ` [PATCH 06/39] eal: move hugepage policy " Bruce Richardson
2026-07-21 9:45 ` [PATCH 07/39] eal: move process " Bruce Richardson
2026-07-21 9:45 ` [PATCH 08/39] eal: move hugepage limit fields to new config structs Bruce Richardson
2026-07-21 9:45 ` [PATCH 09/39] eal: move advanced user config options to user cfg struct Bruce Richardson
2026-07-21 9:45 ` [PATCH 10/39] eal: move hugepage size info to platform info struct Bruce Richardson
2026-07-21 9:45 ` [PATCH 11/39] eal: move runtime state to appropriate structure Bruce Richardson
2026-07-21 9:45 ` [PATCH 12/39] eal: record details of all cpus in platform info Bruce Richardson
2026-07-21 9:45 ` [PATCH 13/39] eal: use platform info for lcore lookups Bruce Richardson
2026-07-21 9:45 ` [PATCH 14/39] eal: add macro for lowest set CPU bit in a set Bruce Richardson
2026-07-21 9:45 ` [PATCH 15/39] eal: store lcore configuration in runtime data Bruce Richardson
2026-07-21 9:45 ` [PATCH 16/39] eal: move core indices bitset to runtime state Bruce Richardson
2026-07-21 9:45 ` [PATCH 17/39] eal: cleanup CPU init function Bruce Richardson
2026-07-21 9:45 ` [PATCH 18/39] eal: move NUMA node information to platform info struct Bruce Richardson
2026-07-21 9:45 ` [PATCH 19/39] eal: move lcore role and count to runtime state Bruce Richardson
2026-07-21 9:45 ` [PATCH 20/39] eal: make lcore role a field in lcore config struct Bruce Richardson
2026-07-21 9:45 ` [PATCH 21/39] eal: move main lcore setting to runtime " Bruce Richardson
2026-07-21 9:45 ` [PATCH 22/39] eal: move IOVA mode and process type to runtime cfg Bruce Richardson
2026-07-21 9:45 ` [PATCH 23/39] eal: move memory config pointer to runtime state struct Bruce Richardson
2026-07-21 9:45 ` [PATCH 24/39] eal: remove rte_config structure Bruce Richardson
2026-07-21 9:45 ` [PATCH 25/39] eal: separate runtime state update from arg parsing Bruce Richardson
2026-07-21 9:45 ` [PATCH 26/39] eal: move device options staging list into user cfg Bruce Richardson
2026-07-21 9:45 ` [PATCH 27/39] eal: separate plugin paths from loaded plugin objects Bruce Richardson
2026-07-21 9:45 ` [PATCH 28/39] eal: simplify internal driver path iteration APIs Bruce Richardson
2026-07-21 9:45 ` [PATCH 29/39] eal: move trace config into user config struct Bruce Richardson
2026-07-21 9:45 ` [PATCH 30/39] eal: record service cores in " Bruce Richardson
2026-07-21 9:45 ` Bruce Richardson [this message]
2026-07-21 9:45 ` [PATCH 32/39] eal: clarify docs on params taking lcore IDs Bruce Richardson
2026-07-21 9:45 ` [PATCH 33/39] eal: remove internal config reset function Bruce Richardson
2026-07-21 9:45 ` [PATCH 34/39] eal: move functions setting runtime state Bruce Richardson
2026-07-21 9:45 ` [PATCH 35/39] eal: initialize platform info on first use Bruce Richardson
2026-07-21 9:45 ` [PATCH 36/39] eal: remove duplicated scan of sysfs for hugepage details Bruce Richardson
2026-07-21 9:45 ` [PATCH 37/39] eal: add utilities for working with user config struct Bruce Richardson
2026-07-21 9:45 ` [PATCH 38/39] eal: split EAL init into two stages Bruce Richardson
2026-07-21 9:45 ` [PATCH 39/39] eal: provide hooks for init with externally supplied config 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=20260721094555.2188496-32-bruce.richardson@intel.com \
--to=bruce.richardson@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox