]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
clockevents: Set noop handler in clockevents_exchange_device()
authorThomas Gleixner <tglx@linutronix.de>
Fri, 2 Dec 2011 15:02:45 +0000 (16:02 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 9 Dec 2011 17:21:52 +0000 (09:21 -0800)
commit de28f25e8244c7353abed8de0c7792f5f883588c upstream.

If a device is shutdown, then there might be a pending interrupt,
which will be processed after we reenable interrupts, which causes the
original handler to be run. If the old handler is the (broadcast)
periodic handler the shutdown state might hang the kernel completely.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
kernel/time/clockevents.c

index 0d809ae02d609310b34c5f98051ae893f663c295..b38baff61c04e762b563677bd60e751b5cd33b00 100644 (file)
@@ -221,6 +221,7 @@ void clockevents_exchange_device(struct clock_event_device *old,
         * released list and do a notify add later.
         */
        if (old) {
+               old->event_handler = clockevents_handle_noop;
                clockevents_set_mode(old, CLOCK_EVT_MODE_UNUSED);
                list_del(&old->list);
                list_add(&old->list, &clockevents_released);