eal/bsd: fix core detection
authorDavid Marchand <david.marchand@6wind.com>
Wed, 8 Oct 2014 08:43:31 +0000 (10:43 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 9 Oct 2014 15:52:06 +0000 (17:52 +0200)
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 <zhaochen.zhan@intel.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Tested-by: Zhaochen Zhan <zhaochen.zhan@intel.com>
lib/librte_eal/bsdapp/eal/eal.c
lib/librte_eal/bsdapp/eal/eal_lcore.c

index c40a59a..ca99cb9 100644 (file)
@@ -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");
 
index 43a5c01..662f024 100644 (file)
@@ -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);