On 12/15/20 9:09 AM, Peter Maydell wrote: > The clock_get_ns() API claims to return the period of a clock in > nanoseconds. Unfortunately since it returns an integer and a > clock's period is represented in units of 2^-32 nanoseconds, > the result is often an approximation, and calculating a clock > expiry deadline by multiplying clock_get_ns() by a number-of-ticks > is unacceptably inaccurate. > > Introduce a new API clock_ticks_to_ns() which returns the number > of nanoseconds it takes the clock to make a given number of ticks. > This function can do the complete calculation internally and > will thus give a more accurate result. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> > --- > The 64x64->128 multiply is a bit painful for 32-bit and I > guess in theory since we know we only want bits [95:32] > of the result we could special-case it, but TBH I don't > think 32-bit hosts merit much optimization effort these days. > > Changes in v2: saturate the result to INT64_MAX. > --- > docs/devel/clocks.rst | 29 +++++++++++++++++++++++++++++ > include/hw/clock.h | 41 +++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 70 insertions(+)
Reviewed-by: Richard Henderson <richard.hender...@linaro.org> r~