[v4,2/8] eal: fixes for re-initialization issues
Checks
Commit Message
From: Graham Whyte <grwhyte@microsoft.com>
reinitialize the solib link list and clean the globals holding
state for parsing.
Signed-off-by: Sinan Kaya <okaya@kernel.org>
Signed-off-by: Graham Whyte <grwhyte@microsoft.com>
---
lib/eal/common/eal_common_options.c | 8 ++++++++
lib/eal/linux/eal.c | 4 +++-
2 files changed, 11 insertions(+), 1 deletion(-)
Comments
On Tue, 15 Aug 2023 10:50:17 -0400
okaya@kernel.org wrote:
> +static uint32_t run_once;
> +
> int
> eal_clean_runtime_dir(void)
> {
> @@ -505,6 +507,7 @@ eal_parse_socket_arg(char *strval, volatile uint64_t *socket_arg)
> socket_arg[i] = val;
> }
>
> + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
> return 0;
Interesting, other flags don't use atomic. Why here?
And is already set elsewhere?
On Tue, 2023-08-15 at 10:49 -0700, Stephen Hemminger wrote:
> >
> > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
> > return 0;
>
>
> Interesting, other flags don't use atomic. Why here?
>
>
>
> And is already set elsewhere?
Looking at the history, this variable used to be an atomic
variable. Later, it got replaced with a uint32_t and write
is done with __atomic_store_n instead. I followed other
examples in the same source code file.
@@ -127,6 +127,7 @@ TAILQ_HEAD_INITIALIZER(solib_list);
static const char *default_solib_dir = RTE_EAL_PMD_PATH;
#endif
+
/*
* Stringified version of solib path used by dpdk-pmdinfo.py
* Note: PLEASE DO NOT ALTER THIS without making a corresponding
@@ -254,6 +255,13 @@ eal_plugins_cleanup(void)
dlclose(solib->lib_handle);
free(solib);
}
+
+ /* Reinitialize solib_list */
+ TAILQ_INIT(&solib_list);
+
+ main_lcore_parsed = 0;
+ mem_parsed = 0;
+ core_parsed = 0;
}
static int
@@ -79,6 +79,8 @@ struct lcore_config lcore_config[RTE_MAX_LCORE];
int rte_cycles_vmware_tsc_map;
+static uint32_t run_once;
+
int
eal_clean_runtime_dir(void)
{
@@ -505,6 +507,7 @@ eal_parse_socket_arg(char *strval, volatile uint64_t *socket_arg)
socket_arg[i] = val;
}
+ __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
return 0;
}
@@ -967,7 +970,6 @@ int
rte_eal_init(int argc, char **argv)
{
int i, fctret, ret;
- static uint32_t run_once;
uint32_t has_run = 0;
char cpuset[RTE_CPU_AFFINITY_STR_LEN];
char thread_name[RTE_MAX_THREAD_NAME_LEN];