diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-12-06 16:33:01 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-12-06 16:33:01 -0800 |
commit | 5da1dfe23aa0422d65c7f0559a52172f7dd454df (patch) | |
tree | 1c5365148608ae2c15db6cf82a03b9ef77d37f1e | |
parent | 63d5dccfdc6fe8e27ac06c0244e4a85fe5e87415 (diff) | |
download | longterm-queue-2.6.32-5da1dfe23aa0422d65c7f0559a52172f7dd454df.tar.gz |
32 patches
added patches:
clockevents-set-noop-handler-in-clockevents_exchange_device.patch
tick-broadcast-stop-active-broadcast-device-when-replacing-it.patch
3 files changed, 64 insertions, 0 deletions
diff --git a/queue-2.6.32/clockevents-set-noop-handler-in-clockevents_exchange_device.patch b/queue-2.6.32/clockevents-set-noop-handler-in-clockevents_exchange_device.patch new file mode 100644 index 0000000..08bc013 --- /dev/null +++ b/queue-2.6.32/clockevents-set-noop-handler-in-clockevents_exchange_device.patch @@ -0,0 +1,31 @@ +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); diff --git a/queue-2.6.32/series b/queue-2.6.32/series index 8450494..b00b6a3 100644 --- a/queue-2.6.32/series +++ b/queue-2.6.32/series @@ -23,3 +23,5 @@ sched-x86-avoid-unnecessary-overflow-in-sched_clock.patch x86-mpparse-account-for-bus-types-other-than-isa-and-pci.patch oprofile-x86-fix-crash-when-unloading-module-nmi-timer-mode.patch genirq-fix-race-condition-when-stopping-the-irq-thread.patch +tick-broadcast-stop-active-broadcast-device-when-replacing-it.patch +clockevents-set-noop-handler-in-clockevents_exchange_device.patch diff --git a/queue-2.6.32/tick-broadcast-stop-active-broadcast-device-when-replacing-it.patch b/queue-2.6.32/tick-broadcast-stop-active-broadcast-device-when-replacing-it.patch new file mode 100644 index 0000000..9789404 --- /dev/null +++ b/queue-2.6.32/tick-broadcast-stop-active-broadcast-device-when-replacing-it.patch @@ -0,0 +1,31 @@ +From c1be84309c58b1e7c6d626e28fba41a22b364c3d Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner <tglx@linutronix.de> +Date: Fri, 2 Dec 2011 12:34:16 +0100 +Subject: tick-broadcast: Stop active broadcast device when replacing it + +From: Thomas Gleixner <tglx@linutronix.de> + +commit c1be84309c58b1e7c6d626e28fba41a22b364c3d upstream. + +When a better rated broadcast device is installed, then the current +active device is not disabled, which results in two running broadcast +devices. + +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + kernel/time/tick-broadcast.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kernel/time/tick-broadcast.c ++++ b/kernel/time/tick-broadcast.c +@@ -72,7 +72,7 @@ int tick_check_broadcast_device(struct c + (dev->features & CLOCK_EVT_FEAT_C3STOP)) + return 0; + +- clockevents_exchange_device(NULL, dev); ++ clockevents_exchange_device(tick_broadcast_device.evtdev, dev); + tick_broadcast_device.evtdev = dev; + if (!cpumask_empty(tick_get_broadcast_mask())) + tick_broadcast_start_periodic(dev); |