|
@@ -66,6 +66,8 @@ static void tick_broadcast_start_periodic(struct clock_event_device *bc)
|
|
|
*/
|
|
|
int tick_check_broadcast_device(struct clock_event_device *dev)
|
|
|
{
|
|
|
+ struct clock_event_device *cur = tick_broadcast_device.evtdev;
|
|
|
+
|
|
|
if ((dev->features & CLOCK_EVT_FEAT_DUMMY) ||
|
|
|
(tick_broadcast_device.evtdev &&
|
|
|
tick_broadcast_device.evtdev->rating >= dev->rating) ||
|
|
@@ -73,6 +75,8 @@ int tick_check_broadcast_device(struct clock_event_device *dev)
|
|
|
return 0;
|
|
|
|
|
|
clockevents_exchange_device(tick_broadcast_device.evtdev, dev);
|
|
|
+ if (cur)
|
|
|
+ cur->event_handler = clockevents_handle_noop;
|
|
|
tick_broadcast_device.evtdev = dev;
|
|
|
if (!cpumask_empty(tick_broadcast_mask))
|
|
|
tick_broadcast_start_periodic(dev);
|