After getting TSC information from cpuid instruction,
some values must be multiplied and divided.
We must multiply first to get the most accurate value.
Example:
before: 1000000000 * (23 / 10) = 2 GHz
after: 1000000000 * 23 / 10 = 2.3 GHz
Bugzilla ID: 1869
Fixes: ad3516bb4ae1 ("eal/x86: implement arch-specific TSC freq query")
Cc: [email protected]
Reported-by: Luigi Rizzo <[email protected]>
Signed-off-by: Thomas Monjalon <[email protected]>
---
lib/eal/x86/rte_cycles.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/eal/x86/rte_cycles.c b/lib/eal/x86/rte_cycles.c
index f147a5231d..e8e805e710 100644
--- a/lib/eal/x86/rte_cycles.c
+++ b/lib/eal/x86/rte_cycles.c
@@ -145,7 +145,7 @@ get_tsc_freq_arch(void)
/* EBX : TSC/Crystal ratio, ECX : Crystal Hz */
if (b && c)
- return c * (b / a);
+ return (uint64_t)c * b / a;
}
#ifdef RTE_TOOLCHAIN_MSVC
--
2.52.0