From: Stephen Hemminger <stephen@networkplumber.org>
To: Bruce Richardson <bruce.richardson@intel.com>
Cc: dev@dpdk.org
Subject: Re: [PATCH 00/39] Rework EAL configuration
Date: Mon, 27 Jul 2026 16:30:07 -0700 [thread overview]
Message-ID: <20260727163007.60e4a2dc@phoenix.local> (raw)
In-Reply-To: <20260721094555.2188496-1-bruce.richardson@intel.com>
On Tue, 21 Jul 2026 10:45:08 +0100
Bruce Richardson <bruce.richardson@intel.com> wrote:
> This patchset reworks how configuration is stored and managed in EAL.
> The existing "internal_config", "rte_config", "lcore_config" structures,
> which sometimes have arbitrary separation between them (especially the
> first two) are replaced by three new structures with clearly defined
> roles:
>
> - eal_platform_info - contains the raw HW info for the system, details
> of CPUs and hugepage mounts. This is initialized on first use - even
> before EAL init is called - and is then immutable, since our HW should
> not change much underneath us. Its early availability means that it
> can be used to sanity check the contents of the other structs as they
> are being built up.
>
> - eal_user_cfg - contains the config settings passed in by the user. For
> existing rte_eal_init, this is built up in the arg parse stage, and
> it's contents verified against the platform info, e.g. to check core
> masks are valid etc. Once argument parsing is completed, is also
> immutable.
>
> - runtime_cfg - basically all the runtime settings that need to be there
> for DPDK to run, or which change over time. Largely combined content
> of the old rte_config, internal_config and lcore_config structs. This
> is initialized from the other two structs by eal initialization and
> can be modified by EAL at any time.
>
> Once that is done, we have a clean separation between user provided
> configuration and the rest of EAL, we can split EAL init into two parts,
> the first of which parses cmdline arguments and then calls the second
> which takes the eal_user_cfg struct result of that parse and does the
> actual initialization. The longer-term objective is to have other
> first-stage functions that prepare the user_cfg struct for
> initialization, so that we can move away from argc/argv as the only
> method of configuring DPDK initialization.
>
> Bruce Richardson (39):
> telemetry: make cpuset init parameter const
> argparse: check for range overflow in CPU lists
> eal: define new functionally distinct config structs
> eal: move memory request fields to user config
> eal: move NUMA request fields to user config
> eal: move hugepage policy fields to user config
> eal: move process policy fields to user config
> eal: move hugepage limit fields to new config structs
> eal: move advanced user config options to user cfg struct
> eal: move hugepage size info to platform info struct
> eal: move runtime state to appropriate structure
> eal: record details of all cpus in platform info
> eal: use platform info for lcore lookups
> eal: add macro for lowest set CPU bit in a set
> eal: store lcore configuration in runtime data
> eal: move core indices bitset to runtime state
> eal: cleanup CPU init function
> eal: move NUMA node information to platform info struct
> eal: move lcore role and count to runtime state
> eal: make lcore role a field in lcore config struct
> eal: move main lcore setting to runtime config struct
> eal: move IOVA mode and process type to runtime cfg
> eal: move memory config pointer to runtime state struct
> eal: remove rte_config structure
> eal: separate runtime state update from arg parsing
> eal: move device options staging list into user cfg
> eal: separate plugin paths from loaded plugin objects
> eal: simplify internal driver path iteration APIs
> eal: move trace config into user config struct
> eal: record service cores in user config struct
> eal: store user-provided lcore info in user config struct
> eal: clarify docs on params taking lcore IDs
> eal: remove internal config reset function
> eal: move functions setting runtime state
> eal: initialize platform info on first use
> eal: remove duplicated scan of sysfs for hugepage details
> eal: add utilities for working with user config struct
> eal: split EAL init into two stages
> eal: provide hooks for init with externally supplied config
>
> app/test/process.h | 4 +-
> app/test/test_argparse.c | 10 +
> doc/guides/linux_gsg/eal_args.include.rst | 38 +-
> lib/argparse/rte_argparse.c | 5 +
> lib/eal/common/eal_common_bus.c | 4 +-
> lib/eal/common/eal_common_config.c | 264 ++++++-
> lib/eal/common/eal_common_dev.c | 10 +-
> lib/eal/common/eal_common_dynmem.c | 70 +-
> lib/eal/common/eal_common_fbarray.c | 10 +-
> lib/eal/common/eal_common_launch.c | 25 +-
> lib/eal/common/eal_common_lcore.c | 267 ++++---
> lib/eal/common/eal_common_mcfg.c | 44 +-
> lib/eal/common/eal_common_memalloc.c | 5 +-
> lib/eal/common/eal_common_memory.c | 104 ++-
> lib/eal/common/eal_common_memzone.c | 24 +-
> lib/eal/common/eal_common_options.c | 899 ++++++++--------------
> lib/eal/common/eal_common_proc.c | 43 +-
> lib/eal/common/eal_common_tailqs.c | 6 +-
> lib/eal/common/eal_common_thread.c | 67 +-
> lib/eal/common/eal_common_timer.c | 2 +-
> lib/eal/common/eal_common_trace.c | 30 +-
> lib/eal/common/eal_common_trace_utils.c | 104 ---
> lib/eal/common/eal_hugepages.h | 8 +
> lib/eal/common/eal_internal_cfg.h | 386 ++++++++--
> lib/eal/common/eal_memcfg.h | 3 +
> lib/eal/common/eal_option_list.h | 6 +-
> lib/eal/common/eal_options.h | 8 +-
> lib/eal/common/eal_private.h | 121 ++-
> lib/eal/common/eal_trace.h | 11 -
> lib/eal/common/malloc_elem.c | 15 +-
> lib/eal/common/malloc_heap.c | 41 +-
> lib/eal/common/malloc_mp.c | 2 +-
> lib/eal/common/rte_malloc.c | 14 +-
> lib/eal/common/rte_service.c | 17 +-
> lib/eal/freebsd/eal.c | 287 ++++---
> lib/eal/freebsd/eal_hugepage_info.c | 78 +-
> lib/eal/freebsd/eal_lcore.c | 16 +-
> lib/eal/freebsd/eal_memory.c | 46 +-
> lib/eal/freebsd/include/rte_os.h | 2 +
> lib/eal/include/rte_eal.h | 35 +-
> lib/eal/include/rte_memzone.h | 10 +-
> lib/eal/include/rte_tailq.h | 2 +-
> lib/eal/linux/eal.c | 296 ++++---
> lib/eal/linux/eal_hugepage_info.c | 231 +++---
> lib/eal/linux/eal_lcore.c | 43 ++
> lib/eal/linux/eal_memalloc.c | 168 ++--
> lib/eal/linux/eal_memory.c | 168 ++--
> lib/eal/linux/eal_timer_hpet.c | 21 +-
> lib/eal/linux/eal_vfio.c | 11 +-
> lib/eal/linux/include/rte_os.h | 10 +
> lib/eal/unix/eal_unix_thread.c | 11 +-
> lib/eal/windows/eal.c | 193 +++--
> lib/eal/windows/eal_hugepages.c | 60 +-
> lib/eal/windows/eal_lcore.c | 6 +
> lib/eal/windows/eal_memalloc.c | 37 +-
> lib/eal/windows/eal_memory.c | 14 +-
> lib/eal/windows/eal_thread.c | 11 +-
> lib/eal/windows/eal_windows.h | 8 -
> lib/eal/windows/include/rte_os.h | 1 +
> lib/eal/windows/include/sched.h | 10 +
> lib/telemetry/telemetry.c | 4 +-
> lib/telemetry/telemetry_internal.h | 2 +-
> 62 files changed, 2499 insertions(+), 1949 deletions(-)
>
> --
> 2.53.0
>
Ran deeper AI review on this and it found a couple small things:
Review of "eal: rework EAL initialization" (39 patches)
Series applies cleanly to main (9231dc7). All 39 commits build individually
with -Dwerror=true, so bisect is safe. Findings verified against the merged
tree rather than the diffs alone.
Patch 02/39 - argparse: check for range overflow in CPU lists
Warning: missing Fixes: and Cc: stable.
This is an out-of-bounds write, not a cleanup - CPU_SET(min, cpuset) with
min >= CPU_SETSIZE writes past the end of rte_cpuset_t. The introducing
commit is in v25.11, so it needs backporting:
Fixes: d78103fb9488 ("argparse: support core lists")
Cc: stable@dpdk.org
The fix itself is correct and complete: all three branches assign max before
the new check, min >= 0 is guaranteed by the isdigit() gate, and min <= max
holds in every branch, so the CPU_SET loop is fully bounded.
Patch 33/39 - eal: remove internal config reset function
Error: removing eal_reset_internal_config() drops the lock_descriptor = -1
preset, which can lead to close(0) on stdin. Linux only.
The deleted function did:
for (i = 0; i < MAX_HUGEPAGE_SIZES; i++) {
memset(&internal_cfg->hugepage_info[i], 0, ...);
internal_cfg->hugepage_info[i].lock_descriptor = -1;
}
That -1 was the invariant eal_hugedirs_unlock() relied on. hugepage_info[]
now lives in eal_runtime_state, which is a static initialised only with
.mem_config, so every lock_descriptor starts at 0 - a valid fd.
This patch compensates by widening the guard:
if (hugepage_info[i].hugepage_sz == 0 ||
hugepage_info[i].lock_descriptor < 0)
continue;
but hugepage_sz == 0 is not a sufficient proxy. In hugepage_info_init()
(lib/eal/linux/eal_hugepage_info.c) hpi->hugepage_sz is assigned *before*
the mountpoint check, and the no-mountpoint path continues without ever
assigning lock_descriptor:
hpi = &rs->hugepage_info[num_sizes];
hpi->hugepage_sz = hps->size; /* set first */
if (get_hugepage_dir(...) < 0) {
if (user_cfg->in_memory) {
calc_num_pages(hpi, hps, 0);
num_sizes++; /* entry accepted */
}
continue; /* lock_descriptor never set */
}
hpi->lock_descriptor = open(hpi->hugedir, O_RDONLY);
Two reachable cases:
(a) --in-memory with a reserved-but-unmounted size (e.g. 1G reserved,
only 2M mounted). The entry is accepted with hugepage_sz != 0 and
lock_descriptor == 0.
(b) Default mode where the *last* size has no mountpoint. num_sizes is
not incremented, so slot [num_sizes] keeps a nonzero hugepage_sz with
lock_descriptor == 0. eal_hugedirs_unlock() iterates to
MAX_HUGEPAGE_SIZES, not num_hugepage_sizes, so it still visits it.
In both, the guard passes and the code runs flock(0, LOCK_UN) followed by
close(0) on the normal init path (lib/eal/linux/eal.c:831, unconditional
after rte_eal_memory_init()). Confirmed with a standalone harness
reproducing the two functions' control flow.
FreeBSD is unaffected (single entry, fd assigned unconditionally, no
unlock loop); Windows sets -1 explicitly in eal_hugepages.c.
Simplest fix is to restore the invariant rather than widen the guard - set
lock_descriptor = -1 for all MAX_HUGEPAGE_SIZES entries when runtime state
is set up, or initialise the entry immediately after hugepage_sz is
assigned in hugepage_info_init(). Bounding the unlock loop by
num_hugepage_sizes would fix (b) but not (a).
The other non-zero defaults from the deleted function are all preserved
correctly: hugepage_file.unlink_existing, no_hpet, and
max_simd_bitwidth.bitwidth are in EAL_USER_CFG_INITIALIZER, and
RTE_IOVA_DC / RTE_INTR_MODE_NONE / RTE_PROC_PRIMARY are all genuinely 0.
lock_descriptor is the only one lost.
Patch 29/39 - eal: move trace config into user config struct
Warning: --trace-dir accumulate semantics changed, plus a leak on repeat.
The old path went through trace_dir_update(), which concatenated onto any
existing value:
asprintf(&dir, "%s%s", trace->dir != NULL ? trace->dir : "", str);
The new code does a plain asprintf into user_cfg->trace_dir. Passing
--trace-dir more than once now replaces rather than appends, and the
earlier allocation leaks since trace_dir is overwritten without a free.
If the replace behaviour is intended, worth saying so in the commit
message; otherwise free the previous value first.
Patch 39/39 - eal: provide hooks for init with externally supplied config
Error: rte_eal_runtime_init() returns -1 without setting rte_errno on the
platform-info path. Identical in all three platform copies:
if (rte_eal_get_platform_info() == NULL) {
rte_eal_init_alert("Platform information is not available.");
return -1; /* rte_errno not set */
}
The other two error paths in the same function set EINVAL and EALREADY,
and the equivalent path in rte_eal_init() sets ENOTSUP. A caller checking
rte_errno gets a stale value. Suggest rte_errno = ENOTSUP to match.
Warning: the stated purpose is not reachable as posted.
The commit message says the hooks let "other libraries init EAL by passing
in that structure pre-configured", but struct eal_user_cfg and both new
prototypes live in lib/eal/common/eal_internal_cfg.h. lib/meson.build:143
only adds eal/common to the include path when RTE_LIB_EAL is not yet set,
i.e. for EAL's own sub-build; afterwards dependent libraries get
deps += ['eal'], which exposes only EAL's public include dirs. No in-tree
library can declare the type or call the function without the explicit
include_directories() hack used by drivers/common/mlx5/linux/meson.build.
Either make the header reachable or note that a follow-up is required.
Warning: both new __rte_internal symbols have no in-tree consumer and no
test, so the deep-copy path in eal_user_cfg_copy() is never exercised by
anything. A test driving rte_eal_runtime_init() with a hand-populated
config would be worth adding alongside.
Info: eal_internal_cfg.h uses #include "rte_compat.h" while every other
public RTE header in the same file uses angle brackets.
Checked and found correct
Recording these so they are not re-reviewed:
- eal_user_cfg_copy() deep copy is sound. device_option uses a flexible
char arg[], so calloc(1, sizeof(*copy) + arglen) is right;
eal_plugin_path uses a fixed char name[PATH_MAX], so malloc(sizeof(*p))
plus memcpy(..., sizeof(name)) is right. Both lists, trace patterns, all
four heap strings and the per-lcore cpusets are deep-copied, so cleaning
up both user_cfg_from_args and the global config is not a double free.
The error path calls eal_user_cfg_cleanup(dst), which is idempotent, so
the later eal_cleanup_config() in eal_runtime_init()'s err_out is safe.
- EAL_USER_CFG_INITIALIZER(self): the self-referencing
TAILQ_HEAD_INITIALIZER((self).devopt_list) is legal - the object's scope
begins after its declarator, and tqh_last correctly points at the final
object rather than the compound-literal temporary.
- rte_eal_get_platform_info() double-checked locking has correct
acquire/release pairing under a spinlock.
- rte_eal_cpu_init() error paths all free and NULL both cpu_info and
numa_nodes, so the caller's fail label cannot double-free. No leak on the
numa_node_count > RTE_MAX_NUMA_NODES path.
- eal_expand_cpuset_to_map() and the --lcores parser both NULL entries as
they free, so the later eal_user_cfg_cleanup() is safe.
- Every added malloc/calloc/strdup/asprintf checks its return.
sprintf(pattern, "%s*", ...) into calloc(1, len + 2) is exactly sized.
- No public ABI change; the only new exports are two
RTE_EXPORT_INTERNAL_SYMBOLs and no version.map is hand-edited.
prev parent reply other threads:[~2026-07-27 23:30 UTC|newest]
Thread overview: 92+ 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 ` [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
2026-07-27 23:30 ` Stephen Hemminger [this message]
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=20260727163007.60e4a2dc@phoenix.local \
--to=stephen@networkplumber.org \
--cc=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