AArch64: Fix HP_TIMING_DIFF computation [BZ# 29329]
authorJun Tang <juntangc@amazon.com>
Wed, 22 Feb 2023 16:45:59 +0000 (16:45 +0000)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Wed, 22 Feb 2023 16:45:59 +0000 (16:45 +0000)
Fix the computation to allow for cntfrq_el0 being larger than 1GHz.
Assume cntfrq_el0 is a multiple of 1MHz to increase the maximum
interval (1024 seconds at 1GHz).

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
sysdeps/aarch64/hp-timing.h

index c8469e3..b97e878 100644 (file)
@@ -41,7 +41,7 @@ typedef uint64_t hp_timing_t;
 #define HP_TIMING_DIFF(Diff, Start, End)                       \
 ({  hp_timing_t freq;                                          \
     __asm__ __volatile__ ("mrs %0, cntfrq_el0" : "=r" (freq)); \
-   (Diff) = ((End) - (Start)) * (UINT64_C(1000000000) / freq); \
+   (Diff) = (((End) - (Start)) * UINT64_C(1000000000 >> 6)) / (freq >> 6); \
 })
 
 #endif /* hp-timing.h */