From: Bruce Richardson <bruce.richardson@intel.com>
To: dev@dpdk.org
Cc: Bruce Richardson <bruce.richardson@intel.com>
Subject: [PATCH 38/39] eal: split EAL init into two stages
Date: Tue, 21 Jul 2026 10:45:46 +0100 [thread overview]
Message-ID: <20260721094555.2188496-39-bruce.richardson@intel.com> (raw)
In-Reply-To: <20260721094555.2188496-1-bruce.richardson@intel.com>
Split the rte_eal_init function into two parts, where the first part is
handling the argument parsing and then calling the second part which
does the actual subsystem initialization.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/eal/common/eal_common_options.c | 69 +++++++++--------------------
lib/eal/common/eal_options.h | 2 +-
lib/eal/freebsd/eal.c | 56 +++++++++++++++++------
lib/eal/linux/eal.c | 54 +++++++++++++++++-----
lib/eal/windows/eal.c | 55 +++++++++++++++++------
5 files changed, 149 insertions(+), 87 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index 39dbc67f1f..ab70edd36c 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -426,9 +426,8 @@ eal_clean_saved_args(void)
#endif /* !RTE_EXEC_ENV_WINDOWS */
static int
-eal_option_device_add(enum rte_devtype type, const char *arg)
+eal_option_device_add(struct eal_user_cfg *user_cfg, enum rte_devtype type, const char *arg)
{
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
struct device_option *devopt;
size_t arglen;
int ret;
@@ -483,9 +482,8 @@ eal_get_hugefile_prefix(void)
}
static int
-eal_plugin_path_add(const char *path)
+eal_plugin_path_add(struct eal_user_cfg *user_cfg, const char *path)
{
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
struct eal_plugin_path *p;
p = malloc(sizeof(*p));
@@ -1021,11 +1019,10 @@ rte_eal_parse_coremask(const char *coremask, rte_cpuset_t *cpuset, bool limit_ra
/* Changes the lcore id of the main thread */
static int
-eal_parse_main_lcore(const char *arg)
+eal_parse_main_lcore(struct eal_user_cfg *user_cfg, const char *arg)
{
char *parsing_end;
long main_lcore;
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
errno = 0;
main_lcore = strtol(arg, &parsing_end, 0);
@@ -1459,10 +1456,9 @@ eal_parse_proc_type(const char *arg)
}
static int
-eal_parse_iova_mode(const char *name)
+eal_parse_iova_mode(struct eal_user_cfg *user_cfg, const char *name)
{
int mode;
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
if (name == NULL)
return -1;
@@ -1506,11 +1502,10 @@ eal_parse_simd_bitwidth(const char *arg)
}
static int
-eal_parse_base_virtaddr(const char *arg)
+eal_parse_base_virtaddr(struct eal_user_cfg *user_cfg, const char *arg)
{
char *end;
uint64_t addr;
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
errno = 0;
addr = strtoull(arg, &end, 16);
@@ -1823,9 +1818,8 @@ eal_parse_pagesz_mem(char *strval, struct eal_user_cfg *user_cfg)
}
static int
-eal_parse_vfio_intr(const char *mode)
+eal_parse_vfio_intr(struct eal_user_cfg *user_cfg, const char *mode)
{
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
static struct {
const char *name;
enum rte_intr_mode value;
@@ -1845,9 +1839,8 @@ eal_parse_vfio_intr(const char *mode)
}
static int
-eal_parse_vfio_vf_token(const char *vf_token)
+eal_parse_vfio_vf_token(struct eal_user_cfg *user_cfg, const char *vf_token)
{
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
rte_uuid_t uuid;
if (!rte_uuid_parse(vf_token, uuid)) {
@@ -1859,13 +1852,13 @@ eal_parse_vfio_vf_token(const char *vf_token)
}
static int
-eal_parse_huge_worker_stack(const char *arg)
+eal_parse_huge_worker_stack(struct eal_user_cfg *user_cfg, const char *arg)
{
#ifdef RTE_EXEC_ENV_WINDOWS
EAL_LOG(WARNING, "Cannot set worker stack size on Windows, parameter ignored");
+ RTE_SET_USED(user_cfg);
RTE_SET_USED(arg);
#else
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
if (arg == NULL || arg[0] == '\0') {
pthread_attr_t attr;
@@ -1902,10 +1895,8 @@ eal_parse_huge_worker_stack(const char *arg)
/* Parse the arguments given in the command line of the application */
int
-eal_parse_args(void)
+eal_parse_args(struct eal_user_cfg *user_cfg)
{
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
-
/*
* Initialise user_cfg to defaults. Fields not listed here are zero,
* false or NULL, which is the correct default (RTE_PROC_PRIMARY,
@@ -1939,17 +1930,17 @@ eal_parse_args(void)
/* device -a/-b/-vdev options*/
TAILQ_FOREACH(arg, &args.allow, next)
- if (eal_option_device_add(RTE_DEVTYPE_ALLOWED, arg->arg) < 0)
+ if (eal_option_device_add(user_cfg, RTE_DEVTYPE_ALLOWED, arg->arg) < 0)
return -1;
TAILQ_FOREACH(arg, &args.block, next)
- if (eal_option_device_add(RTE_DEVTYPE_BLOCKED, arg->arg) < 0)
+ if (eal_option_device_add(user_cfg, RTE_DEVTYPE_BLOCKED, arg->arg) < 0)
return -1;
TAILQ_FOREACH(arg, &args.vdev, next)
- if (eal_option_device_add(RTE_DEVTYPE_VIRTUAL, arg->arg) < 0)
+ if (eal_option_device_add(user_cfg, RTE_DEVTYPE_VIRTUAL, arg->arg) < 0)
return -1;
/* driver loading options */
TAILQ_FOREACH(arg, &args.driver_path, next)
- if (eal_plugin_path_add(arg->arg) < 0)
+ if (eal_plugin_path_add(user_cfg, arg->arg) < 0)
return -1;
if (remap_lcores && args.remap_lcore_ids != (void *)1) {
@@ -2039,7 +2030,7 @@ eal_parse_args(void)
return -1;
}
}
- if (args.main_lcore != NULL && eal_parse_main_lcore(args.main_lcore) < 0)
+ if (args.main_lcore != NULL && eal_parse_main_lcore(user_cfg, args.main_lcore) < 0)
return -1;
/* memory options */
@@ -2242,13 +2233,13 @@ eal_parse_args(void)
/* other misc settings */
if (args.iova_mode != NULL) {
- if (eal_parse_iova_mode(args.iova_mode) < 0) {
+ if (eal_parse_iova_mode(user_cfg, args.iova_mode) < 0) {
EAL_LOG(ERR, "invalid iova mode parameter '%s'", args.iova_mode);
return -1;
}
};
if (args.base_virtaddr != NULL) {
- if (eal_parse_base_virtaddr(args.base_virtaddr) < 0) {
+ if (eal_parse_base_virtaddr(user_cfg, args.base_virtaddr) < 0) {
EAL_LOG(ERR, "invalid base virtaddr '%s'", args.base_virtaddr);
return -1;
}
@@ -2261,13 +2252,13 @@ eal_parse_args(void)
}
}
if (args.vfio_intr != NULL) {
- if (eal_parse_vfio_intr(args.vfio_intr) < 0) {
+ if (eal_parse_vfio_intr(user_cfg, args.vfio_intr) < 0) {
EAL_LOG(ERR, "invalid vfio interrupt parameter: '%s'", args.vfio_intr);
return -1;
}
}
if (args.vfio_vf_token != NULL) {
- if (eal_parse_vfio_vf_token(args.vfio_vf_token) < 0) {
+ if (eal_parse_vfio_vf_token(user_cfg, args.vfio_vf_token) < 0) {
EAL_LOG(ERR, "invalid vfio vf token parameter: '%s'", args.vfio_vf_token);
return -1;
}
@@ -2276,7 +2267,7 @@ eal_parse_args(void)
if (args.huge_worker_stack != NULL) {
if (args.huge_worker_stack == (void *)1)
args.huge_worker_stack = NULL;
- if (eal_parse_huge_worker_stack(args.huge_worker_stack) < 0) {
+ if (eal_parse_huge_worker_stack(user_cfg, args.huge_worker_stack) < 0) {
EAL_LOG(ERR, "invalid huge worker stack parameter");
return -1;
}
@@ -2304,25 +2295,7 @@ eal_parse_args(void)
int
eal_cleanup_config(void)
{
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
- struct eal_trace_arg *ta;
-
- /* free trace patterns list */
- while (!STAILQ_EMPTY(&user_cfg->trace_patterns)) {
- ta = STAILQ_FIRST(&user_cfg->trace_patterns);
- STAILQ_REMOVE_HEAD(&user_cfg->trace_patterns, next);
- free(ta->val);
- free(ta);
- }
- free(user_cfg->trace_dir);
- 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;
- }
-
+ eal_user_cfg_cleanup(eal_get_user_configuration());
return 0;
}
diff --git a/lib/eal/common/eal_options.h b/lib/eal/common/eal_options.h
index 77a6a4405f..afa8449ee7 100644
--- a/lib/eal/common/eal_options.h
+++ b/lib/eal/common/eal_options.h
@@ -11,7 +11,7 @@ struct rte_tel_data;
struct eal_user_cfg;
int eal_parse_log_options(void);
-int eal_parse_args(void);
+int eal_parse_args(struct eal_user_cfg *user_cfg);
int eal_option_device_parse(void);
int eal_cleanup_config(void);
int eal_plugins_init(void);
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index b3bbc5565c..307b01f840 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -389,20 +389,16 @@ static void rte_eal_init_alert(const char *msg)
EAL_LOG(ALERT, "%s", msg);
}
+static int eal_runtime_init(const struct eal_user_cfg *user_provided_cfg);
+
/* Launch threads, called at application init(). */
RTE_EXPORT_SYMBOL(rte_eal_init)
int
rte_eal_init(int argc, char **argv)
{
- int i, fctret, ret;
static uint32_t run_once;
+ struct eal_user_cfg user_cfg_from_args = EAL_USER_CFG_INITIALIZER(user_cfg_from_args);
uint32_t has_run = 0;
- char cpuset[RTE_CPU_AFFINITY_STR_LEN];
- char thread_name[RTE_THREAD_NAME_SIZE];
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
- struct eal_runtime_state *runtime_state = eal_get_runtime_state();
- bool has_phys_addr;
- enum rte_iova_mode iova_mode;
/*
* platform_info is lazily initialized on first use, and that
@@ -427,7 +423,7 @@ rte_eal_init(int argc, char **argv)
/* Save and collate args at the top */
eal_save_args(argc, argv);
- fctret = eal_collate_args(argc, argv);
+ int fctret = eal_collate_args(argc, argv);
if (fctret < 0) {
rte_eal_init_alert("invalid command-line arguments.");
rte_errno = EINVAL;
@@ -443,6 +439,39 @@ rte_eal_init(int argc, char **argv)
eal_log_init(getprogname());
+ if (eal_parse_args(&user_cfg_from_args) < 0) {
+ rte_eal_init_alert("Error parsing command-line arguments.");
+ rte_errno = EINVAL;
+ goto err_out;
+ }
+
+ if (eal_runtime_init(&user_cfg_from_args) < 0)
+ goto err_out; /* log message and rte_errno set by eal_runtime_init() */
+
+ eal_user_cfg_cleanup(&user_cfg_from_args);
+ return fctret;
+
+err_out:
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
+ eal_clean_saved_args();
+ eal_user_cfg_cleanup(&user_cfg_from_args);
+ return -1;
+}
+
+/**
+ * take a provided user config, copy it to the internal user config structure
+ * and then use it to initialize the DPDK runtime.
+ */
+static int
+eal_runtime_init(const struct eal_user_cfg *user_provided_cfg)
+{
+ struct eal_runtime_state *runtime_state = eal_get_runtime_state();
+ char cpuset[RTE_CPU_AFFINITY_STR_LEN];
+ char thread_name[RTE_THREAD_NAME_SIZE];
+ bool has_phys_addr;
+ enum rte_iova_mode iova_mode;
+ int i, ret;
+
/* checks if the machine is adequate */
if (!rte_cpu_is_supported()) {
rte_eal_init_alert("unsupported cpu type.");
@@ -457,8 +486,10 @@ rte_eal_init(int argc, char **argv)
goto err_out;
}
- if (eal_parse_args() < 0) {
- rte_eal_init_alert("Error parsing command-line arguments.");
+ /* Copy user-provided configuration to EAL global configuration */
+ struct eal_user_cfg *user_cfg = eal_get_user_configuration();
+ if (eal_user_cfg_copy(user_cfg, user_provided_cfg) < 0) {
+ rte_eal_init_alert("Cannot copy user configuration.");
rte_errno = EINVAL;
goto err_out;
}
@@ -758,11 +789,10 @@ rte_eal_init(int argc, char **argv)
eal_mcfg_complete();
- return fctret;
+ return 0;
+
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 c5b3b73c4a..920b8cb71a 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -552,19 +552,16 @@ eal_worker_thread_create(unsigned int lcore_id)
return ret;
}
+static int eal_runtime_init(const struct eal_user_cfg *user_provided_cfg);
+
/* Launch threads, called at application init(). */
RTE_EXPORT_SYMBOL(rte_eal_init)
int
rte_eal_init(int argc, char **argv)
{
- int i, fctret, ret;
static RTE_ATOMIC(uint32_t) run_once;
+ struct eal_user_cfg user_cfg_from_args = EAL_USER_CFG_INITIALIZER(user_cfg_from_args);
uint32_t has_run = 0;
- char cpuset[RTE_CPU_AFFINITY_STR_LEN];
- char thread_name[RTE_THREAD_NAME_SIZE];
- bool phys_addrs;
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
- struct eal_runtime_state *runtime_state = eal_get_runtime_state();
/*
* platform_info is lazily initialized on first use, and that
@@ -589,7 +586,7 @@ rte_eal_init(int argc, char **argv)
/* clone argv to report out later in telemetry */
eal_save_args(argc, argv);
- fctret = eal_collate_args(argc, argv);
+ int fctret = eal_collate_args(argc, argv);
if (fctret < 0) {
rte_eal_init_alert("Invalid command line arguments.");
rte_errno = EINVAL;
@@ -605,6 +602,39 @@ rte_eal_init(int argc, char **argv)
eal_log_init(program_invocation_short_name);
+ if (eal_parse_args(&user_cfg_from_args) < 0) {
+ rte_eal_init_alert("Error parsing command line arguments.");
+ rte_errno = EINVAL;
+ goto err_out;
+ }
+
+ if (eal_runtime_init(&user_cfg_from_args) < 0)
+ goto err_out; /* log message and rte_errno set by eal_runtime_init() */
+
+ eal_user_cfg_cleanup(&user_cfg_from_args);
+ return fctret;
+
+err_out:
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
+ eal_clean_saved_args();
+ eal_user_cfg_cleanup(&user_cfg_from_args);
+
+ return -1;
+}
+
+/**
+ * take a provided user config, copy it to the internal user config structure
+ * and then use it to initialize the DPDK runtime.
+ */
+static int
+eal_runtime_init(const struct eal_user_cfg *user_provided_cfg)
+{
+ struct eal_runtime_state *runtime_state = eal_get_runtime_state();
+ char cpuset[RTE_CPU_AFFINITY_STR_LEN];
+ char thread_name[RTE_THREAD_NAME_SIZE];
+ bool phys_addrs;
+ int i, ret;
+
/* checks if the machine is adequate */
if (!rte_cpu_is_supported()) {
rte_eal_init_alert("unsupported cpu type.");
@@ -619,8 +649,10 @@ rte_eal_init(int argc, char **argv)
goto err_out;
}
- if (eal_parse_args() < 0) {
- rte_eal_init_alert("Error parsing command line arguments.");
+ /* Copy user-provided configuration to EAL global configuration */
+ struct eal_user_cfg *user_cfg = eal_get_user_configuration();
+ if (eal_user_cfg_copy(user_cfg, user_provided_cfg) < 0) {
+ rte_eal_init_alert("Cannot copy user configuration.");
rte_errno = EINVAL;
goto err_out;
}
@@ -932,12 +964,10 @@ rte_eal_init(int argc, char **argv)
eal_mcfg_complete();
- return fctret;
+ return 0;
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 568d364d8d..720a1e0502 100644
--- a/lib/eal/windows/eal.c
+++ b/lib/eal/windows/eal.c
@@ -146,19 +146,14 @@ rte_eal_cleanup(void)
return 0;
}
+static int eal_runtime_init(const struct eal_user_cfg *user_provided_cfg);
+
/* Launch threads, called at application init(). */
RTE_EXPORT_SYMBOL(rte_eal_init)
int
rte_eal_init(int argc, char **argv)
{
- int i, fctret, bscan;
- struct eal_user_cfg *user_cfg = eal_get_user_configuration();
- struct eal_runtime_state *runtime_state = eal_get_runtime_state();
- bool has_phys_addr;
- enum rte_iova_mode iova_mode;
- int ret;
- char cpuset[RTE_CPU_AFFINITY_STR_LEN];
- char thread_name[RTE_THREAD_NAME_SIZE];
+ struct eal_user_cfg user_cfg_from_args = EAL_USER_CFG_INITIALIZER(user_cfg_from_args);
/*
* platform_info is lazily initialized on first use, and that
@@ -175,7 +170,7 @@ rte_eal_init(int argc, char **argv)
/* clone argv to report out later in telemetry */
eal_save_args(argc, argv);
- fctret = eal_collate_args(argc, argv);
+ int fctret = eal_collate_args(argc, argv);
if (fctret < 0) {
rte_eal_init_alert("Invalid command line arguments.");
rte_errno = EINVAL;
@@ -191,6 +186,38 @@ rte_eal_init(int argc, char **argv)
eal_log_init(NULL);
+ if (eal_parse_args(&user_cfg_from_args) < 0) {
+ rte_eal_init_alert("Invalid command line arguments.");
+ rte_errno = EINVAL;
+ goto err_out;
+ }
+
+ if (eal_runtime_init(&user_cfg_from_args) < 0)
+ goto err_out; /* log message and rte_errno set by eal_runtime_init() */
+
+ eal_user_cfg_cleanup(&user_cfg_from_args);
+ return fctret;
+
+err_out:
+ eal_clean_saved_args();
+ eal_user_cfg_cleanup(&user_cfg_from_args);
+ return -1;
+}
+
+/**
+ * take a provided user config, copy it to the internal user config structure
+ * and then use it to initialize the DPDK runtime.
+ */
+static int
+eal_runtime_init(const struct eal_user_cfg *user_provided_cfg)
+{
+ struct eal_runtime_state *runtime_state = eal_get_runtime_state();
+ bool has_phys_addr;
+ enum rte_iova_mode iova_mode;
+ int i, ret, bscan;
+ char cpuset[RTE_CPU_AFFINITY_STR_LEN];
+ char thread_name[RTE_THREAD_NAME_SIZE];
+
/* verify if DPDK supported on architecture MMU */
if (!eal_mmu_supported()) {
rte_eal_init_alert("Unsupported MMU type.");
@@ -198,8 +225,10 @@ rte_eal_init(int argc, char **argv)
goto err_out;
}
- if (eal_parse_args() < 0) {
- rte_eal_init_alert("Invalid command line arguments.");
+ /* Copy user-provided configuration to EAL global configuration */
+ struct eal_user_cfg *user_cfg = eal_get_user_configuration();
+ if (eal_user_cfg_copy(user_cfg, user_provided_cfg) < 0) {
+ rte_eal_init_alert("Cannot copy user configuration.");
rte_errno = EINVAL;
goto err_out;
}
@@ -418,10 +447,10 @@ rte_eal_init(int argc, char **argv)
eal_mcfg_complete();
- return fctret;
+ return 0;
+
err_out:
eal_cleanup_config();
- eal_clean_saved_args();
return -1;
}
--
2.53.0
next prev parent reply other threads:[~2026-07-21 9:50 UTC|newest]
Thread overview: 91+ 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-27 18:03 ` Stephen Hemminger
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 ` [PATCH 31/39] eal: store user-provided lcore info " Bruce Richardson
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 ` Bruce Richardson [this message]
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-39-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 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.