From 2a178702c00f2a8b547358fedc7107d376f8825e Mon Sep 17 00:00:00 2001 From: Reshma Pattan Date: Thu, 5 Dec 2019 17:18:11 +0000 Subject: [PATCH] latency: fix calculation for multi-thread Make latency calculation multithread safe by using spinlock. Fixes: 5cd3cac9ed ("latency: added new library for latency stats") Cc: stable@dpdk.org Signed-off-by: Reshma Pattan --- lib/librte_latencystats/rte_latencystats.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/librte_latencystats/rte_latencystats.c b/lib/librte_latencystats/rte_latencystats.c index 98e018939e..ba2fff3bcb 100644 --- a/lib/librte_latencystats/rte_latencystats.c +++ b/lib/librte_latencystats/rte_latencystats.c @@ -42,6 +42,7 @@ struct rte_latency_stats { float avg_latency; /**< Average latency in nano seconds */ float max_latency; /**< Maximum latency in nano seconds */ float jitter; /** Latency variation */ + rte_spinlock_t lock; /** Latency calculation lock */ }; static struct rte_latency_stats *glob_stats; @@ -164,6 +165,7 @@ calc_latency(uint16_t pid __rte_unused, latency[cnt++] = now - pkts[i]->timestamp; } + rte_spinlock_lock(&glob_stats->lock); for (i = 0; i < cnt; i++) { /* * The jitter is calculated as statistical mean of interpacket @@ -193,6 +195,7 @@ calc_latency(uint16_t pid __rte_unused, alpha * (latency[i] - glob_stats->avg_latency); prev_latency = latency[i]; } + rte_spinlock_unlock(&glob_stats->lock); return nb_pkts; } @@ -223,6 +226,7 @@ rte_latencystats_init(uint64_t app_samp_intvl, } glob_stats = mz->addr; + rte_spinlock_init(&glob_stats->lock); samp_intvl = app_samp_intvl * latencystat_cycles_per_ns(); /** Register latency stats with stats library */ -- 2.20.1