From: David Marchand Date: Wed, 8 Oct 2014 08:43:31 +0000 (+0200) Subject: eal/bsd: fix core detection X-Git-Tag: spdx-start~10321 X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=b1a3e0f773db45007717027d03d08fd41818b816 eal/bsd: fix core detection Following "options parsing" patchset (commit d7cb626f and 489a9d6c), core detection is not working correctly on bsd. ./x86_64-native-bsdapp-gcc/app/test -c f -n 4 -- -i [...] EAL: lcore 0 unavailable EAL: invalid coremask Align bsd to linux: - commit f563a372 "eal: fix recording of detected/enabled logical cores" - commit 4f04db8b "eal: check coremask against detected lcores" Reported-by: Zhan, Zhaochen Signed-off-by: David Marchand Acked-by: Bruce Richardson Acked-by: Neil Horman Tested-by: Zhaochen Zhan --- diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index c40a59a9b2..ca99cb96f1 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -517,6 +517,9 @@ rte_eal_init(int argc, char **argv) if (rte_eal_log_early_init() < 0) rte_panic("Cannot init early logs\n"); + if (rte_eal_cpu_init() < 0) + rte_panic("Cannot detect lcores\n"); + fctret = eal_parse_args(argc, argv); if (fctret < 0) exit(1); @@ -551,9 +554,6 @@ rte_eal_init(int argc, char **argv) rte_config_init(); - if (rte_eal_cpu_init() < 0) - rte_panic("Cannot detect lcores\n"); - if (rte_eal_memory_init() < 0) rte_panic("Cannot init memory\n"); diff --git a/lib/librte_eal/bsdapp/eal/eal_lcore.c b/lib/librte_eal/bsdapp/eal/eal_lcore.c index 43a5c014cc..662f024513 100644 --- a/lib/librte_eal/bsdapp/eal/eal_lcore.c +++ b/lib/librte_eal/bsdapp/eal/eal_lcore.c @@ -71,16 +71,18 @@ rte_eal_cpu_init(void) unsigned count = 0; const unsigned ncpus = get_ncpus(); - - /* disable lcores that were not detected */ - RTE_LCORE_FOREACH(lcore_id) { - + /* + * Parse the maximum set of logical cores, detect the subset of running + * ones and enable them by default. + */ + for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) { lcore_config[lcore_id].detected = (lcore_id < ncpus); if (lcore_config[lcore_id].detected == 0) { config->lcore_role[lcore_id] = ROLE_OFF; continue; } - count++; + /* By default, each detected core is enabled */ + config->lcore_role[lcore_id] = ROLE_RTE; lcore_config[lcore_id].core_id = cpu_core_id(lcore_id); lcore_config[lcore_id].socket_id = cpu_socket_id(lcore_id); if (lcore_config[lcore_id].socket_id >= RTE_MAX_NUMA_NODES) @@ -93,8 +95,9 @@ rte_eal_cpu_init(void) #endif RTE_LOG(DEBUG, EAL, "Detected lcore %u\n", lcore_id); + count++; } - + /* Set the count of enabled logical cores of the EAL configuration */ config->lcore_count = count; RTE_LOG(DEBUG, EAL, "Support maximum %u logical core(s) by configuration.\n", RTE_MAX_LCORE);