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 at 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(-)

diff --git a/lib/librte_eal/common/eal_common_log.c 
b/lib/librte_eal/common/eal_common_log.c
index cf57619..e8dc94a 100644
--- a/lib/librte_eal/common/eal_common_log.c
+++ b/lib/librte_eal/common/eal_common_log.c
@@ -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);
diff --git a/lib/librte_eal/common/include/rte_log.h 
b/lib/librte_eal/common/include/rte_log.h
index db1ea08..f83a0d9 100644
--- a/lib/librte_eal/common/include/rte_log.h
+++ b/lib/librte_eal/common/include/rte_log.h
@@ -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
-- 
1.8.1.4

Reply via email to