log: support non-EAL thread
authorCunming Liang <cunming.liang@intel.com>
Tue, 17 Feb 2015 02:08:10 +0000 (10:08 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 24 Feb 2015 19:22:43 +0000 (20:22 +0100)
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>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
lib/librte_eal/common/eal_common_log.c
lib/librte_eal/common/include/rte_log.h

index cf57619..e8dc94a 100644 (file)
@@ -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);
index db1ea08..f83a0d9 100644 (file)
@@ -143,6 +143,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.
  *