summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/interrupts.c2
-rw-r--r--core/opal.c2
-rw-r--r--core/timer.c5
-rw-r--r--include/timer.h2
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);
OpenPOWER on IntegriCloud