From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olivier MATZ Subject: Re: [PATCH v4 11/17] log: fix the gap to support non-EAL thread Date: Sun, 08 Feb 2015 21:01:06 +0100 Message-ID: <54D7C082.80803@6wind.com> References: <1422491072-5114-1-git-send-email-cunming.liang@intel.com> <1422842559-13617-1-git-send-email-cunming.liang@intel.com> <1422842559-13617-12-git-send-email-cunming.liang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit To: Cunming Liang , dev-VfR2kkLFssw@public.gmane.org Return-path: In-Reply-To: <1422842559-13617-12-git-send-email-cunming.liang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" 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 > --- > 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