[dpdk-dev] [PATCH v4 11/17] log: fix the gap to support non-EAL thread
Olivier MATZ
olivier.matz at 6wind.com
Sun Feb 8 21:01:06 CET 2015
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
More information about the dev
mailing list