X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Fcommon%2Feal_common_log.c;h=a27192620d9eff8ddfda6d58ad4d1141813fe992;hb=08f683174e9487654a4720b4b7540f36a07b0918;hp=08b31e245fcb9b9a10123cbffb6d53d8cca023c0;hpb=369991d997e4abdee355e19ffbb41a4d246cafa2;p=dpdk.git diff --git a/lib/librte_eal/common/eal_common_log.c b/lib/librte_eal/common/eal_common_log.c index 08b31e245f..a27192620d 100644 --- a/lib/librte_eal/common/eal_common_log.c +++ b/lib/librte_eal/common/eal_common_log.c @@ -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));