diff options
-rw-r--r-- | core/interrupts.c | 2 | ||||
-rw-r--r-- | core/opal.c | 2 | ||||
-rw-r--r-- | core/timer.c | 5 | ||||
-rw-r--r-- | include/timer.h | 2 |
4 files changed, 6 insertions, 5 deletions
diff --git a/core/interrupts.c b/core/interrupts.c index dfccb32d..70614a07 100644 --- a/core/interrupts.c +++ b/core/interrupts.c @@ -293,7 +293,7 @@ static int64_t opal_handle_interrupt(uint32_t isn, uint64_t *outstanding_event_m int64_t rc = OPAL_SUCCESS; /* We run the timers first */ - check_timers(); + check_timers(true); /* No source ? return */ if (!is || !is->ops->interrupt) { diff --git a/core/opal.c b/core/opal.c index 0dab3f70..5e1c742e 100644 --- a/core/opal.c +++ b/core/opal.c @@ -280,7 +280,7 @@ void opal_run_pollers(void) struct opal_poll_entry *poll_ent; /* We run the timers first */ - check_timers(); + check_timers(false); /* The pollers are run lokelessly, see comment in opal_del_poller */ list_for_each(&opal_pollers, poll_ent, link) diff --git a/core/timer.c b/core/timer.c index a4fa8b89..40526eea 100644 --- a/core/timer.c +++ b/core/timer.c @@ -198,7 +198,7 @@ static void __check_timers(uint64_t now) } } -void check_timers(void) +void check_timers(bool from_interrupt) { struct timer *t; uint64_t now = mftb(); @@ -215,7 +215,8 @@ void check_timers(void) /* Take lock and try again */ lock(&timer_lock); - __check_poll_timers(); + if (!from_interrupt) + __check_poll_timers(); __check_timers(now); unlock(&timer_lock); } diff --git a/include/timer.h b/include/timer.h index 17965087..a1132e0b 100644 --- a/include/timer.h +++ b/include/timer.h @@ -78,7 +78,7 @@ extern void cancel_timer(struct timer *t); extern void cancel_timer_async(struct timer *t); /* Run the timers */ -extern void check_timers(void); +extern void check_timers(bool from_interrupt); /* Core init */ void late_init_timers(void); |