From: Maxime Leroy Date: Mon, 9 May 2016 16:13:36 +0000 (+0200) Subject: log: fix level/type retrieving from a standard thread X-Git-Tag: spdx-start~6904 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=5c37334a3d2218180135bfe4716d35e0cfb293ba;p=dpdk.git log: fix level/type retrieving from a standard thread The functions rte_log_cur_msg_loglevel() and rte_log_cur_msg_logtype() return the current log level/type for the message being processed. They are used when implementing a user-defined logging stream. The current log levels and types were stored in a table indexed by the lcore_id, only returning a valid value for dataplane threads. Setting and getting these values in a non dataplane thread was ignored, using the global value instead. To fix this issue, a per-thread variable could be used (with RTE_DEFINE_PER_LCORE), allowing any pthread to set and retrieve its current log level or type. Signed-off-by: Maxime Leroy Signed-off-by: Olivier Matz Acked-by: David Marchand --- diff --git a/lib/librte_eal/common/eal_common_log.c b/lib/librte_eal/common/eal_common_log.c index 64aa79fb7d..9526095c1f 100644 --- a/lib/librte_eal/common/eal_common_log.c +++ b/lib/librte_eal/common/eal_common_log.c @@ -98,9 +98,10 @@ static int history_enabled = 1; struct log_cur_msg { uint32_t loglevel; /**< log level - see rte_log.h */ uint32_t logtype; /**< log type - see rte_log.h */ -} __rte_cache_aligned; -static struct log_cur_msg log_cur_msg[RTE_MAX_LCORE]; /**< per core log */ +}; + /* per core log */ +static RTE_DEFINE_PER_LCORE(struct log_cur_msg, log_cur_msg); /* default logs */ @@ -205,21 +206,13 @@ rte_get_log_type(void) /* get the current loglevel for the message beeing processed */ int rte_log_cur_msg_loglevel(void) { - unsigned lcore_id; - lcore_id = rte_lcore_id(); - if (lcore_id >= RTE_MAX_LCORE) - return rte_get_log_level(); - return log_cur_msg[lcore_id].loglevel; + return RTE_PER_LCORE(log_cur_msg).loglevel; } /* get the current logtype for the message beeing processed */ int rte_log_cur_msg_logtype(void) { - unsigned lcore_id; - lcore_id = rte_lcore_id(); - if (lcore_id >= RTE_MAX_LCORE) - return rte_get_log_type(); - return log_cur_msg[lcore_id].logtype; + return RTE_PER_LCORE(log_cur_msg).logtype; } /* Dump log history to file */ @@ -273,17 +266,13 @@ rte_vlog(uint32_t level, uint32_t logtype, const char *format, va_list ap) { int ret; FILE *f = rte_logs.file; - unsigned lcore_id; if ((level > rte_logs.level) || !(logtype & rte_logs.type)) return 0; /* save loglevel and logtype in a global per-lcore variable */ - lcore_id = rte_lcore_id(); - if (lcore_id < RTE_MAX_LCORE) { - log_cur_msg[lcore_id].loglevel = level; - log_cur_msg[lcore_id].logtype = logtype; - } + RTE_PER_LCORE(log_cur_msg).loglevel = level; + RTE_PER_LCORE(log_cur_msg).logtype = logtype; ret = vfprintf(f, format, ap); fflush(f);