All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: Stephen Hemminger <stephen@networkplumber.org>
Cc: <dev@dpdk.org>
Subject: Re: [PATCH 00/39] Rework EAL configuration
Date: Tue, 18 Aug 2026 14:41:46 +0100	[thread overview]
Message-ID: <aoRhGpGFxh1-22IN@bricha3-mobl1.ger.corp.intel.com> (raw)
In-Reply-To: <20260727163007.60e4a2dc@phoenix.local>

On Mon, Jul 27, 2026 at 04:30:07PM -0700, Stephen Hemminger wrote:
> 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.

<snip>

> > --
> > 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.
> 

Added in v2

> 
> 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.
> 

Yes, this is a valid issue. Reworked a couple of patches to fix it for v2.

> 
> 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.
> 

This I believe to be a false positive. The trace-dir EAL flag can only be
specified once on the command line, enforced by the argparse library, so
the fact that the later functions don't handle multiple values is not a
problem. The concatenation here is actually for appending a filename to an
existing trace dir.

> 
> 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.
> 

Fixed in v2. Explicitly set rte_errno = 0 at the start of function and set
it explicitly only when it's not already set by a subfunction of
get_platform_info.

> 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.
> 

Expected. In RFC I included an example of use, but dropped from this v1
series as it's already long enough.

> 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.
> 

As above, will hopefully be added later if this makes it in.

> 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
>
<snip> 

  reply	other threads:[~2026-08-18 13:42 UTC|newest]

Thread overview: 134+ 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-08-18 13:36       ` 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   ` [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   ` [PATCH 00/39] Rework EAL configuration Stephen Hemminger
2026-08-18 13:41     ` Bruce Richardson [this message]
2026-08-18 13:32 ` [PATCH v2 " Bruce Richardson
2026-08-18 13:32   ` [PATCH v2 01/39] telemetry: make cpuset init parameter const Bruce Richardson
2026-08-18 13:32   ` [PATCH v2 02/39] argparse: check for range overflow in CPU lists Bruce Richardson
2026-08-18 13:32   ` [PATCH v2 03/39] eal: define new functionally distinct config structs Bruce Richardson
2026-08-18 13:32   ` [PATCH v2 04/39] eal: move memory request fields to user config Bruce Richardson
2026-08-18 13:32   ` [PATCH v2 05/39] eal: move NUMA " Bruce Richardson
2026-08-18 13:32   ` [PATCH v2 06/39] eal: move hugepage policy " Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 07/39] eal: move process " Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 08/39] eal: move hugepage limit fields to new config structs Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 09/39] eal: move advanced user config options to user cfg struct Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 10/39] eal: move hugepage size info to platform info struct Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 11/39] eal: move runtime state to appropriate structure Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 12/39] eal: record details of all cpus in platform info Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 13/39] eal: use platform info for lcore lookups Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 14/39] eal: add macro for lowest set CPU bit in a set Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 15/39] eal: store lcore configuration in runtime data Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 16/39] eal: move core indices bitset to runtime state Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 17/39] eal: cleanup CPU init function Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 18/39] eal: move NUMA node information to platform info struct Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 19/39] eal: move lcore role and count to runtime state Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 20/39] eal: make lcore role a field in lcore config struct Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 21/39] eal: move main lcore setting to runtime " Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 22/39] eal: move IOVA mode and process type to runtime cfg Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 23/39] eal: move memory config pointer to runtime state struct Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 24/39] eal: remove rte_config structure Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 25/39] eal: separate runtime state update from arg parsing Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 26/39] eal: move device options staging list into user cfg Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 27/39] eal: separate plugin paths from loaded plugin objects Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 28/39] eal: simplify internal driver path iteration APIs Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 29/39] eal: move trace config into user config struct Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 30/39] eal: record service cores in " Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 31/39] eal: store user-provided lcore info " Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 32/39] eal: clarify docs on params taking lcore IDs Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 33/39] eal: remove internal config reset function Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 34/39] eal: move functions setting runtime state Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 35/39] eal: initialize platform info on first use Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 36/39] eal: remove duplicated scan of sysfs for hugepage details Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 37/39] eal: add utilities for working with user config struct Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 38/39] eal: split EAL init into two stages Bruce Richardson
2026-08-18 13:33   ` [PATCH v2 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=aoRhGpGFxh1-22IN@bricha3-mobl1.ger.corp.intel.com \
    --to=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=stephen@networkplumber.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.