RTE_ALIGN_MUL_NEAR is a macro so the cycle arguement could get evaluated twice causing some potential skew. Fix by computing value once.
Suggested by patch to fix side effects. Fixes: 5cbd14b3e5f9 ("eal: roundup TSC frequency when estimating") Cc: pbhagavat...@marvell.com Signed-off-by: Stephen Hemminger <step...@networkplumber.org> --- lib/eal/common/eal_common_timer.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/eal/common/eal_common_timer.c b/lib/eal/common/eal_common_timer.c index 5686a5102b66..05614b0503cf 100644 --- a/lib/eal/common/eal_common_timer.c +++ b/lib/eal/common/eal_common_timer.c @@ -42,10 +42,14 @@ estimate_tsc_freq(void) RTE_LOG(WARNING, EAL, "WARNING: TSC frequency estimated roughly" " - clock timings may be less accurate.\n"); /* assume that the rte_delay_us_sleep() will sleep for 1 second */ - uint64_t start = rte_rdtsc(); + uint64_t start, elapsed; + + start = rte_rdtsc(); rte_delay_us_sleep(US_PER_S); + elapsed = rte_rdtsc() - start; + /* Round up to 10Mhz. 1E7 ~ 10Mhz */ - return RTE_ALIGN_MUL_NEAR(rte_rdtsc() - start, CYC_PER_10MHZ); + return RTE_ALIGN_MUL_NEAR(elapsed, CYC_PER_10MHZ); } void -- 2.39.2