From aa219008b5907e7c27db183ca3e6ca9248d335a3 Mon Sep 17 00:00:00 2001 From: Armin Luntzer <armin.luntzer@univie.ac.at> Date: Tue, 12 Nov 2019 11:12:37 +0100 Subject: [PATCH] CLOCKEVENT: disable scheduling when checking clock device and keep interrupts enabled --- kernel/clockevent.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/kernel/clockevent.c b/kernel/clockevent.c index 2ba32ee..a1f1475 100644 --- a/kernel/clockevent.c +++ b/kernel/clockevent.c @@ -15,6 +15,7 @@ #include <kernel/clockevent.h> #include <kernel/export.h> #include <kernel/tick.h> +#include <kernel/sched.h> #include <errno.h> @@ -242,9 +243,16 @@ void clockevents_register_device(struct clock_event_device *dev) spin_lock(&clockevents_spinlock); list_add_tail(&dev->node, &clockevent_devices); - arch_local_irq_disable(); + /* this should be safe without disabling interrupts, if not, + * we need a different strategy to calibrate the tick period of the + * device... + * + * XXX need long-time run-time testing for verifcation + */ + + sched_disable(); tick_check_device(dev); - arch_local_irq_enable(); + sched_enable(); spin_unlock(&clockevents_spinlock); } @@ -266,9 +274,16 @@ int clockevents_offer_device(void) if (dev->state != CLOCK_EVT_STATE_UNUSED) continue; - arch_local_irq_disable(); + /* this should be save without disabling interrupts, if not, + * we need a different strategy to calibrate the tick period of + * the device... + * + * XXX need long-time run-time testing for verifcation + */ + + sched_disable(); tick_check_device(dev); - arch_local_irq_enable(); + sched_enable(); return 0; } -- GitLab