Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tick-sched.c
Go to the documentation of this file.
1 /*
2  * linux/kernel/time/tick-sched.c
3  *
4  * Copyright(C) 2005-2006, Thomas Gleixner <[email protected]>
5  * Copyright(C) 2005-2007, Red Hat, Inc., Ingo Molnar
6  * Copyright(C) 2006-2007 Timesys Corp., Thomas Gleixner
7  *
8  * No idle tick implementation for low and high resolution timers
9  *
10  * Started by: Thomas Gleixner and Ingo Molnar
11  *
12  * Distribute under GPLv2.
13  */
14 #include <linux/cpu.h>
15 #include <linux/err.h>
16 #include <linux/hrtimer.h>
17 #include <linux/interrupt.h>
18 #include <linux/kernel_stat.h>
19 #include <linux/percpu.h>
20 #include <linux/profile.h>
21 #include <linux/sched.h>
22 #include <linux/module.h>
23 
24 #include <asm/irq_regs.h>
25 
26 #include "tick-internal.h"
27 
28 /*
29  * Per cpu nohz control structure
30  */
31 static DEFINE_PER_CPU(struct tick_sched, tick_cpu_sched);
32 
33 /*
34  * The time, when the last jiffy update happened. Protected by xtime_lock.
35  */
36 static ktime_t last_jiffies_update;
37 
38 struct tick_sched *tick_get_tick_sched(int cpu)
39 {
40  return &per_cpu(tick_cpu_sched, cpu);
41 }
42 
43 /*
44  * Must be called with interrupts disabled !
45  */
46 static void tick_do_update_jiffies64(ktime_t now)
47 {
48  unsigned long ticks = 0;
49  ktime_t delta;
50 
51  /*
52  * Do a quick check without holding xtime_lock:
53  */
54  delta = ktime_sub(now, last_jiffies_update);
55  if (delta.tv64 < tick_period.tv64)
56  return;
57 
58  /* Reevalute with xtime_lock held */
59  write_seqlock(&xtime_lock);
60 
61  delta = ktime_sub(now, last_jiffies_update);
62  if (delta.tv64 >= tick_period.tv64) {
63 
64  delta = ktime_sub(delta, tick_period);
65  last_jiffies_update = ktime_add(last_jiffies_update,
66  tick_period);
67 
68  /* Slow path for long timeouts */
69  if (unlikely(delta.tv64 >= tick_period.tv64)) {
70  s64 incr = ktime_to_ns(tick_period);
71 
72  ticks = ktime_divns(delta, incr);
73 
74  last_jiffies_update = ktime_add_ns(last_jiffies_update,
75  incr * ticks);
76  }
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);
81  }
82  write_sequnlock(&xtime_lock);
83 }
84 
85 /*
86  * Initialize and return retrieve the jiffies update.
87  */
88 static ktime_t tick_init_jiffy_update(void)
89 {
91 
92  write_seqlock(&xtime_lock);
93  /* Did we start the jiffies update yet ? */
94  if (last_jiffies_update.tv64 == 0)
95  last_jiffies_update = tick_next_period;
96  period = last_jiffies_update;
97  write_sequnlock(&xtime_lock);
98  return period;
99 }
100 
101 /*
102  * NOHZ - aka dynamic tick functionality
103  */
104 #ifdef CONFIG_NO_HZ
105 /*
106  * NO HZ enabled ?
107  */
108 int tick_nohz_enabled __read_mostly = 1;
109 
110 /*
111  * Enable / Disable tickless mode
112  */
113 static int __init setup_tick_nohz(char *str)
114 {
115  if (!strcmp(str, "off"))
116  tick_nohz_enabled = 0;
117  else if (!strcmp(str, "on"))
118  tick_nohz_enabled = 1;
119  else
120  return 0;
121  return 1;
122 }
123 
124 __setup("nohz=", setup_tick_nohz);
125 
136 static void tick_nohz_update_jiffies(ktime_t now)
137 {
138  int cpu = smp_processor_id();
139  struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
140  unsigned long flags;
141 
142  ts->idle_waketime = now;
143 
144  local_irq_save(flags);
145  tick_do_update_jiffies64(now);
146  local_irq_restore(flags);
147 
149 }
150 
151 /*
152  * Updates the per cpu time idle statistics counters
153  */
154 static void
155 update_ts_time_stats(int cpu, struct tick_sched *ts, ktime_t now, u64 *last_update_time)
156 {
157  ktime_t delta;
158 
159  if (ts->idle_active) {
160  delta = ktime_sub(now, ts->idle_entrytime);
161  if (nr_iowait_cpu(cpu) > 0)
162  ts->iowait_sleeptime = ktime_add(ts->iowait_sleeptime, delta);
163  else
164  ts->idle_sleeptime = ktime_add(ts->idle_sleeptime, delta);
165  ts->idle_entrytime = now;
166  }
167 
168  if (last_update_time)
169  *last_update_time = ktime_to_us(now);
170 
171 }
172 
173 static void tick_nohz_stop_idle(int cpu, ktime_t now)
174 {
175  struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
176 
177  update_ts_time_stats(cpu, ts, now, NULL);
178  ts->idle_active = 0;
179 
180  sched_clock_idle_wakeup_event(0);
181 }
182 
183 static ktime_t tick_nohz_start_idle(int cpu, struct tick_sched *ts)
184 {
185  ktime_t now = ktime_get();
186 
187  ts->idle_entrytime = now;
188  ts->idle_active = 1;
189  sched_clock_idle_sleep_event();
190  return now;
191 }
192 
207 u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time)
208 {
209  struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
210  ktime_t now, idle;
211 
212  if (!tick_nohz_enabled)
213  return -1;
214 
215  now = ktime_get();
216  if (last_update_time) {
217  update_ts_time_stats(cpu, ts, now, last_update_time);
218  idle = ts->idle_sleeptime;
219  } else {
220  if (ts->idle_active && !nr_iowait_cpu(cpu)) {
221  ktime_t delta = ktime_sub(now, ts->idle_entrytime);
222 
223  idle = ktime_add(ts->idle_sleeptime, delta);
224  } else {
225  idle = ts->idle_sleeptime;
226  }
227  }
228 
229  return ktime_to_us(idle);
230 
231 }
232 EXPORT_SYMBOL_GPL(get_cpu_idle_time_us);
233 
248 u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time)
249 {
250  struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
251  ktime_t now, iowait;
252 
253  if (!tick_nohz_enabled)
254  return -1;
255 
256  now = ktime_get();
257  if (last_update_time) {
258  update_ts_time_stats(cpu, ts, now, last_update_time);
259  iowait = ts->iowait_sleeptime;
260  } else {
261  if (ts->idle_active && nr_iowait_cpu(cpu) > 0) {
262  ktime_t delta = ktime_sub(now, ts->idle_entrytime);
263 
264  iowait = ktime_add(ts->iowait_sleeptime, delta);
265  } else {
266  iowait = ts->iowait_sleeptime;
267  }
268  }
269 
270  return ktime_to_us(iowait);
271 }
272 EXPORT_SYMBOL_GPL(get_cpu_iowait_time_us);
273 
274 static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
275  ktime_t now, int cpu)
276 {
277  unsigned long seq, last_jiffies, next_jiffies, delta_jiffies;
278  ktime_t last_update, expires, ret = { .tv64 = 0 };
279  unsigned long rcu_delta_jiffies;
280  struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
281  u64 time_delta;
282 
283  /* Read jiffies and the time when jiffies were updated last */
284  do {
285  seq = read_seqbegin(&xtime_lock);
286  last_update = last_jiffies_update;
287  last_jiffies = jiffies;
288  time_delta = timekeeping_max_deferment();
289  } while (read_seqretry(&xtime_lock, seq));
290 
291  if (rcu_needs_cpu(cpu, &rcu_delta_jiffies) || printk_needs_cpu(cpu) ||
292  arch_needs_cpu(cpu)) {
293  next_jiffies = last_jiffies + 1;
294  delta_jiffies = 1;
295  } else {
296  /* Get the next timer wheel timer */
297  next_jiffies = get_next_timer_interrupt(last_jiffies);
298  delta_jiffies = next_jiffies - last_jiffies;
299  if (rcu_delta_jiffies < delta_jiffies) {
300  next_jiffies = last_jiffies + rcu_delta_jiffies;
301  delta_jiffies = rcu_delta_jiffies;
302  }
303  }
304  /*
305  * Do not stop the tick, if we are only one off
306  * or if the cpu is required for rcu
307  */
308  if (!ts->tick_stopped && delta_jiffies == 1)
309  goto out;
310 
311  /* Schedule the tick, if we are at least one jiffie off */
312  if ((long)delta_jiffies >= 1) {
313 
314  /*
315  * If this cpu is the one which updates jiffies, then
316  * give up the assignment and let it be taken by the
317  * cpu which runs the tick timer next, which might be
318  * this cpu as well. If we don't drop this here the
319  * jiffies might be stale and do_timer() never
320  * invoked. Keep track of the fact that it was the one
321  * which had the do_timer() duty last. If this cpu is
322  * the one which had the do_timer() duty last, we
323  * limit the sleep time to the timekeeping
324  * max_deferement value which we retrieved
325  * above. Otherwise we can sleep as long as we want.
326  */
327  if (cpu == tick_do_timer_cpu) {
328  tick_do_timer_cpu = TICK_DO_TIMER_NONE;
329  ts->do_timer_last = 1;
330  } else if (tick_do_timer_cpu != TICK_DO_TIMER_NONE) {
331  time_delta = KTIME_MAX;
332  ts->do_timer_last = 0;
333  } else if (!ts->do_timer_last) {
334  time_delta = KTIME_MAX;
335  }
336 
337  /*
338  * calculate the expiry time for the next timer wheel
339  * timer. delta_jiffies >= NEXT_TIMER_MAX_DELTA signals
340  * that there is no timer pending or at least extremely
341  * far into the future (12 days for HZ=1000). In this
342  * case we set the expiry to the end of time.
343  */
344  if (likely(delta_jiffies < NEXT_TIMER_MAX_DELTA)) {
345  /*
346  * Calculate the time delta for the next timer event.
347  * If the time delta exceeds the maximum time delta
348  * permitted by the current clocksource then adjust
349  * the time delta accordingly to ensure the
350  * clocksource does not wrap.
351  */
352  time_delta = min_t(u64, time_delta,
353  tick_period.tv64 * delta_jiffies);
354  }
355 
356  if (time_delta < KTIME_MAX)
357  expires = ktime_add_ns(last_update, time_delta);
358  else
359  expires.tv64 = KTIME_MAX;
360 
361  /* Skip reprogram of event if its not changed */
362  if (ts->tick_stopped && ktime_equal(expires, dev->next_event))
363  goto out;
364 
365  ret = expires;
366 
367  /*
368  * nohz_stop_sched_tick can be called several times before
369  * the nohz_restart_sched_tick is called. This happens when
370  * interrupts arrive which do not cause a reschedule. In the
371  * first call we save the current tick time, so we can restart
372  * the scheduler tick in nohz_restart_sched_tick.
373  */
374  if (!ts->tick_stopped) {
375  nohz_balance_enter_idle(cpu);
376  calc_load_enter_idle();
377 
378  ts->last_tick = hrtimer_get_expires(&ts->sched_timer);
379  ts->tick_stopped = 1;
380  }
381 
382  /*
383  * If the expiration time == KTIME_MAX, then
384  * in this case we simply stop the tick timer.
385  */
386  if (unlikely(expires.tv64 == KTIME_MAX)) {
387  if (ts->nohz_mode == NOHZ_MODE_HIGHRES)
388  hrtimer_cancel(&ts->sched_timer);
389  goto out;
390  }
391 
392  if (ts->nohz_mode == NOHZ_MODE_HIGHRES) {
393  hrtimer_start(&ts->sched_timer, expires,
395  /* Check, if the timer was already in the past */
396  if (hrtimer_active(&ts->sched_timer))
397  goto out;
398  } else if (!tick_program_event(expires, 0))
399  goto out;
400  /*
401  * We are past the event already. So we crossed a
402  * jiffie boundary. Update jiffies and raise the
403  * softirq.
404  */
405  tick_do_update_jiffies64(ktime_get());
406  }
408 out:
409  ts->next_jiffies = next_jiffies;
410  ts->last_jiffies = last_jiffies;
411  ts->sleep_length = ktime_sub(dev->next_event, now);
412 
413  return ret;
414 }
415 
416 static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
417 {
418  /*
419  * If this cpu is offline and it is the one which updates
420  * jiffies, then give up the assignment and let it be taken by
421  * the cpu which runs the tick timer next. If we don't drop
422  * this here the jiffies might be stale and do_timer() never
423  * invoked.
424  */
425  if (unlikely(!cpu_online(cpu))) {
426  if (cpu == tick_do_timer_cpu)
427  tick_do_timer_cpu = TICK_DO_TIMER_NONE;
428  }
429 
430  if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE))
431  return false;
432 
433  if (need_resched())
434  return false;
435 
436  if (unlikely(local_softirq_pending() && cpu_online(cpu))) {
437  static int ratelimit;
438 
439  if (ratelimit < 10 &&
441  printk(KERN_ERR "NOHZ: local_softirq_pending %02x\n",
442  (unsigned int) local_softirq_pending());
443  ratelimit++;
444  }
445  return false;
446  }
447 
448  return true;
449 }
450 
451 static void __tick_nohz_idle_enter(struct tick_sched *ts)
452 {
453  ktime_t now, expires;
454  int cpu = smp_processor_id();
455 
456  now = tick_nohz_start_idle(cpu, ts);
457 
458  if (can_stop_idle_tick(cpu, ts)) {
459  int was_stopped = ts->tick_stopped;
460 
461  ts->idle_calls++;
462 
463  expires = tick_nohz_stop_sched_tick(ts, now, cpu);
464  if (expires.tv64 > 0LL) {
465  ts->idle_sleeps++;
466  ts->idle_expires = expires;
467  }
468 
469  if (!was_stopped && ts->tick_stopped)
470  ts->idle_jiffies = ts->last_jiffies;
471  }
472 }
473 
486 void tick_nohz_idle_enter(void)
487 {
488  struct tick_sched *ts;
489 
491 
492  /*
493  * Update the idle state in the scheduler domain hierarchy
494  * when tick_nohz_stop_sched_tick() is called from the idle loop.
495  * State will be updated to busy during the first busy tick after
496  * exiting idle.
497  */
498  set_cpu_sd_state_idle();
499 
501 
502  ts = &__get_cpu_var(tick_cpu_sched);
503  /*
504  * set ts->inidle unconditionally. even if the system did not
505  * switch to nohz mode the cpu frequency governers rely on the
506  * update of the idle time accounting in tick_nohz_start_idle().
507  */
508  ts->inidle = 1;
509  __tick_nohz_idle_enter(ts);
510 
512 }
513 
522 void tick_nohz_irq_exit(void)
523 {
524  struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
525 
526  if (!ts->inidle)
527  return;
528 
529  __tick_nohz_idle_enter(ts);
530 }
531 
537 ktime_t tick_nohz_get_sleep_length(void)
538 {
539  struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
540 
541  return ts->sleep_length;
542 }
543 
544 static void tick_nohz_restart(struct tick_sched *ts, ktime_t now)
545 {
546  hrtimer_cancel(&ts->sched_timer);
547  hrtimer_set_expires(&ts->sched_timer, ts->last_tick);
548 
549  while (1) {
550  /* Forward the time to expire in the future */
551  hrtimer_forward(&ts->sched_timer, now, tick_period);
552 
553  if (ts->nohz_mode == NOHZ_MODE_HIGHRES) {
554  hrtimer_start_expires(&ts->sched_timer,
556  /* Check, if the timer was already in the past */
557  if (hrtimer_active(&ts->sched_timer))
558  break;
559  } else {
560  if (!tick_program_event(
561  hrtimer_get_expires(&ts->sched_timer), 0))
562  break;
563  }
564  /* Reread time and update jiffies */
565  now = ktime_get();
566  tick_do_update_jiffies64(now);
567  }
568 }
569 
570 static void tick_nohz_restart_sched_tick(struct tick_sched *ts, ktime_t now)
571 {
572  /* Update jiffies first */
573  tick_do_update_jiffies64(now);
575 
576  calc_load_exit_idle();
578  /*
579  * Cancel the scheduled timer and restore the tick
580  */
581  ts->tick_stopped = 0;
582  ts->idle_exittime = now;
583 
584  tick_nohz_restart(ts, now);
585 }
586 
587 static void tick_nohz_account_idle_ticks(struct tick_sched *ts)
588 {
589 #ifndef CONFIG_VIRT_CPU_ACCOUNTING
590  unsigned long ticks;
591  /*
592  * We stopped the tick in idle. Update process times would miss the
593  * time we slept as update_process_times does only a 1 tick
594  * accounting. Enforce that this is accounted to idle !
595  */
596  ticks = jiffies - ts->idle_jiffies;
597  /*
598  * We might be one off. Do not randomly account a huge number of ticks!
599  */
600  if (ticks && ticks < LONG_MAX)
601  account_idle_ticks(ticks);
602 #endif
603 }
604 
612 void tick_nohz_idle_exit(void)
613 {
614  int cpu = smp_processor_id();
615  struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
616  ktime_t now;
617 
619 
620  WARN_ON_ONCE(!ts->inidle);
621 
622  ts->inidle = 0;
623 
624  if (ts->idle_active || ts->tick_stopped)
625  now = ktime_get();
626 
627  if (ts->idle_active)
628  tick_nohz_stop_idle(cpu, now);
629 
630  if (ts->tick_stopped) {
631  tick_nohz_restart_sched_tick(ts, now);
632  tick_nohz_account_idle_ticks(ts);
633  }
634 
636 }
637 
638 static int tick_nohz_reprogram(struct tick_sched *ts, ktime_t now)
639 {
640  hrtimer_forward(&ts->sched_timer, now, tick_period);
641  return tick_program_event(hrtimer_get_expires(&ts->sched_timer), 0);
642 }
643 
644 /*
645  * The nohz low res interrupt handler
646  */
647 static void tick_nohz_handler(struct clock_event_device *dev)
648 {
649  struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
650  struct pt_regs *regs = get_irq_regs();
651  int cpu = smp_processor_id();
652  ktime_t now = ktime_get();
653 
654  dev->next_event.tv64 = KTIME_MAX;
655 
656  /*
657  * Check if the do_timer duty was dropped. We don't care about
658  * concurrency: This happens only when the cpu in charge went
659  * into a long sleep. If two cpus happen to assign themself to
660  * this duty, then the jiffies update is still serialized by
661  * xtime_lock.
662  */
663  if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
664  tick_do_timer_cpu = cpu;
665 
666  /* Check, if the jiffies need an update */
667  if (tick_do_timer_cpu == cpu)
668  tick_do_update_jiffies64(now);
669 
670  /*
671  * When we are idle and the tick is stopped, we have to touch
672  * the watchdog as we might not schedule for a really long
673  * time. This happens on complete idle SMP systems while
674  * waiting on the login prompt. We also increment the "start
675  * of idle" jiffy stamp so the idle accounting adjustment we
676  * do when we go busy again does not account too much ticks.
677  */
678  if (ts->tick_stopped) {
680  ts->idle_jiffies++;
681  }
682 
685 
686  while (tick_nohz_reprogram(ts, now)) {
687  now = ktime_get();
688  tick_do_update_jiffies64(now);
689  }
690 }
691 
695 static void tick_nohz_switch_to_nohz(void)
696 {
697  struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
698  ktime_t next;
699 
700  if (!tick_nohz_enabled)
701  return;
702 
704  if (tick_switch_to_oneshot(tick_nohz_handler)) {
706  return;
707  }
708 
709  ts->nohz_mode = NOHZ_MODE_LOWRES;
710 
711  /*
712  * Recycle the hrtimer in ts, so we can share the
713  * hrtimer_forward with the highres code.
714  */
715  hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
716  /* Get the next period */
717  next = tick_init_jiffy_update();
718 
719  for (;;) {
720  hrtimer_set_expires(&ts->sched_timer, next);
721  if (!tick_program_event(next, 0))
722  break;
723  next = ktime_add(next, tick_period);
724  }
726 }
727 
728 /*
729  * When NOHZ is enabled and the tick is stopped, we need to kick the
730  * tick timer from irq_enter() so that the jiffies update is kept
731  * alive during long running softirqs. That's ugly as hell, but
732  * correctness is key even if we need to fix the offending softirq in
733  * the first place.
734  *
735  * Note, this is different to tick_nohz_restart. We just kick the
736  * timer and do not touch the other magic bits which need to be done
737  * when idle is left.
738  */
739 static void tick_nohz_kick_tick(int cpu, ktime_t now)
740 {
741 #if 0
742  /* Switch back to 2.6.27 behaviour */
743 
744  struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
745  ktime_t delta;
746 
747  /*
748  * Do not touch the tick device, when the next expiry is either
749  * already reached or less/equal than the tick period.
750  */
751  delta = ktime_sub(hrtimer_get_expires(&ts->sched_timer), now);
752  if (delta.tv64 <= tick_period.tv64)
753  return;
754 
755  tick_nohz_restart(ts, now);
756 #endif
757 }
758 
759 static inline void tick_check_nohz(int cpu)
760 {
761  struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
762  ktime_t now;
763 
764  if (!ts->idle_active && !ts->tick_stopped)
765  return;
766  now = ktime_get();
767  if (ts->idle_active)
768  tick_nohz_stop_idle(cpu, now);
769  if (ts->tick_stopped) {
770  tick_nohz_update_jiffies(now);
771  tick_nohz_kick_tick(cpu, now);
772  }
773 }
774 
775 #else
776 
777 static inline void tick_nohz_switch_to_nohz(void) { }
778 static inline void tick_check_nohz(int cpu) { }
779 
780 #endif /* NO_HZ */
781 
782 /*
783  * Called from irq_enter to notify about the possible interruption of idle()
784  */
785 void tick_check_idle(int cpu)
786 {
787  tick_check_oneshot_broadcast(cpu);
788  tick_check_nohz(cpu);
789 }
790 
791 /*
792  * High resolution timer specific code
793  */
794 #ifdef CONFIG_HIGH_RES_TIMERS
795 /*
796  * We rearm the timer until we get disabled by the idle code.
797  * Called with interrupts disabled and timer->base->cpu_base->lock held.
798  */
799 static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer)
800 {
801  struct tick_sched *ts =
802  container_of(timer, struct tick_sched, sched_timer);
803  struct pt_regs *regs = get_irq_regs();
804  ktime_t now = ktime_get();
805  int cpu = smp_processor_id();
806 
807 #ifdef CONFIG_NO_HZ
808  /*
809  * Check if the do_timer duty was dropped. We don't care about
810  * concurrency: This happens only when the cpu in charge went
811  * into a long sleep. If two cpus happen to assign themself to
812  * this duty, then the jiffies update is still serialized by
813  * xtime_lock.
814  */
815  if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
816  tick_do_timer_cpu = cpu;
817 #endif
818 
819  /* Check, if the jiffies need an update */
820  if (tick_do_timer_cpu == cpu)
821  tick_do_update_jiffies64(now);
822 
823  /*
824  * Do not call, when we are not in irq context and have
825  * no valid regs pointer
826  */
827  if (regs) {
828  /*
829  * When we are idle and the tick is stopped, we have to touch
830  * the watchdog as we might not schedule for a really long
831  * time. This happens on complete idle SMP systems while
832  * waiting on the login prompt. We also increment the "start of
833  * idle" jiffy stamp so the idle accounting adjustment we do
834  * when we go busy again does not account too much ticks.
835  */
836  if (ts->tick_stopped) {
838  if (is_idle_task(current))
839  ts->idle_jiffies++;
840  }
843  }
844 
845  hrtimer_forward(timer, now, tick_period);
846 
847  return HRTIMER_RESTART;
848 }
849 
850 static int sched_skew_tick;
851 
852 static int __init skew_tick(char *str)
853 {
854  get_option(&str, &sched_skew_tick);
855 
856  return 0;
857 }
858 early_param("skew_tick", skew_tick);
859 
863 void tick_setup_sched_timer(void)
864 {
865  struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
866  ktime_t now = ktime_get();
867 
868  /*
869  * Emulate tick processing via per-CPU hrtimers:
870  */
871  hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
872  ts->sched_timer.function = tick_sched_timer;
873 
874  /* Get the next period (per cpu) */
875  hrtimer_set_expires(&ts->sched_timer, tick_init_jiffy_update());
876 
877  /* Offset the tick to avert xtime_lock contention. */
878  if (sched_skew_tick) {
879  u64 offset = ktime_to_ns(tick_period) >> 1;
880  do_div(offset, num_possible_cpus());
881  offset *= smp_processor_id();
882  hrtimer_add_expires_ns(&ts->sched_timer, offset);
883  }
884 
885  for (;;) {
886  hrtimer_forward(&ts->sched_timer, now, tick_period);
887  hrtimer_start_expires(&ts->sched_timer,
889  /* Check, if the timer was already in the past */
890  if (hrtimer_active(&ts->sched_timer))
891  break;
892  now = ktime_get();
893  }
894 
895 #ifdef CONFIG_NO_HZ
896  if (tick_nohz_enabled)
897  ts->nohz_mode = NOHZ_MODE_HIGHRES;
898 #endif
899 }
900 #endif /* HIGH_RES_TIMERS */
901 
902 #if defined CONFIG_NO_HZ || defined CONFIG_HIGH_RES_TIMERS
903 void tick_cancel_sched_timer(int cpu)
904 {
905  struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
906 
907 # ifdef CONFIG_HIGH_RES_TIMERS
908  if (ts->sched_timer.base)
909  hrtimer_cancel(&ts->sched_timer);
910 # endif
911 
912  ts->nohz_mode = NOHZ_MODE_INACTIVE;
913 }
914 #endif
915 
920 {
921  int cpu;
922 
924  set_bit(0, &per_cpu(tick_cpu_sched, cpu).check_clocks);
925 }
926 
927 /*
928  * Async notification about clock event changes
929  */
931 {
932  struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
933 
934  set_bit(0, &ts->check_clocks);
935 }
936 
945 int tick_check_oneshot_change(int allow_nohz)
946 {
947  struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
948 
949  if (!test_and_clear_bit(0, &ts->check_clocks))
950  return 0;
951 
952  if (ts->nohz_mode != NOHZ_MODE_INACTIVE)
953  return 0;
954 
956  return 0;
957 
958  if (!allow_nohz)
959  return 1;
960 
961  tick_nohz_switch_to_nohz();
962  return 0;
963 }