diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-07-18 13:53:16 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-07-18 13:53:16 -0400 |
| commit | 9b610fda0df5d0f0b0c64242e37441ad1b384aac (patch) | |
| tree | 0ea14b15f2e6546f37fe18d8ac3dc83077ec0e55 /kernel/time | |
| parent | b8f8c3cf0a4ac0632ec3f0e15e9dc0c29de917af (diff) | |
| parent | 5b664cb235e97afbf34db9c4d77f08ebd725335e (diff) | |
Merge branch 'linus' into timers/nohz
Diffstat (limited to 'kernel/time')
| -rw-r--r-- | kernel/time/tick-broadcast.c | 8 | ||||
| -rw-r--r-- | kernel/time/tick-sched.c | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index 57a1f02e5ec0..f48d0f09d32f 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | struct tick_device tick_broadcast_device; | 30 | struct tick_device tick_broadcast_device; |
| 31 | static cpumask_t tick_broadcast_mask; | 31 | static cpumask_t tick_broadcast_mask; |
| 32 | static DEFINE_SPINLOCK(tick_broadcast_lock); | 32 | static DEFINE_SPINLOCK(tick_broadcast_lock); |
| 33 | static int tick_broadcast_force; | ||
| 33 | 34 | ||
| 34 | #ifdef CONFIG_TICK_ONESHOT | 35 | #ifdef CONFIG_TICK_ONESHOT |
| 35 | static void tick_broadcast_clear_oneshot(int cpu); | 36 | static void tick_broadcast_clear_oneshot(int cpu); |
| @@ -232,10 +233,11 @@ static void tick_do_broadcast_on_off(void *why) | |||
| 232 | CLOCK_EVT_MODE_SHUTDOWN); | 233 | CLOCK_EVT_MODE_SHUTDOWN); |
| 233 | } | 234 | } |
| 234 | if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE) | 235 | if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE) |
| 235 | dev->features |= CLOCK_EVT_FEAT_DUMMY; | 236 | tick_broadcast_force = 1; |
| 236 | break; | 237 | break; |
| 237 | case CLOCK_EVT_NOTIFY_BROADCAST_OFF: | 238 | case CLOCK_EVT_NOTIFY_BROADCAST_OFF: |
| 238 | if (cpu_isset(cpu, tick_broadcast_mask)) { | 239 | if (!tick_broadcast_force && |
| 240 | cpu_isset(cpu, tick_broadcast_mask)) { | ||
| 239 | cpu_clear(cpu, tick_broadcast_mask); | 241 | cpu_clear(cpu, tick_broadcast_mask); |
| 240 | if (td->mode == TICKDEV_MODE_PERIODIC) | 242 | if (td->mode == TICKDEV_MODE_PERIODIC) |
| 241 | tick_setup_periodic(dev, 0); | 243 | tick_setup_periodic(dev, 0); |
| @@ -266,7 +268,7 @@ void tick_broadcast_on_off(unsigned long reason, int *oncpu) | |||
| 266 | "offline CPU #%d\n", *oncpu); | 268 | "offline CPU #%d\n", *oncpu); |
| 267 | else | 269 | else |
| 268 | smp_call_function_single(*oncpu, tick_do_broadcast_on_off, | 270 | smp_call_function_single(*oncpu, tick_do_broadcast_on_off, |
| 269 | &reason, 1, 1); | 271 | &reason, 1); |
| 270 | } | 272 | } |
| 271 | 273 | ||
| 272 | /* | 274 | /* |
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index ee962d11107b..a5c26d2b1323 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
| @@ -289,6 +289,7 @@ void tick_nohz_stop_sched_tick(int inidle) | |||
| 289 | ts->tick_stopped = 1; | 289 | ts->tick_stopped = 1; |
| 290 | ts->idle_jiffies = last_jiffies; | 290 | ts->idle_jiffies = last_jiffies; |
| 291 | rcu_enter_nohz(); | 291 | rcu_enter_nohz(); |
| 292 | sched_clock_tick_stop(cpu); | ||
| 292 | } | 293 | } |
| 293 | 294 | ||
| 294 | /* | 295 | /* |
| @@ -391,6 +392,7 @@ void tick_nohz_restart_sched_tick(void) | |||
| 391 | select_nohz_load_balancer(0); | 392 | select_nohz_load_balancer(0); |
| 392 | now = ktime_get(); | 393 | now = ktime_get(); |
| 393 | tick_do_update_jiffies64(now); | 394 | tick_do_update_jiffies64(now); |
| 395 | sched_clock_tick_start(cpu); | ||
| 394 | cpu_clear(cpu, nohz_cpu_mask); | 396 | cpu_clear(cpu, nohz_cpu_mask); |
| 395 | 397 | ||
| 396 | /* | 398 | /* |
