Skip to content

Commit

Permalink
clockevents: do not shutdown the oneshot broadcast device
Browse files Browse the repository at this point in the history
When a cpu goes offline it is removed from the broadcast masks. If the
mask becomes empty the code shuts down the broadcast device. This is
wrong, because the broadcast device needs to be ready for the online
cpu going idle (into a c-state, which stops the local apic timer).

Signed-off-by: Thomas Gleixner <[email protected]>
  • Loading branch information
KAGA-KOKO authored and Thomas Gleixner committed Sep 16, 2007
1 parent 07eec6a commit 31d9b39
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions kernel/time/tick-broadcast.c
Original file line number Diff line number Diff line change
Expand Up @@ -560,20 +560,17 @@ void tick_broadcast_switch_to_oneshot(void)
*/
void tick_shutdown_broadcast_oneshot(unsigned int *cpup)
{
struct clock_event_device *bc;
unsigned long flags;
unsigned int cpu = *cpup;

spin_lock_irqsave(&tick_broadcast_lock, flags);

bc = tick_broadcast_device.evtdev;
/*
* Clear the broadcast mask flag for the dead cpu, but do not
* stop the broadcast device!
*/
cpu_clear(cpu, tick_broadcast_oneshot_mask);

if (tick_broadcast_device.mode == TICKDEV_MODE_ONESHOT) {
if (bc && cpus_empty(tick_broadcast_oneshot_mask))
clockevents_set_mode(bc, CLOCK_EVT_MODE_SHUTDOWN);
}

spin_unlock_irqrestore(&tick_broadcast_lock, flags);
}

Expand Down

0 comments on commit 31d9b39

Please sign in to comment.