clockevents: check broadcast tick device not the clock events device
Impact: jiffies increment too fast. Hugh Dickins noted that with NOHZ=n and HIGHRES=n jiffies get incremented too fast. The reason is a wrong check in the broadcast enter/exit code, which keeps the local apic timer in periodic mode when the switch happens. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
2165f631f0
commit
07454bfff1
|
@ -235,7 +235,8 @@ static void tick_do_broadcast_on_off(void *why)
|
||||||
case CLOCK_EVT_NOTIFY_BROADCAST_FORCE:
|
case CLOCK_EVT_NOTIFY_BROADCAST_FORCE:
|
||||||
if (!cpu_isset(cpu, tick_broadcast_mask)) {
|
if (!cpu_isset(cpu, tick_broadcast_mask)) {
|
||||||
cpu_set(cpu, tick_broadcast_mask);
|
cpu_set(cpu, tick_broadcast_mask);
|
||||||
if (bc->mode == TICKDEV_MODE_PERIODIC)
|
if (tick_broadcast_device.mode ==
|
||||||
|
TICKDEV_MODE_PERIODIC)
|
||||||
clockevents_shutdown(dev);
|
clockevents_shutdown(dev);
|
||||||
}
|
}
|
||||||
if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE)
|
if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE)
|
||||||
|
@ -245,7 +246,8 @@ static void tick_do_broadcast_on_off(void *why)
|
||||||
if (!tick_broadcast_force &&
|
if (!tick_broadcast_force &&
|
||||||
cpu_isset(cpu, tick_broadcast_mask)) {
|
cpu_isset(cpu, tick_broadcast_mask)) {
|
||||||
cpu_clear(cpu, tick_broadcast_mask);
|
cpu_clear(cpu, tick_broadcast_mask);
|
||||||
if (bc->mode == TICKDEV_MODE_PERIODIC)
|
if (tick_broadcast_device.mode ==
|
||||||
|
TICKDEV_MODE_PERIODIC)
|
||||||
tick_setup_periodic(dev, 0);
|
tick_setup_periodic(dev, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue