From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.droids-corp.org (zoll.droids-corp.org [94.23.50.67]) by dpdk.org (Postfix) with ESMTP id 7B8265960 for ; Sun, 8 Feb 2015 21:01:20 +0100 (CET) Received: from was59-1-82-226-113-214.fbx.proxad.net ([82.226.113.214] helo=[192.168.0.10]) by mail.droids-corp.org with esmtpsa (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1YKY6F-0005Q1-AY; Sun, 08 Feb 2015 21:05:07 +0100 Message-ID: <54D7C082.80803@6wind.com> Date: Sun, 08 Feb 2015 21:01:06 +0100 From: Olivier MATZ User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.3.0 MIME-Version: 1.0 To: Cunming Liang , dev@dpdk.org 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> In-Reply-To: <1422842559-13617-12-git-send-email-cunming.liang@intel.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v4 11/17] log: fix the gap to support non-EAL thread X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Feb 2015 20:01:20 -0000 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