summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-12-06 16:33:01 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2011-12-06 16:33:01 -0800
commit5da1dfe23aa0422d65c7f0559a52172f7dd454df (patch)
tree1c5365148608ae2c15db6cf82a03b9ef77d37f1e
parent63d5dccfdc6fe8e27ac06c0244e4a85fe5e87415 (diff)
downloadlongterm-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
-rw-r--r--queue-2.6.32/clockevents-set-noop-handler-in-clockevents_exchange_device.patch31
-rw-r--r--queue-2.6.32/series2
-rw-r--r--queue-2.6.32/tick-broadcast-stop-active-broadcast-device-when-replacing-it.patch31
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);