[dpdk-dev,v3,10/16] log: fix the gap to support non-EAL thread
Commit Message
For those non-EAL thread, *_lcore_id* is invalid and probably larger than RTE_MAX_LCORE.
The patch adds the check and allows only EAL thread using EAL per thread log level and log type.
Others shares the global log level.
Signed-off-by: Cunming Liang <cunming.liang@intel.com>
---
lib/librte_eal/common/eal_common_log.c | 17 +++++++++++++++--
lib/librte_eal/common/include/rte_log.h | 5 +++++
2 files changed, 20 insertions(+), 2 deletions(-)
@@ -193,11 +193,20 @@ rte_set_log_type(uint32_t type, int enable)
rte_logs.type &= (~type);
}
+/* Get global log type */
+uint32_t
+rte_get_log_type(void)
+{
+ return rte_logs.type;
+}
+
/* 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;
}
@@ -206,6 +215,8 @@ 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;
}
@@ -265,8 +276,10 @@ rte_vlog(__attribute__((unused)) uint32_t level,
/* save loglevel and logtype in a global per-lcore variable */
lcore_id = rte_lcore_id();
- log_cur_msg[lcore_id].loglevel = level;
- log_cur_msg[lcore_id].logtype = logtype;
+ if (lcore_id < RTE_MAX_LCORE) {
+ log_cur_msg[lcore_id].loglevel = level;
+ log_cur_msg[lcore_id].logtype = logtype;
+ }
ret = vfprintf(f, format, ap);
fflush(f);
@@ -144,6 +144,11 @@ uint32_t rte_get_log_level(void);
void rte_set_log_type(uint32_t type, int enable);
/**
+ * Get the global log type.
+ */
+uint32_t rte_get_log_type(void);
+
+/**
* Get the current loglevel for the message being processed.
*
* Before calling the user-defined stream for logging, the log