eal: fix tail blank check in --lcores argument
[dpdk.git] / lib / librte_eal / common / eal_common_options.c
index bed7385..1a1bab3 100644 (file)
@@ -115,6 +115,15 @@ TAILQ_HEAD_INITIALIZER(solib_list);
 /* Default path of external loadable drivers */
 static const char *default_solib_dir = RTE_EAL_PMD_PATH;
 
+/*
+ * Stringified version of solib path used by dpdk-pmdinfo.py
+ * Note: PLEASE DO NOT ALTER THIS without making a corresponding
+ * change to tools/dpdk-pmdinfo.py
+ */
+static const char dpdk_solib_path[] __attribute__((used)) =
+"DPDK_PLUGIN_PATH=" RTE_EAL_PMD_PATH;
+
+
 static int master_lcore_parsed;
 static int mem_parsed;
 
@@ -139,7 +148,11 @@ eal_reset_internal_config(struct internal_config *internal_cfg)
 
        internal_cfg->syslog_facility = LOG_DAEMON;
        /* default value from build option */
+#if RTE_LOG_LEVEL >= RTE_LOG_DEBUG
+       internal_cfg->log_level = RTE_LOG_INFO;
+#else
        internal_cfg->log_level = RTE_LOG_LEVEL;
+#endif
 
        internal_cfg->xen_dom0_support = 0;
 
@@ -191,12 +204,14 @@ eal_plugindir_init(const char *path)
        }
 
        while ((dent = readdir(d)) != NULL) {
-               if (dent->d_type != DT_REG && dent->d_type != DT_LNK)
-                       continue;
+               struct stat sb;
 
                snprintf(sopath, PATH_MAX-1, "%s/%s", path, dent->d_name);
                sopath[PATH_MAX-1] = 0;
 
+               if (!(stat(sopath, &sb) == 0 && S_ISREG(sb.st_mode)))
+                       continue;
+
                if (eal_plugin_add(sopath) == -1)
                        break;
        }
@@ -216,22 +231,15 @@ eal_plugins_init(void)
 
        TAILQ_FOREACH(solib, &solib_list, next) {
                struct stat sb;
-               if (stat(solib->name, &sb) == -1) {
-                       RTE_LOG(ERR, EAL, "Invalid plugin specified: %s: %s\n",
-                               solib->name, strerror(errno));
-                       return -1;
-               }
 
-               switch (sb.st_mode & S_IFMT) {
-               case S_IFDIR:
+               if (stat(solib->name, &sb) == 0 && S_ISDIR(sb.st_mode)) {
                        if (eal_plugindir_init(solib->name) == -1) {
                                RTE_LOG(ERR, EAL,
                                        "Cannot init plugin directory %s\n",
                                        solib->name);
                                return -1;
                        }
-                       break;
-               case S_IFREG:
+               } else {
                        RTE_LOG(DEBUG, EAL, "open shared lib %s\n",
                                solib->name);
                        solib->lib_handle = dlopen(solib->name, RTLD_NOW);
@@ -239,7 +247,6 @@ eal_plugins_init(void)
                                RTE_LOG(ERR, EAL, "%s\n", dlerror());
                                return -1;
                        }
-                       break;
                }
 
        }
@@ -523,6 +530,13 @@ eal_parse_set(const char *input, uint16_t set[], unsigned num)
                str = end + 1;
        } while (*end != '\0' && *end != ')');
 
+       /*
+        * to avoid failure that tail blank makes end character check fail
+        * in eal_parse_lcores( )
+        */
+       while (isblank(*str))
+               str++;
+
        return str - input;
 }
 
@@ -571,13 +585,12 @@ eal_parse_lcores(const char *lcores)
        struct rte_config *cfg = rte_eal_get_configuration();
        static uint16_t set[RTE_MAX_LCORE];
        unsigned idx = 0;
-       int i;
        unsigned count = 0;
        const char *lcore_start = NULL;
        const char *end = NULL;
        int offset;
        rte_cpuset_t cpuset;
-       int lflags = 0;
+       int lflags;
        int ret = -1;
 
        if (lcores == NULL)
@@ -586,9 +599,6 @@ eal_parse_lcores(const char *lcores)
        /* Remove all blank characters ahead and after */
        while (isblank(*lcores))
                lcores++;
-       i = strlen(lcores);
-       while ((i > 0) && isblank(lcores[i - 1]))
-               i--;
 
        CPU_ZERO(&cpuset);
 
@@ -606,6 +616,8 @@ eal_parse_lcores(const char *lcores)
                if (*lcores == '\0')
                        goto err;
 
+               lflags = 0;
+
                /* record lcore_set start point */
                lcore_start = lcores;
 
@@ -803,8 +815,7 @@ eal_parse_common_option(int opt, const char *optarg,
        /* force number of channels */
        case 'n':
                conf->force_nchannel = atoi(optarg);
-               if (conf->force_nchannel == 0 ||
-                   conf->force_nchannel > 4) {
+               if (conf->force_nchannel == 0) {
                        RTE_LOG(ERR, EAL, "invalid channel number\n");
                        return -1;
                }