Hi, On 02/02/2015 03:02 AM, Cunming Liang wrote: > 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 >
Wouldn't it be better to change the variable: static struct log_cur_msg log_cur_msg[RTE_MAX_LCORE]; into a pthread (tls) variable? With your patch, the log level and log type are not saved for non-EAL threads. If TLS were used, I think it would work in any case. Regards, Olivier