eal: fix vdev allocation on non-0 numa socket
[dpdk.git] / lib / librte_eal / linuxapp / eal / eal.c
index 3ded563..39951fc 100644 (file)
@@ -441,6 +441,11 @@ eal_parse_coremask(const char *coremask)
                val = xdigit2val(c);
                for(j = 0; j < BITS_PER_HEX && idx < RTE_MAX_LCORE; j++, idx++) {
                        if((1 << j) & val) {
+                               if (!lcore_config[idx].detected) {
+                                       RTE_LOG(ERR, EAL, "lcore %u "
+                                               "unavailable\n", idx);
+                                       return -1;
+                               }
                                cfg->lcore_role[idx] = ROLE_RTE;
                                if(count == 0)
                                        cfg->master_lcore = idx;
@@ -1049,22 +1054,18 @@ rte_eal_init(int argc, char **argv)
        TAILQ_FOREACH(solib, &solib_list, next) {
                RTE_LOG(INFO, EAL, "open shared lib %s\n", solib->name);
                solib->lib_handle = dlopen(solib->name, RTLD_NOW);
-               if ((solib->lib_handle == NULL) && (solib->name[0] != '/')) {
-                       /* relative path: try again with "./" prefix */
-                       char sopath[PATH_MAX];
-                       snprintf(sopath, sizeof(sopath), "./%s", solib->name);
-                       solib->lib_handle = dlopen(sopath, RTLD_NOW);
-               }
                if (solib->lib_handle == NULL)
                        RTE_LOG(WARNING, EAL, "%s\n", dlerror());
        }
 
-       if (rte_eal_vdev_init() < 0)
-               rte_panic("Cannot init virtual devices\n");
+       eal_thread_init_master(rte_config.master_lcore);
 
        RTE_LOG(DEBUG, EAL, "Master core %u is ready (tid=%x)\n",
                rte_config.master_lcore, (int)thread_id);
 
+       if (rte_eal_vdev_init() < 0)
+               rte_panic("Cannot init virtual devices\n");
+
        RTE_LCORE_FOREACH_SLAVE(i) {
 
                /*
@@ -1085,8 +1086,6 @@ rte_eal_init(int argc, char **argv)
                        rte_panic("Cannot create thread\n");
        }
 
-       eal_thread_init_master(rte_config.master_lcore);
-
        /*
         * Launch a dummy function on all slave lcores, so that master lcore
         * knows they are all ready when this function returns.