eal: add functions for previous power of 2 alignment
[dpdk.git] / lib / librte_eal / common / eal_common_log.c
index 08b31e2..a271926 100644 (file)
@@ -23,6 +23,10 @@ struct rte_logs rte_logs = {
        .file = NULL,
 };
 
+/** Global list of valid EAL log level options */
+struct rte_eal_opt_loglevel_list opt_loglevel_list =
+       TAILQ_HEAD_INITIALIZER(opt_loglevel_list);
+
 /* Stream to use for logging if rte_logs.file is NULL */
 static FILE *default_log_stream;
 
@@ -110,6 +114,8 @@ rte_log_set_level_regexp(const char *pattern, uint32_t level)
                        rte_logs.dynamic_types[i].loglevel = level;
        }
 
+       regfree(&r);
+
        return 0;
 }
 
@@ -152,7 +158,7 @@ __rte_log_register(const char *name, int id)
                return -ENOMEM;
 
        rte_logs.dynamic_types[id].name = dup_name;
-       rte_logs.dynamic_types[id].loglevel = RTE_LOG_DEBUG;
+       rte_logs.dynamic_types[id].loglevel = RTE_LOG_INFO;
 
        return id;
 }
@@ -184,32 +190,65 @@ rte_log_register(const char *name)
        return ret;
 }
 
+/* Register an extended log type and try to pick its level from EAL options */
+int __rte_experimental
+rte_log_register_type_and_pick_level(const char *name, uint32_t level_def)
+{
+       struct rte_eal_opt_loglevel *opt_ll;
+       uint32_t level = level_def;
+       int type;
+
+       type = rte_log_register(name);
+       if (type < 0)
+               return type;
+
+       TAILQ_FOREACH(opt_ll, &opt_loglevel_list, next) {
+               regex_t r;
+
+               if (opt_ll->level > RTE_LOG_DEBUG)
+                       continue;
+
+               if (regcomp(&r, opt_ll->re_type, 0) != 0)
+                       continue;
+
+               if (regexec(&r, name, 0, NULL, 0) == 0)
+                       level = opt_ll->level;
+
+               regfree(&r);
+       }
+
+       rte_logs.dynamic_types[type].loglevel = level;
+
+       return type;
+}
+
 struct logtype {
        uint32_t log_id;
        const char *logtype;
 };
 
 static const struct logtype logtype_strings[] = {
-       {RTE_LOGTYPE_EAL,        "eal"},
-       {RTE_LOGTYPE_MALLOC,     "malloc"},
-       {RTE_LOGTYPE_RING,       "ring"},
-       {RTE_LOGTYPE_MEMPOOL,    "mempool"},
-       {RTE_LOGTYPE_TIMER,      "timer"},
+       {RTE_LOGTYPE_EAL,        "lib.eal"},
+       {RTE_LOGTYPE_MALLOC,     "lib.malloc"},
+       {RTE_LOGTYPE_RING,       "lib.ring"},
+       {RTE_LOGTYPE_MEMPOOL,    "lib.mempool"},
+       {RTE_LOGTYPE_TIMER,      "lib.timer"},
        {RTE_LOGTYPE_PMD,        "pmd"},
-       {RTE_LOGTYPE_HASH,       "hash"},
-       {RTE_LOGTYPE_LPM,        "lpm"},
-       {RTE_LOGTYPE_KNI,        "kni"},
-       {RTE_LOGTYPE_ACL,        "acl"},
-       {RTE_LOGTYPE_POWER,      "power"},
-       {RTE_LOGTYPE_METER,      "meter"},
-       {RTE_LOGTYPE_SCHED,      "sched"},
-       {RTE_LOGTYPE_PORT,       "port"},
-       {RTE_LOGTYPE_TABLE,      "table"},
-       {RTE_LOGTYPE_PIPELINE,   "pipeline"},
-       {RTE_LOGTYPE_MBUF,       "mbuf"},
-       {RTE_LOGTYPE_CRYPTODEV,  "cryptodev"},
-       {RTE_LOGTYPE_EFD,        "efd"},
-       {RTE_LOGTYPE_EVENTDEV,   "eventdev"},
+       {RTE_LOGTYPE_HASH,       "lib.hash"},
+       {RTE_LOGTYPE_LPM,        "lib.lpm"},
+       {RTE_LOGTYPE_KNI,        "lib.kni"},
+       {RTE_LOGTYPE_ACL,        "lib.acl"},
+       {RTE_LOGTYPE_POWER,      "lib.power"},
+       {RTE_LOGTYPE_METER,      "lib.meter"},
+       {RTE_LOGTYPE_SCHED,      "lib.sched"},
+       {RTE_LOGTYPE_PORT,       "lib.port"},
+       {RTE_LOGTYPE_TABLE,      "lib.table"},
+       {RTE_LOGTYPE_PIPELINE,   "lib.pipeline"},
+       {RTE_LOGTYPE_MBUF,       "lib.mbuf"},
+       {RTE_LOGTYPE_CRYPTODEV,  "lib.cryptodev"},
+       {RTE_LOGTYPE_EFD,        "lib.efd"},
+       {RTE_LOGTYPE_EVENTDEV,   "lib.eventdev"},
+       {RTE_LOGTYPE_GSO,        "lib.gso"},
        {RTE_LOGTYPE_USER1,      "user1"},
        {RTE_LOGTYPE_USER2,      "user2"},
        {RTE_LOGTYPE_USER3,      "user3"},
@@ -227,11 +266,7 @@ rte_log_init(void)
 {
        uint32_t i;
 
-#if RTE_LOG_LEVEL >= RTE_LOG_DEBUG
-       rte_log_set_global_level(RTE_LOG_INFO);
-#else
-       rte_log_set_global_level(RTE_LOG_LEVEL);
-#endif
+       rte_log_set_global_level(RTE_LOG_DEBUG);
 
        rte_logs.dynamic_types = calloc(RTE_LOGTYPE_FIRST_EXT_ID,
                sizeof(struct rte_log_dynamic_type));