aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/time/tick-broadcast.c4
-rw-r--r--kernel/time/tick-common.c1
2 files changed, 5 insertions, 0 deletions
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
index 6e23fde83dbe..61d00a8cdf2f 100644
--- a/kernel/time/tick-broadcast.c
+++ b/kernel/time/tick-broadcast.c
@@ -66,6 +66,8 @@ static void tick_broadcast_start_periodic(struct clock_event_device *bc)
66 */ 66 */
67int tick_check_broadcast_device(struct clock_event_device *dev) 67int tick_check_broadcast_device(struct clock_event_device *dev)
68{ 68{
69 struct clock_event_device *cur = tick_broadcast_device.evtdev;
70
69 if ((dev->features & CLOCK_EVT_FEAT_DUMMY) || 71 if ((dev->features & CLOCK_EVT_FEAT_DUMMY) ||
70 (tick_broadcast_device.evtdev && 72 (tick_broadcast_device.evtdev &&
71 tick_broadcast_device.evtdev->rating >= dev->rating) || 73 tick_broadcast_device.evtdev->rating >= dev->rating) ||
@@ -73,6 +75,8 @@ int tick_check_broadcast_device(struct clock_event_device *dev)
73 return 0; 75 return 0;
74 76
75 clockevents_exchange_device(tick_broadcast_device.evtdev, dev); 77 clockevents_exchange_device(tick_broadcast_device.evtdev, dev);
78 if (cur)
79 cur->event_handler = clockevents_handle_noop;
76 tick_broadcast_device.evtdev = dev; 80 tick_broadcast_device.evtdev = dev;
77 if (!cpumask_empty(tick_broadcast_mask)) 81 if (!cpumask_empty(tick_broadcast_mask))
78 tick_broadcast_start_periodic(dev); 82 tick_broadcast_start_periodic(dev);
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
index 74413e396acc..6176a3e45709 100644
--- a/kernel/time/tick-common.c
+++ b/kernel/time/tick-common.c
@@ -323,6 +323,7 @@ static void tick_shutdown(unsigned int *cpup)
323 */ 323 */
324 dev->mode = CLOCK_EVT_MODE_UNUSED; 324 dev->mode = CLOCK_EVT_MODE_UNUSED;
325 clockevents_exchange_device(dev, NULL); 325 clockevents_exchange_device(dev, NULL);
326 dev->event_handler = clockevents_handle_noop;
326 td->evtdev = NULL; 327 td->evtdev = NULL;
327 } 328 }
328 raw_spin_unlock_irqrestore(&tick_device_lock, flags); 329 raw_spin_unlock_irqrestore(&tick_device_lock, flags);