alarmtimer: Do not signal SIGEV_NONE timers
[pandora-kernel.git] / kernel / time / tick-sched.c
1 /*
2  *  linux/kernel/time/tick-sched.c
3  *
4  *  Copyright(C) 2005-2006, Thomas Gleixner <tglx@linutronix.de>
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 {
90         ktime_t period;
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 static 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
126 /**
127  * tick_nohz_update_jiffies - update jiffies when idle was interrupted
128  *
129  * Called from interrupt entry when the CPU was idle
130  *
131  * In case the sched_tick was stopped on this CPU, we have to check if jiffies
132  * must be updated. Otherwise an interrupt handler could use a stale jiffy
133  * value. We do this unconditionally on any cpu, as we don't know whether the
134  * cpu, which has the update task assigned is in a long sleep.
135  */
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
148         touch_softlockup_watchdog();
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;
186
187         now = ktime_get();
188
189         update_ts_time_stats(cpu, ts, now, NULL);
190
191         ts->idle_entrytime = now;
192         ts->idle_active = 1;
193         sched_clock_idle_sleep_event();
194         return now;
195 }
196
197 /**
198  * get_cpu_idle_time_us - get the total idle time of a cpu
199  * @cpu: CPU number to query
200  * @last_update_time: variable to store update time in. Do not update
201  * counters if NULL.
202  *
203  * Return the cummulative idle time (since boot) for a given
204  * CPU, in microseconds.
205  *
206  * This time is measured via accounting rather than sampling,
207  * and is as accurate as ktime_get() is.
208  *
209  * This function returns -1 if NOHZ is not enabled.
210  */
211 u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time)
212 {
213         struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
214         ktime_t now, idle;
215
216         if (!tick_nohz_enabled)
217                 return -1;
218
219         now = ktime_get();
220         if (last_update_time) {
221                 update_ts_time_stats(cpu, ts, now, last_update_time);
222                 idle = ts->idle_sleeptime;
223         } else {
224                 if (ts->idle_active && !nr_iowait_cpu(cpu)) {
225                         ktime_t delta = ktime_sub(now, ts->idle_entrytime);
226
227                         idle = ktime_add(ts->idle_sleeptime, delta);
228                 } else {
229                         idle = ts->idle_sleeptime;
230                 }
231         }
232
233         return ktime_to_us(idle);
234
235 }
236 EXPORT_SYMBOL_GPL(get_cpu_idle_time_us);
237
238 /**
239  * get_cpu_iowait_time_us - get the total iowait time of a cpu
240  * @cpu: CPU number to query
241  * @last_update_time: variable to store update time in. Do not update
242  * counters if NULL.
243  *
244  * Return the cummulative iowait time (since boot) for a given
245  * CPU, in microseconds.
246  *
247  * This time is measured via accounting rather than sampling,
248  * and is as accurate as ktime_get() is.
249  *
250  * This function returns -1 if NOHZ is not enabled.
251  */
252 u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time)
253 {
254         struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
255         ktime_t now, iowait;
256
257         if (!tick_nohz_enabled)
258                 return -1;
259
260         now = ktime_get();
261         if (last_update_time) {
262                 update_ts_time_stats(cpu, ts, now, last_update_time);
263                 iowait = ts->iowait_sleeptime;
264         } else {
265                 if (ts->idle_active && nr_iowait_cpu(cpu) > 0) {
266                         ktime_t delta = ktime_sub(now, ts->idle_entrytime);
267
268                         iowait = ktime_add(ts->iowait_sleeptime, delta);
269                 } else {
270                         iowait = ts->iowait_sleeptime;
271                 }
272         }
273
274         return ktime_to_us(iowait);
275 }
276 EXPORT_SYMBOL_GPL(get_cpu_iowait_time_us);
277
278 /**
279  * tick_nohz_stop_sched_tick - stop the idle tick from the idle task
280  *
281  * When the next event is more than a tick into the future, stop the idle tick
282  * Called either from the idle loop or from irq_exit() when an idle period was
283  * just interrupted by an interrupt which did not cause a reschedule.
284  */
285 void tick_nohz_stop_sched_tick(int inidle)
286 {
287         unsigned long seq, last_jiffies, next_jiffies, delta_jiffies, flags;
288         struct tick_sched *ts;
289         ktime_t last_update, expires, now;
290         struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
291         u64 time_delta;
292         int cpu;
293
294         local_irq_save(flags);
295
296         cpu = smp_processor_id();
297         ts = &per_cpu(tick_cpu_sched, cpu);
298
299         /*
300          * Call to tick_nohz_start_idle stops the last_update_time from being
301          * updated. Thus, it must not be called in the event we are called from
302          * irq_exit() with the prior state different than idle.
303          */
304         if (!inidle && !ts->inidle)
305                 goto end;
306
307         /*
308          * Set ts->inidle unconditionally. Even if the system did not
309          * switch to NOHZ mode the cpu frequency governers rely on the
310          * update of the idle time accounting in tick_nohz_start_idle().
311          */
312         ts->inidle = 1;
313
314         now = tick_nohz_start_idle(cpu, ts);
315
316         /*
317          * If this cpu is offline and it is the one which updates
318          * jiffies, then give up the assignment and let it be taken by
319          * the cpu which runs the tick timer next. If we don't drop
320          * this here the jiffies might be stale and do_timer() never
321          * invoked.
322          */
323         if (unlikely(!cpu_online(cpu))) {
324                 if (cpu == tick_do_timer_cpu)
325                         tick_do_timer_cpu = TICK_DO_TIMER_NONE;
326         }
327
328         if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) {
329                 ts->sleep_length = (ktime_t) { .tv64 = NSEC_PER_SEC/HZ };
330                 goto end;
331         }
332
333         if (need_resched())
334                 goto end;
335
336         if (unlikely(local_softirq_pending() && cpu_online(cpu))) {
337                 static int ratelimit;
338
339                 if (ratelimit < 10) {
340                         printk(KERN_ERR "NOHZ: local_softirq_pending %02x\n",
341                                (unsigned int) local_softirq_pending());
342                         ratelimit++;
343                 }
344                 goto end;
345         }
346
347         ts->idle_calls++;
348         /* Read jiffies and the time when jiffies were updated last */
349         do {
350                 seq = read_seqbegin(&xtime_lock);
351                 last_update = last_jiffies_update;
352                 last_jiffies = jiffies;
353                 time_delta = timekeeping_max_deferment();
354         } while (read_seqretry(&xtime_lock, seq));
355
356         if (rcu_needs_cpu(cpu) || printk_needs_cpu(cpu) ||
357             arch_needs_cpu(cpu)) {
358                 next_jiffies = last_jiffies + 1;
359                 delta_jiffies = 1;
360         } else {
361                 /* Get the next timer wheel timer */
362                 next_jiffies = get_next_timer_interrupt(last_jiffies);
363                 delta_jiffies = next_jiffies - last_jiffies;
364         }
365         /*
366          * Do not stop the tick, if we are only one off
367          * or if the cpu is required for rcu
368          */
369         if (!ts->tick_stopped && delta_jiffies == 1)
370                 goto out;
371
372         /* Schedule the tick, if we are at least one jiffie off */
373         if ((long)delta_jiffies >= 1) {
374
375                 /*
376                  * If this cpu is the one which updates jiffies, then
377                  * give up the assignment and let it be taken by the
378                  * cpu which runs the tick timer next, which might be
379                  * this cpu as well. If we don't drop this here the
380                  * jiffies might be stale and do_timer() never
381                  * invoked. Keep track of the fact that it was the one
382                  * which had the do_timer() duty last. If this cpu is
383                  * the one which had the do_timer() duty last, we
384                  * limit the sleep time to the timekeeping
385                  * max_deferement value which we retrieved
386                  * above. Otherwise we can sleep as long as we want.
387                  */
388                 if (cpu == tick_do_timer_cpu) {
389                         tick_do_timer_cpu = TICK_DO_TIMER_NONE;
390                         ts->do_timer_last = 1;
391                 } else if (tick_do_timer_cpu != TICK_DO_TIMER_NONE) {
392                         time_delta = KTIME_MAX;
393                         ts->do_timer_last = 0;
394                 } else if (!ts->do_timer_last) {
395                         time_delta = KTIME_MAX;
396                 }
397
398                 /*
399                  * calculate the expiry time for the next timer wheel
400                  * timer. delta_jiffies >= NEXT_TIMER_MAX_DELTA signals
401                  * that there is no timer pending or at least extremely
402                  * far into the future (12 days for HZ=1000). In this
403                  * case we set the expiry to the end of time.
404                  */
405                 if (likely(delta_jiffies < NEXT_TIMER_MAX_DELTA)) {
406                         /*
407                          * Calculate the time delta for the next timer event.
408                          * If the time delta exceeds the maximum time delta
409                          * permitted by the current clocksource then adjust
410                          * the time delta accordingly to ensure the
411                          * clocksource does not wrap.
412                          */
413                         time_delta = min_t(u64, time_delta,
414                                            tick_period.tv64 * delta_jiffies);
415                 }
416
417                 if (time_delta < KTIME_MAX)
418                         expires = ktime_add_ns(last_update, time_delta);
419                 else
420                         expires.tv64 = KTIME_MAX;
421
422                 /* Skip reprogram of event if its not changed */
423                 if (ts->tick_stopped && ktime_equal(expires, dev->next_event))
424                         goto out;
425
426                 /*
427                  * nohz_stop_sched_tick can be called several times before
428                  * the nohz_restart_sched_tick is called. This happens when
429                  * interrupts arrive which do not cause a reschedule. In the
430                  * first call we save the current tick time, so we can restart
431                  * the scheduler tick in nohz_restart_sched_tick.
432                  */
433                 if (!ts->tick_stopped) {
434                         select_nohz_load_balancer(1);
435                         calc_load_enter_idle();
436
437                         ts->idle_tick = hrtimer_get_expires(&ts->sched_timer);
438                         ts->tick_stopped = 1;
439                         ts->idle_jiffies = last_jiffies;
440                         rcu_enter_nohz();
441                 }
442
443                 ts->idle_sleeps++;
444
445                 /* Mark expires */
446                 ts->idle_expires = expires;
447
448                 /*
449                  * If the expiration time == KTIME_MAX, then
450                  * in this case we simply stop the tick timer.
451                  */
452                  if (unlikely(expires.tv64 == KTIME_MAX)) {
453                         if (ts->nohz_mode == NOHZ_MODE_HIGHRES)
454                                 hrtimer_cancel(&ts->sched_timer);
455                         goto out;
456                 }
457
458                 if (ts->nohz_mode == NOHZ_MODE_HIGHRES) {
459                         hrtimer_start(&ts->sched_timer, expires,
460                                       HRTIMER_MODE_ABS_PINNED);
461                         /* Check, if the timer was already in the past */
462                         if (hrtimer_active(&ts->sched_timer))
463                                 goto out;
464                 } else if (!tick_program_event(expires, 0))
465                                 goto out;
466                 /*
467                  * We are past the event already. So we crossed a
468                  * jiffie boundary. Update jiffies and raise the
469                  * softirq.
470                  */
471                 tick_do_update_jiffies64(ktime_get());
472         }
473         raise_softirq_irqoff(TIMER_SOFTIRQ);
474 out:
475         ts->next_jiffies = next_jiffies;
476         ts->last_jiffies = last_jiffies;
477         ts->sleep_length = ktime_sub(dev->next_event, now);
478 end:
479         local_irq_restore(flags);
480 }
481
482 /**
483  * tick_nohz_get_sleep_length - return the length of the current sleep
484  *
485  * Called from power state control code with interrupts disabled
486  */
487 ktime_t tick_nohz_get_sleep_length(void)
488 {
489         struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
490
491         return ts->sleep_length;
492 }
493
494 static void tick_nohz_restart(struct tick_sched *ts, ktime_t now)
495 {
496         hrtimer_cancel(&ts->sched_timer);
497         hrtimer_set_expires(&ts->sched_timer, ts->idle_tick);
498
499         while (1) {
500                 /* Forward the time to expire in the future */
501                 hrtimer_forward(&ts->sched_timer, now, tick_period);
502
503                 if (ts->nohz_mode == NOHZ_MODE_HIGHRES) {
504                         hrtimer_start_expires(&ts->sched_timer,
505                                               HRTIMER_MODE_ABS_PINNED);
506                         /* Check, if the timer was already in the past */
507                         if (hrtimer_active(&ts->sched_timer))
508                                 break;
509                 } else {
510                         if (!tick_program_event(
511                                 hrtimer_get_expires(&ts->sched_timer), 0))
512                                 break;
513                 }
514                 /* Reread time and update jiffies */
515                 now = ktime_get();
516                 tick_do_update_jiffies64(now);
517         }
518 }
519
520 /**
521  * tick_nohz_restart_sched_tick - restart the idle tick from the idle task
522  *
523  * Restart the idle tick when the CPU is woken up from idle
524  */
525 void tick_nohz_restart_sched_tick(void)
526 {
527         int cpu = smp_processor_id();
528         struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
529 #ifndef CONFIG_VIRT_CPU_ACCOUNTING
530         unsigned long ticks;
531 #endif
532         ktime_t now;
533
534         local_irq_disable();
535         if (ts->idle_active || (ts->inidle && ts->tick_stopped))
536                 now = ktime_get();
537
538         if (ts->idle_active)
539                 tick_nohz_stop_idle(cpu, now);
540
541         if (!ts->inidle || !ts->tick_stopped) {
542                 ts->inidle = 0;
543                 local_irq_enable();
544                 return;
545         }
546
547         ts->inidle = 0;
548
549         rcu_exit_nohz();
550
551         /* Update jiffies first */
552         select_nohz_load_balancer(0);
553         tick_do_update_jiffies64(now);
554         update_cpu_load_nohz();
555
556 #ifndef CONFIG_VIRT_CPU_ACCOUNTING
557         /*
558          * We stopped the tick in idle. Update process times would miss the
559          * time we slept as update_process_times does only a 1 tick
560          * accounting. Enforce that this is accounted to idle !
561          */
562         ticks = jiffies - ts->idle_jiffies;
563         /*
564          * We might be one off. Do not randomly account a huge number of ticks!
565          */
566         if (ticks && ticks < LONG_MAX)
567                 account_idle_ticks(ticks);
568 #endif
569
570         calc_load_exit_idle();
571         touch_softlockup_watchdog();
572         /*
573          * Cancel the scheduled timer and restore the tick
574          */
575         ts->tick_stopped  = 0;
576         ts->idle_exittime = now;
577
578         tick_nohz_restart(ts, now);
579
580         local_irq_enable();
581 }
582
583 static int tick_nohz_reprogram(struct tick_sched *ts, ktime_t now)
584 {
585         hrtimer_forward(&ts->sched_timer, now, tick_period);
586         return tick_program_event(hrtimer_get_expires(&ts->sched_timer), 0);
587 }
588
589 /*
590  * The nohz low res interrupt handler
591  */
592 static void tick_nohz_handler(struct clock_event_device *dev)
593 {
594         struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
595         struct pt_regs *regs = get_irq_regs();
596         int cpu = smp_processor_id();
597         ktime_t now = ktime_get();
598
599         dev->next_event.tv64 = KTIME_MAX;
600
601         /*
602          * Check if the do_timer duty was dropped. We don't care about
603          * concurrency: This happens only when the cpu in charge went
604          * into a long sleep. If two cpus happen to assign themself to
605          * this duty, then the jiffies update is still serialized by
606          * xtime_lock.
607          */
608         if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
609                 tick_do_timer_cpu = cpu;
610
611         /* Check, if the jiffies need an update */
612         if (tick_do_timer_cpu == cpu)
613                 tick_do_update_jiffies64(now);
614
615         /*
616          * When we are idle and the tick is stopped, we have to touch
617          * the watchdog as we might not schedule for a really long
618          * time. This happens on complete idle SMP systems while
619          * waiting on the login prompt. We also increment the "start
620          * of idle" jiffy stamp so the idle accounting adjustment we
621          * do when we go busy again does not account too much ticks.
622          */
623         if (ts->tick_stopped) {
624                 touch_softlockup_watchdog();
625                 ts->idle_jiffies++;
626         }
627
628         update_process_times(user_mode(regs));
629         profile_tick(CPU_PROFILING);
630
631         while (tick_nohz_reprogram(ts, now)) {
632                 now = ktime_get();
633                 tick_do_update_jiffies64(now);
634         }
635 }
636
637 /**
638  * tick_nohz_switch_to_nohz - switch to nohz mode
639  */
640 static void tick_nohz_switch_to_nohz(void)
641 {
642         struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
643         ktime_t next;
644
645         if (!tick_nohz_enabled)
646                 return;
647
648         local_irq_disable();
649         if (tick_switch_to_oneshot(tick_nohz_handler)) {
650                 local_irq_enable();
651                 return;
652         }
653
654         ts->nohz_mode = NOHZ_MODE_LOWRES;
655
656         /*
657          * Recycle the hrtimer in ts, so we can share the
658          * hrtimer_forward with the highres code.
659          */
660         hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
661         /* Get the next period */
662         next = tick_init_jiffy_update();
663
664         for (;;) {
665                 hrtimer_set_expires(&ts->sched_timer, next);
666                 if (!tick_program_event(next, 0))
667                         break;
668                 next = ktime_add(next, tick_period);
669         }
670         local_irq_enable();
671 }
672
673 /*
674  * When NOHZ is enabled and the tick is stopped, we need to kick the
675  * tick timer from irq_enter() so that the jiffies update is kept
676  * alive during long running softirqs. That's ugly as hell, but
677  * correctness is key even if we need to fix the offending softirq in
678  * the first place.
679  *
680  * Note, this is different to tick_nohz_restart. We just kick the
681  * timer and do not touch the other magic bits which need to be done
682  * when idle is left.
683  */
684 static void tick_nohz_kick_tick(int cpu, ktime_t now)
685 {
686 #if 0
687         /* Switch back to 2.6.27 behaviour */
688
689         struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
690         ktime_t delta;
691
692         /*
693          * Do not touch the tick device, when the next expiry is either
694          * already reached or less/equal than the tick period.
695          */
696         delta = ktime_sub(hrtimer_get_expires(&ts->sched_timer), now);
697         if (delta.tv64 <= tick_period.tv64)
698                 return;
699
700         tick_nohz_restart(ts, now);
701 #endif
702 }
703
704 static inline void tick_check_nohz(int cpu)
705 {
706         struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
707         ktime_t now;
708
709         if (!ts->idle_active && !ts->tick_stopped)
710                 return;
711         now = ktime_get();
712         if (ts->idle_active)
713                 tick_nohz_stop_idle(cpu, now);
714         if (ts->tick_stopped) {
715                 tick_nohz_update_jiffies(now);
716                 tick_nohz_kick_tick(cpu, now);
717         }
718 }
719
720 #else
721
722 static inline void tick_nohz_switch_to_nohz(void) { }
723 static inline void tick_check_nohz(int cpu) { }
724
725 #endif /* NO_HZ */
726
727 /*
728  * Called from irq_enter to notify about the possible interruption of idle()
729  */
730 void tick_check_idle(int cpu)
731 {
732         tick_check_oneshot_broadcast(cpu);
733         tick_check_nohz(cpu);
734 }
735
736 /*
737  * High resolution timer specific code
738  */
739 #ifdef CONFIG_HIGH_RES_TIMERS
740 /*
741  * We rearm the timer until we get disabled by the idle code.
742  * Called with interrupts disabled and timer->base->cpu_base->lock held.
743  */
744 static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer)
745 {
746         struct tick_sched *ts =
747                 container_of(timer, struct tick_sched, sched_timer);
748         struct pt_regs *regs = get_irq_regs();
749         ktime_t now = ktime_get();
750         int cpu = smp_processor_id();
751
752 #ifdef CONFIG_NO_HZ
753         /*
754          * Check if the do_timer duty was dropped. We don't care about
755          * concurrency: This happens only when the cpu in charge went
756          * into a long sleep. If two cpus happen to assign themself to
757          * this duty, then the jiffies update is still serialized by
758          * xtime_lock.
759          */
760         if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
761                 tick_do_timer_cpu = cpu;
762 #endif
763
764         /* Check, if the jiffies need an update */
765         if (tick_do_timer_cpu == cpu)
766                 tick_do_update_jiffies64(now);
767
768         /*
769          * Do not call, when we are not in irq context and have
770          * no valid regs pointer
771          */
772         if (regs) {
773                 /*
774                  * When we are idle and the tick is stopped, we have to touch
775                  * the watchdog as we might not schedule for a really long
776                  * time. This happens on complete idle SMP systems while
777                  * waiting on the login prompt. We also increment the "start of
778                  * idle" jiffy stamp so the idle accounting adjustment we do
779                  * when we go busy again does not account too much ticks.
780                  */
781                 if (ts->tick_stopped) {
782                         touch_softlockup_watchdog();
783                         ts->idle_jiffies++;
784                 }
785                 update_process_times(user_mode(regs));
786                 profile_tick(CPU_PROFILING);
787         }
788
789         hrtimer_forward(timer, now, tick_period);
790
791         return HRTIMER_RESTART;
792 }
793
794 /**
795  * tick_setup_sched_timer - setup the tick emulation timer
796  */
797 void tick_setup_sched_timer(void)
798 {
799         struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
800         ktime_t now = ktime_get();
801
802         /*
803          * Emulate tick processing via per-CPU hrtimers:
804          */
805         hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
806         ts->sched_timer.function = tick_sched_timer;
807
808         /* Get the next period (per cpu) */
809         hrtimer_set_expires(&ts->sched_timer, tick_init_jiffy_update());
810
811         for (;;) {
812                 hrtimer_forward(&ts->sched_timer, now, tick_period);
813                 hrtimer_start_expires(&ts->sched_timer,
814                                       HRTIMER_MODE_ABS_PINNED);
815                 /* Check, if the timer was already in the past */
816                 if (hrtimer_active(&ts->sched_timer))
817                         break;
818                 now = ktime_get();
819         }
820
821 #ifdef CONFIG_NO_HZ
822         if (tick_nohz_enabled)
823                 ts->nohz_mode = NOHZ_MODE_HIGHRES;
824 #endif
825 }
826 #endif /* HIGH_RES_TIMERS */
827
828 #if defined CONFIG_NO_HZ || defined CONFIG_HIGH_RES_TIMERS
829 void tick_cancel_sched_timer(int cpu)
830 {
831         struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
832
833 # ifdef CONFIG_HIGH_RES_TIMERS
834         if (ts->sched_timer.base)
835                 hrtimer_cancel(&ts->sched_timer);
836 # endif
837
838         memset(ts, 0, sizeof(*ts));
839 }
840 #endif
841
842 /**
843  * Async notification about clocksource changes
844  */
845 void tick_clock_notify(void)
846 {
847         int cpu;
848
849         for_each_possible_cpu(cpu)
850                 set_bit(0, &per_cpu(tick_cpu_sched, cpu).check_clocks);
851 }
852
853 /*
854  * Async notification about clock event changes
855  */
856 void tick_oneshot_notify(void)
857 {
858         struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
859
860         set_bit(0, &ts->check_clocks);
861 }
862
863 /**
864  * Check, if a change happened, which makes oneshot possible.
865  *
866  * Called cyclic from the hrtimer softirq (driven by the timer
867  * softirq) allow_nohz signals, that we can switch into low-res nohz
868  * mode, because high resolution timers are disabled (either compile
869  * or runtime).
870  */
871 int tick_check_oneshot_change(int allow_nohz)
872 {
873         struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
874
875         if (!test_and_clear_bit(0, &ts->check_clocks))
876                 return 0;
877
878         if (ts->nohz_mode != NOHZ_MODE_INACTIVE)
879                 return 0;
880
881         if (!timekeeping_valid_for_hres() || !tick_is_oneshot_available())
882                 return 0;
883
884         if (!allow_nohz)
885                 return 1;
886
887         tick_nohz_switch_to_nohz();
888         return 0;
889 }