| From de28f25e8244c7353abed8de0c7792f5f883588c Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Fri, 2 Dec 2011 16:02:45 +0100 |
| Subject: clockevents: Set noop handler in clockevents_exchange_device() |
| |
| From: Thomas Gleixner <tglx@linutronix.de> |
| |
| 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 | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/kernel/time/clockevents.c |
| +++ b/kernel/time/clockevents.c |
| @@ -221,6 +221,7 @@ void clockevents_exchange_device(struct |
| * 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); |