Commit 07454bff authored by Thomas Gleixner's avatar Thomas Gleixner

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: default avatarThomas Gleixner <tglx@linutronix.de>
parent 2165f631
...@@ -235,7 +235,8 @@ static void tick_do_broadcast_on_off(void *why) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment