eal: fix FreeBSD build
[dpdk.git] / lib / librte_eal / bsdapp / eal / eal.c
index 4ee3ad2..ee7c9de 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  *   BSD LICENSE
  *
- *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
  *   Copyright(c) 2014 6WIND S.A.
  *   All rights reserved.
  *
@@ -64,6 +64,7 @@
 #include <rte_string_fns.h>
 #include <rte_cpuflags.h>
 #include <rte_interrupts.h>
+#include <rte_bus.h>
 #include <rte_pci.h>
 #include <rte_dev.h>
 #include <rte_devargs.h>
@@ -71,7 +72,6 @@
 #include <rte_version.h>
 #include <rte_atomic.h>
 #include <malloc_heap.h>
-#include <rte_eth_ring.h>
 
 #include "eal_private.h"
 #include "eal_thread.h"
@@ -313,8 +313,14 @@ eal_log_level_parse(int argc, char **argv)
        int opt;
        char **argvopt;
        int option_index;
+       const int old_optind = optind;
+       const int old_optopt = optopt;
+       const int old_optreset = optreset;
+       char * const old_optarg = optarg;
 
        argvopt = argv;
+       optind = 1;
+       optreset = 1;
 
        eal_reset_internal_config(&internal_config);
 
@@ -335,7 +341,11 @@ eal_log_level_parse(int argc, char **argv)
                        break;
        }
 
-       optind = 0; /* reset getopt lib */
+       /* restore getopt lib */
+       optind = old_optind;
+       optopt = old_optopt;
+       optreset = old_optreset;
+       optarg = old_optarg;
 }
 
 /* Parse the argument given in the command line of the application */
@@ -346,25 +356,31 @@ eal_parse_args(int argc, char **argv)
        char **argvopt;
        int option_index;
        char *prgname = argv[0];
+       const int old_optind = optind;
+       const int old_optopt = optopt;
+       const int old_optreset = optreset;
+       char * const old_optarg = optarg;
 
        argvopt = argv;
+       optind = 1;
+       optreset = 1;
 
        while ((opt = getopt_long(argc, argvopt, eal_short_options,
                                  eal_long_options, &option_index)) != EOF) {
 
-               int ret;
-
                /* getopt is not happy, stop right now */
                if (opt == '?') {
                        eal_usage(prgname);
-                       return -1;
+                       ret = -1;
+                       goto out;
                }
 
                ret = eal_parse_common_option(opt, optarg, &internal_config);
                /* common parser is not happy */
                if (ret < 0) {
                        eal_usage(prgname);
-                       return -1;
+                       ret = -1;
+                       goto out;
                }
                /* common parser handled this option */
                if (ret == 0)
@@ -388,23 +404,34 @@ eal_parse_args(int argc, char **argv)
                                        "on FreeBSD\n", opt);
                        }
                        eal_usage(prgname);
-                       return -1;
+                       ret = -1;
+                       goto out;
                }
        }
 
-       if (eal_adjust_config(&internal_config) != 0)
-               return -1;
+       if (eal_adjust_config(&internal_config) != 0) {
+               ret = -1;
+               goto out;
+       }
 
        /* sanity checks */
        if (eal_check_common_options(&internal_config) != 0) {
                eal_usage(prgname);
-               return -1;
+               ret = -1;
+               goto out;
        }
 
        if (optind >= 0)
                argv[optind-1] = prgname;
        ret = optind-1;
-       optind = 0; /* reset getopt lib */
+
+out:
+       /* restore getopt lib */
+       optind = old_optind;
+       optopt = old_optopt;
+       optreset = old_optreset;
+       optarg = old_optarg;
+
        return ret;
 }
 
@@ -468,15 +495,16 @@ rte_eal_init(int argc, char **argv)
        pthread_t thread_id;
        static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0);
        char cpuset[RTE_CPU_AFFINITY_STR_LEN];
+       char thread_name[RTE_MAX_THREAD_NAME_LEN];
+
+       /* checks if the machine is adequate */
+       rte_cpu_check_supported();
 
        if (!rte_atomic32_test_and_set(&run_once))
                return -1;
 
        thread_id = pthread_self();
 
-       if (rte_eal_log_early_init() < 0)
-               rte_panic("Cannot init early logs\n");
-
        eal_log_level_parse(argc, argv);
 
        /* set log level as early as possible */
@@ -525,9 +553,6 @@ rte_eal_init(int argc, char **argv)
        if (rte_eal_tailqs_init() < 0)
                rte_panic("Cannot init tail queues for objects\n");
 
-/*     if (rte_eal_log_init(argv[0], internal_config.syslog_facility) < 0)
-               rte_panic("Cannot init logs\n");*/
-
        if (rte_eal_alarm_init() < 0)
                rte_panic("Cannot init interrupt-handling thread\n");
 
@@ -542,7 +567,8 @@ rte_eal_init(int argc, char **argv)
 
        eal_check_mem_on_local_socket();
 
-       rte_eal_mcfg_complete();
+       if (eal_plugins_init() < 0)
+               rte_panic("Cannot init plugins\n");
 
        eal_thread_init_master(rte_config.master_lcore);
 
@@ -552,8 +578,8 @@ rte_eal_init(int argc, char **argv)
                rte_config.master_lcore, thread_id, cpuset,
                ret == 0 ? "" : "...");
 
-       if (rte_eal_dev_init() < 0)
-               rte_panic("Cannot init pmd devices\n");
+       if (rte_bus_scan())
+               rte_panic("Cannot scan the buses for devices\n");
 
        RTE_LCORE_FOREACH_SLAVE(i) {
 
@@ -573,6 +599,11 @@ rte_eal_init(int argc, char **argv)
                                     eal_thread_loop, NULL);
                if (ret != 0)
                        rte_panic("Cannot create thread\n");
+
+               /* Set thread_name for aid in debugging. */
+               snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN,
+                               "lcore-slave-%d", i);
+               rte_thread_setname(lcore_config[i].thread_id, thread_name);
        }
 
        /*
@@ -582,10 +613,19 @@ rte_eal_init(int argc, char **argv)
        rte_eal_mp_remote_launch(sync_func, NULL, SKIP_MASTER);
        rte_eal_mp_wait_lcore();
 
+       /* Probe all the buses and devices/drivers on them */
+       if (rte_bus_probe())
+               rte_panic("Cannot probe devices\n");
+
        /* Probe & Initialize PCI devices */
        if (rte_eal_pci_probe())
                rte_panic("Cannot probe PCI\n");
 
+       if (rte_eal_dev_init() < 0)
+               rte_panic("Cannot init pmd devices\n");
+
+       rte_eal_mcfg_complete();
+
        return fctret;
 }