
Hi Simon,
On Mon, Jul 13, 2020 at 10:25 AM Simon Glass sjg@chromium.org wrote:
Hi Bin,
On Sun, 12 Jul 2020 at 20:13, Bin Meng bmeng.cn@gmail.com wrote:
On Fri, Jul 10, 2020 at 8:49 AM Simon Glass sjg@chromium.org wrote:
The current get_timer_us() uses 64-bit arithmetic on 32-bit machines. When implementing microsecond-level timeouts, 32-bits is plenty. Add a new function that uses an unsigned long. On 64-bit machines this is still 64-bit, but this doesn't introduce a penalty. On 32-bit machines it is more efficient.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v3:
- Expand the commit message and function comment
include/time.h | 11 +++++++++++ lib/time.c | 5 +++++ 2 files changed, 16 insertions(+)
diff --git a/include/time.h b/include/time.h index e99f9c8012..3f00e68713 100644 --- a/include/time.h +++ b/include/time.h @@ -17,6 +17,17 @@ unsigned long get_timer(unsigned long base); unsigned long timer_get_us(void); uint64_t get_timer_us(uint64_t base);
+/**
- get_timer_us_long() - Get the number of elapsed microseconds
- This uses 32-bit arithmetic on 32-bit machines, which is enough to handle
- delays of over an hour. For 64-bit machines it uses a 64-bit value.
- *@base: Base time to consider
- *@return elapsed time since @base
- */
+unsigned long get_timer_us_long(unsigned long base);
/*
- timer_test_add_offset()
diff --git a/lib/time.c b/lib/time.c index 65db0f6cda..47f8c84327 100644 --- a/lib/time.c +++ b/lib/time.c @@ -152,6 +152,11 @@ uint64_t __weak get_timer_us(uint64_t base) return tick_to_time_us(get_ticks()) - base; }
+unsigned long __weak get_timer_us_long(unsigned long base) +{
return timer_get_us() - base;
+}
unsigned long __weak notrace timer_get_us(void) { return tick_to_time(get_ticks() * 1000); --
Reviewed-by: Bin Meng bmeng.cn@gmail.com
Some day we should clean up the timer APIs. We have get_timer_us(), and now get_timer_us_long(), but we also have timer_get_us() that returns long value!
Yes, but that one returns the monotonic time, so isn't so easy for timeouts. Perhaps we should remove it since get_timer_us_long(0) does the same thing?
Yes, I think so.
Regards, Bin