eal: add telemetry callbacks
[dpdk.git] / lib / librte_eal / freebsd / eal.c
index 80dc9aa..f681bc7 100644 (file)
@@ -41,9 +41,9 @@
 #include <rte_devargs.h>
 #include <rte_version.h>
 #include <rte_vfio.h>
-#include <rte_option.h>
 #include <rte_atomic.h>
 #include <malloc_heap.h>
+#include <rte_telemetry.h>
 
 #include "eal_private.h"
 #include "eal_thread.h"
@@ -52,6 +52,7 @@
 #include "eal_hugepages.h"
 #include "eal_options.h"
 #include "eal_memcfg.h"
+#include "eal_trace.h"
 
 #define MEMSIZE_IF_NO_HUGE_PAGE (64ULL * 1024ULL * 1024ULL)
 
@@ -535,20 +536,12 @@ eal_parse_args(int argc, char **argv)
        argvopt = argv;
        optind = 1;
        optreset = 1;
-       opterr = 0;
 
        while ((opt = getopt_long(argc, argvopt, eal_short_options,
                                  eal_long_options, &option_index)) != EOF) {
 
-               /*
-                * getopt didn't recognise the option, lets parse the
-                * registered options to see if the flag is valid
-                */
+               /* getopt didn't recognise the option */
                if (opt == '?') {
-                       ret = rte_option_parse(argv[optind-1]);
-                       if (ret == 0)
-                               continue;
-
                        eal_usage(prgname);
                        ret = -1;
                        goto out;
@@ -724,6 +717,9 @@ rte_eal_init(int argc, char **argv)
 
        eal_reset_internal_config(&internal_config);
 
+       /* clone argv to report out later in telemetry */
+       eal_save_args(argc, argv);
+
        /* set log level as early as possible */
        eal_log_level_parse(argc, argv);
 
@@ -751,6 +747,13 @@ rte_eal_init(int argc, char **argv)
                return -1;
        }
 
+       if (eal_trace_init() < 0) {
+               rte_eal_init_alert("Cannot init trace");
+               rte_errno = EFAULT;
+               rte_atomic32_clear(&run_once);
+               return -1;
+       }
+
        if (eal_option_device_parse()) {
                rte_errno = ENODEV;
                rte_atomic32_clear(&run_once);
@@ -952,12 +955,17 @@ rte_eal_init(int argc, char **argv)
                rte_eal_init_alert("Cannot clear runtime directory\n");
                return -1;
        }
+       if (!internal_config.no_telemetry) {
+               const char *error_str;
+               if (rte_telemetry_init(rte_eal_get_runtime_dir(),
+                               &error_str) != 0) {
+                       rte_eal_init_alert(error_str);
+                       return -1;
+               }
+       }
 
        eal_mcfg_complete();
 
-       /* Call each registered callback, if enabled */
-       rte_option_init();
-
        return fctret;
 }
 
@@ -966,6 +974,8 @@ rte_eal_cleanup(void)
 {
        rte_service_finalize();
        rte_mp_channel_cleanup();
+       rte_trace_save();
+       eal_trace_fini();
        eal_cleanup_config(&internal_config);
        return 0;
 }