at91: warn if irqs are enabled in set_next_event
authorUwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
Thu, 20 Nov 2008 10:58:36 +0000 (11:58 +0100)
committerUwe Kleine-Koenig <ukl@pengutronix.de>
Fri, 12 Dec 2008 10:17:08 +0000 (11:17 +0100)
Thomas claims that irqs are disabled when set_next_event is called.  But
David and Remy claim they saw irqs being enabled here.  As both sides
don't seem to have time to investigate here, start with a warning that
might trigger if the problem still exists.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-By: David Brownell <dbrownell@users.sourceforge.net>
Cc: Bill Gatliff <bgat@billgatliff.com>
Acked-By: Remy Bohmer <linux@bohmer.net>
Cc: Thomas Gleixner <tglx@linutronix.de>
arch/arm/mach-at91/at91rm9200_time.c

index a72e798a2a40eede144f22d85eb5204f0114ea18..d140eae53ded281bcc9f33fc6b991b1086c5fd55 100644 (file)
@@ -141,6 +141,15 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
        /* Use "raw" primitives so we behave correctly on RT kernels. */
        raw_local_irq_save(flags);
 
+       /*
+        * According to Thomas Gleixner irqs are already disabled here.  Simply
+        * removing raw_local_irq_save above (and the matching
+        * raw_local_irq_restore) was not accepted.  See
+        * http://thread.gmane.org/gmane.linux.ports.arm.kernel/41174
+        * So for now (2008-11-20) just warn once if irqs were not disabled ...
+        */
+       WARN_ON_ONCE(!raw_irqs_disabled_flags(flags));
+
        /* The alarm IRQ uses absolute time (now+delta), not the relative
         * time (delta) in our calling convention.  Like all clockevents
         * using such "match" hardware, we have a race to defend against.