From 6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Mon, 27 Mar 2017 16:38:01 -0400 Subject: sched: Move timer dispatch loop to board code Rename sched_timer_kick() to sched_timer_dispatch() and move its loop into its callers in the board code. This eliminates the need to export timer_try_set_next() from the board code. Signed-off-by: Kevin O'Connor --- src/generic/timer.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/generic/timer.c') diff --git a/src/generic/timer.c b/src/generic/timer.c index 5185ed54..fba56051 100644 --- a/src/generic/timer.c +++ b/src/generic/timer.c @@ -49,7 +49,7 @@ static uint32_t timer_repeat_until; // Set the next timer wake time (in absolute clock ticks) or return 1 // if the next timer is too close to schedule. Caller must disable // irqs. -uint8_t +static int timer_try_set_next(unsigned int next) { uint32_t now = timer_read_time(); @@ -84,6 +84,20 @@ fail: shutdown("Rescheduled timer in the past"); } +// Invoke timers - called from board irq code. +void +timer_dispatch_many(void) +{ + for (;;) { + uint32_t next_waketime = sched_timer_dispatch(); + + // Schedule next timer event (or run next timer if it's ready) + int res = timer_try_set_next(next_waketime); + if (res) + break; + } +} + // Periodic background task that temporarily boosts priority of // timers. This helps prioritize timers when tasks are idling. static void -- cgit v1.2.3-70-g09d2