diff options
Diffstat (limited to 'kernel/time/tick-sched.c')
| -rw-r--r-- | kernel/time/tick-sched.c | 13 | 
1 files changed, 8 insertions, 5 deletions
| diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index a87b0468568b..cb02324bdb88 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
| @@ -75,6 +75,9 @@ static void tick_do_update_jiffies64(ktime_t now) | |||
| 75 | incr * ticks); | 75 | incr * ticks); | 
| 76 | } | 76 | } | 
| 77 | do_timer(++ticks); | 77 | do_timer(++ticks); | 
| 78 | |||
| 79 | /* Keep the tick_next_period variable up to date */ | ||
| 80 | tick_next_period = ktime_add(last_jiffies_update, tick_period); | ||
| 78 | } | 81 | } | 
| 79 | write_sequnlock(&xtime_lock); | 82 | write_sequnlock(&xtime_lock); | 
| 80 | } | 83 | } | 
| @@ -221,7 +224,7 @@ void tick_nohz_stop_sched_tick(int inidle) | |||
| 221 | */ | 224 | */ | 
| 222 | if (unlikely(!cpu_online(cpu))) { | 225 | if (unlikely(!cpu_online(cpu))) { | 
| 223 | if (cpu == tick_do_timer_cpu) | 226 | if (cpu == tick_do_timer_cpu) | 
| 224 | tick_do_timer_cpu = -1; | 227 | tick_do_timer_cpu = TICK_DO_TIMER_NONE; | 
| 225 | } | 228 | } | 
| 226 | 229 | ||
| 227 | if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) | 230 | if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) | 
| @@ -303,7 +306,7 @@ void tick_nohz_stop_sched_tick(int inidle) | |||
| 303 | * invoked. | 306 | * invoked. | 
| 304 | */ | 307 | */ | 
| 305 | if (cpu == tick_do_timer_cpu) | 308 | if (cpu == tick_do_timer_cpu) | 
| 306 | tick_do_timer_cpu = -1; | 309 | tick_do_timer_cpu = TICK_DO_TIMER_NONE; | 
| 307 | 310 | ||
| 308 | ts->idle_sleeps++; | 311 | ts->idle_sleeps++; | 
| 309 | 312 | ||
| @@ -468,7 +471,7 @@ static void tick_nohz_handler(struct clock_event_device *dev) | |||
| 468 | * this duty, then the jiffies update is still serialized by | 471 | * this duty, then the jiffies update is still serialized by | 
| 469 | * xtime_lock. | 472 | * xtime_lock. | 
| 470 | */ | 473 | */ | 
| 471 | if (unlikely(tick_do_timer_cpu == -1)) | 474 | if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE)) | 
| 472 | tick_do_timer_cpu = cpu; | 475 | tick_do_timer_cpu = cpu; | 
| 473 | 476 | ||
| 474 | /* Check, if the jiffies need an update */ | 477 | /* Check, if the jiffies need an update */ | 
| @@ -570,7 +573,7 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer) | |||
| 570 | * this duty, then the jiffies update is still serialized by | 573 | * this duty, then the jiffies update is still serialized by | 
| 571 | * xtime_lock. | 574 | * xtime_lock. | 
| 572 | */ | 575 | */ | 
| 573 | if (unlikely(tick_do_timer_cpu == -1)) | 576 | if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE)) | 
| 574 | tick_do_timer_cpu = cpu; | 577 | tick_do_timer_cpu = cpu; | 
| 575 | #endif | 578 | #endif | 
| 576 | 579 | ||
| @@ -622,7 +625,7 @@ void tick_setup_sched_timer(void) | |||
| 622 | */ | 625 | */ | 
| 623 | hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); | 626 | hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); | 
| 624 | ts->sched_timer.function = tick_sched_timer; | 627 | ts->sched_timer.function = tick_sched_timer; | 
| 625 | ts->sched_timer.cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ; | 628 | ts->sched_timer.cb_mode = HRTIMER_CB_IRQSAFE_PERCPU; | 
| 626 | 629 | ||
| 627 | /* Get the next period (per cpu) */ | 630 | /* Get the next period (per cpu) */ | 
| 628 | ts->sched_timer.expires = tick_init_jiffy_update(); | 631 | ts->sched_timer.expires = tick_init_jiffy_update(); | 
