diff options
-rw-r--r-- | kernel/time/tick-broadcast.c | 4 | ||||
-rw-r--r-- | kernel/time/tick-common.c | 1 |
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 | */ |
67 | int tick_check_broadcast_device(struct clock_event_device *dev) | 67 | int 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); |