aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/tick.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/tick.h')
-rw-r--r--include/linux/tick.h71
1 files changed, 69 insertions, 2 deletions
diff --git a/include/linux/tick.h b/include/linux/tick.h
index e5c0a4e22706..cf435e459598 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -20,12 +20,79 @@ struct tick_device {
20 enum tick_device_mode mode; 20 enum tick_device_mode mode;
21}; 21};
22 22
23enum tick_nohz_mode {
24 NOHZ_MODE_INACTIVE,
25 NOHZ_MODE_LOWRES,
26 NOHZ_MODE_HIGHRES,
27};
28
29/**
30 * struct tick_sched - sched tick emulation and no idle tick control/stats
31 * @sched_timer: hrtimer to schedule the periodic tick in high
32 * resolution mode
33 * @idle_tick: Store the last idle tick expiry time when the tick
34 * timer is modified for idle sleeps. This is necessary
35 * to resume the tick timer operation in the timeline
36 * when the CPU returns from idle
37 * @tick_stopped: Indicator that the idle tick has been stopped
38 * @idle_jiffies: jiffies at the entry to idle for idle time accounting
39 * @idle_calls: Total number of idle calls
40 * @idle_sleeps: Number of idle calls, where the sched tick was stopped
41 * @idle_entrytime: Time when the idle call was entered
42 * @idle_sleeptime: Sum of the time slept in idle with sched tick stopped
43 */
44struct tick_sched {
45 struct hrtimer sched_timer;
46 unsigned long check_clocks;
47 enum tick_nohz_mode nohz_mode;
48 ktime_t idle_tick;
49 int tick_stopped;
50 unsigned long idle_jiffies;
51 unsigned long idle_calls;
52 unsigned long idle_sleeps;
53 ktime_t idle_entrytime;
54 ktime_t idle_sleeptime;
55 unsigned long last_jiffies;
56 unsigned long next_jiffies;
57 ktime_t idle_expires;
58};
59
23extern void __init tick_init(void); 60extern void __init tick_init(void);
61extern int tick_is_oneshot_available(void);
62
63# ifdef CONFIG_HIGH_RES_TIMERS
64extern int tick_init_highres(void);
65extern int tick_program_event(ktime_t expires, int force);
66extern void tick_setup_sched_timer(void);
67extern void tick_cancel_sched_timer(int cpu);
68# else
69static inline void tick_cancel_sched_timer(int cpu) { }
70# endif /* HIGHRES */
24 71
25#else 72# ifdef CONFIG_TICK_ONESHOT
73extern void tick_clock_notify(void);
74extern int tick_check_oneshot_change(int allow_nohz);
75extern struct tick_sched *tick_get_tick_sched(int cpu);
76# else
77static inline void tick_clock_notify(void) { }
78static inline int tick_check_oneshot_change(int allow_nohz) { return 0; }
79# endif
26 80
81#else /* CONFIG_GENERIC_CLOCKEVENTS */
27static inline void tick_init(void) { } 82static inline void tick_init(void) { }
83static inline void tick_cancel_sched_timer(int cpu) { }
84static inline void tick_clock_notify(void) { }
85static inline int tick_check_oneshot_change(int allow_nohz) { return 0; }
86#endif /* !CONFIG_GENERIC_CLOCKEVENTS */
28 87
29#endif 88# ifdef CONFIG_NO_HZ
89extern void tick_nohz_stop_sched_tick(void);
90extern void tick_nohz_restart_sched_tick(void);
91extern void tick_nohz_update_jiffies(void);
92# else
93static inline void tick_nohz_stop_sched_tick(void) { }
94static inline void tick_nohz_restart_sched_tick(void) { }
95static inline void tick_nohz_update_jiffies(void) { }
96# endif /* !NO_HZ */
30 97
31#endif 98#endif