The eal_parse_args function was performing several updates to the runtime state that do not logically belong in a parse_args function. Move these to the "eal_adjust_config()" function, which is now renamed to the more accurate "eal_apply_runtime_state()". Ensure too, that all queries for the multi process mode use the runtime state rather than the original user provided value, which needs resolution if it's AUTO.
Signed-off-by: Bruce Richardson <[email protected]> --- lib/eal/common/eal_common_options.c | 68 +++++++++++++---------------- lib/eal/common/eal_options.h | 2 +- lib/eal/freebsd/eal.c | 5 +-- lib/eal/linux/eal.c | 5 +-- lib/eal/linux/eal_vfio.c | 9 ++-- 5 files changed, 37 insertions(+), 52 deletions(-) diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c index 9b3ba64c4c..dc6f4643c4 100644 --- a/lib/eal/common/eal_common_options.c +++ b/lib/eal/common/eal_common_options.c @@ -1960,7 +1960,6 @@ int eal_parse_args(void) { struct eal_user_cfg *user_cfg = eal_get_user_configuration(); - struct eal_runtime_state *runtime_state = eal_get_runtime_state(); bool remap_lcores = (args.remap_lcore_ids != NULL); struct arg_list_elem *arg; uint16_t lcore_id_base = 0; @@ -2088,17 +2087,6 @@ eal_parse_args(void) if (args.main_lcore != NULL && eal_parse_main_lcore(args.main_lcore) < 0) return -1; - if (user_cfg->main_lcore != -1) { - runtime_state->main_lcore = user_cfg->main_lcore; - } else { - /* default main lcore is the first one */ - runtime_state->main_lcore = rte_get_next_lcore(-1, 0, 0); - if (runtime_state->main_lcore >= RTE_MAX_LCORE) { - EAL_LOG(ERR, "Main lcore is not enabled for DPDK"); - return -1; - } - } - /* memory options */ if (args.memory_size != NULL) { user_cfg->memory = atoi(args.memory_size); @@ -2299,23 +2287,11 @@ eal_parse_args(void) } } -#ifndef RTE_EXEC_ENV_WINDOWS - /* create runtime data directory. In no_shconf mode, skip any errors */ - if (eal_create_runtime_dir() < 0) { - if (!user_cfg->no_shconf) { - EAL_LOG(ERR, "Cannot create runtime directory"); - return -1; - } - EAL_LOG(WARNING, "No DPDK runtime directory created"); - } -#endif - - if (eal_adjust_config() != 0) { - EAL_LOG(ERR, "Invalid configuration"); - return -1; - } + /* sum per-NUMA memory requests into user_cfg->memory */ + for (int i = 0; i < RTE_MAX_NUMA_NODES; i++) + user_cfg->memory += user_cfg->numa_mem[i]; - return 0; + return eal_apply_runtime_state(); } static void @@ -2363,20 +2339,38 @@ eal_cleanup_config(const struct eal_user_cfg *user_cfg) } int -eal_adjust_config(void) +eal_apply_runtime_state(void) { struct eal_user_cfg *user_cfg = eal_get_user_configuration(); - int i; + struct eal_runtime_state *runtime_state = eal_get_runtime_state(); - if (user_cfg->process_type == RTE_PROC_AUTO) - user_cfg->process_type = eal_proc_type_detect(); + /* set the main lcore */ + if (user_cfg->main_lcore != -1) { + runtime_state->main_lcore = user_cfg->main_lcore; + } else { + /* default main lcore is the first one */ + runtime_state->main_lcore = rte_get_next_lcore(-1, 0, 0); + if (runtime_state->main_lcore >= RTE_MAX_LCORE) { + EAL_LOG(ERR, "Main lcore is not enabled for DPDK"); + return -1; + } + } - compute_ctrl_threads_cpuset(); +#ifndef RTE_EXEC_ENV_WINDOWS + /* create runtime data directory. In no_shconf mode, skip any errors */ + if (eal_create_runtime_dir() < 0) { + if (!user_cfg->no_shconf) { + EAL_LOG(ERR, "Cannot create runtime directory"); + return -1; + } + EAL_LOG(WARNING, "No DPDK runtime directory created"); + } +#endif - /* if no memory amounts were requested, this will result in 0 and - * will be overridden later, right after eal_hugepage_info_init() */ - for (i = 0; i < RTE_MAX_NUMA_NODES; i++) - user_cfg->memory += user_cfg->numa_mem[i]; + runtime_state->process_type = (user_cfg->process_type == RTE_PROC_AUTO) ? + eal_proc_type_detect() : user_cfg->process_type; + + compute_ctrl_threads_cpuset(); return 0; } diff --git a/lib/eal/common/eal_options.h b/lib/eal/common/eal_options.h index a70c5b0c05..d5ad7a4720 100644 --- a/lib/eal/common/eal_options.h +++ b/lib/eal/common/eal_options.h @@ -13,7 +13,7 @@ struct eal_user_cfg; int eal_parse_log_options(void); int eal_parse_args(void); int eal_option_device_parse(void); -int eal_adjust_config(void); +int eal_apply_runtime_state(void); int eal_cleanup_config(const struct eal_user_cfg *user_cfg); enum rte_proc_type_t eal_proc_type_detect(void); int eal_plugins_init(void); diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c index 0fafb2c295..16748f965e 100644 --- a/lib/eal/freebsd/eal.c +++ b/lib/eal/freebsd/eal.c @@ -285,9 +285,6 @@ static int eal_mem_config_init(void) { struct eal_runtime_state *runtime_state = eal_get_runtime_state(); - const struct eal_user_cfg *user_cfg = eal_get_user_configuration(); - - runtime_state->process_type = user_cfg->process_type; switch (runtime_state->process_type) { case RTE_PROC_PRIMARY: @@ -565,7 +562,7 @@ rte_eal_init(int argc, char **argv) if (!user_cfg->no_hugetlbfs) { /* shared mem config not yet attached */ - ret = user_cfg->process_type == RTE_PROC_PRIMARY ? + ret = rte_eal_process_type() == RTE_PROC_PRIMARY ? eal_hugepage_info_init() : eal_hugepage_info_read(); if (ret < 0) { diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c index 8d3559aa37..8d67d6744f 100644 --- a/lib/eal/linux/eal.c +++ b/lib/eal/linux/eal.c @@ -369,9 +369,6 @@ static int eal_mem_config_init(void) { struct eal_runtime_state *runtime_state = eal_get_runtime_state(); - const struct eal_user_cfg *user_cfg = eal_get_user_configuration(); - - runtime_state->process_type = user_cfg->process_type; switch (runtime_state->process_type) { case RTE_PROC_PRIMARY: @@ -729,7 +726,7 @@ rte_eal_init(int argc, char **argv) if (!user_cfg->no_hugetlbfs) { /* shared mem config not yet attached */ - ret = user_cfg->process_type == RTE_PROC_PRIMARY ? + ret = rte_eal_process_type() == RTE_PROC_PRIMARY ? eal_hugepage_info_init() : eal_hugepage_info_read(); if (ret < 0) { diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c index 678ac57e87..019966593e 100644 --- a/lib/eal/linux/eal_vfio.c +++ b/lib/eal/linux/eal_vfio.c @@ -482,8 +482,7 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg, * knowledge of them. Requesting a group fd from the primary for a * container it doesn't know about would be incorrect. */ - const struct eal_user_cfg *user_cfg = eal_get_user_configuration(); - bool mp_request = (user_cfg->process_type == RTE_PROC_SECONDARY) && + bool mp_request = (rte_eal_process_type() == RTE_PROC_SECONDARY) && (vfio_cfg == default_vfio_cfg); vfio_group_fd = vfio_open_group_fd(iommu_group_num, mp_request); @@ -770,7 +769,6 @@ rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int iommu_group_num; rte_uuid_t vf_token; int i, ret; - const struct eal_user_cfg *user_cfg = eal_get_user_configuration(); /* get group number */ ret = rte_vfio_get_group_num(sysfs_base, dev_addr, &iommu_group_num); @@ -852,7 +850,7 @@ rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr, * Note this can happen several times with the hotplug * functionality. */ - if (user_cfg->process_type == RTE_PROC_PRIMARY && + if (rte_eal_process_type() == RTE_PROC_PRIMARY && vfio_cfg->vfio_active_groups == 1 && vfio_group_device_count(vfio_group_fd) == 0) { const struct vfio_iommu_type *t; @@ -1105,7 +1103,6 @@ rte_vfio_enable(const char *modname) unsigned int i, j; int vfio_available; DIR *dir; - const struct eal_user_cfg *user_cfg = eal_get_user_configuration(); rte_spinlock_recursive_t lock = RTE_SPINLOCK_RECURSIVE_INITIALIZER; @@ -1149,7 +1146,7 @@ rte_vfio_enable(const char *modname) } closedir(dir); - if (user_cfg->process_type == RTE_PROC_PRIMARY) { + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { if (vfio_mp_sync_setup() == -1) { default_vfio_cfg->vfio_container_fd = -1; } else { -- 2.51.0

