Blame view
include/linux/tick.h
4.54 KB
906568c9c [PATCH] tick-mana... |
1 2 3 4 5 6 7 8 9 |
/* linux/include/linux/tick.h * * This file contains the structure definitions for tick related functions * */ #ifndef _LINUX_TICK_H #define _LINUX_TICK_H #include <linux/clockchips.h> |
2bbb6817c nohz: Allow rcu e... |
10 |
#include <linux/irqflags.h> |
906568c9c [PATCH] tick-mana... |
11 12 13 14 15 16 17 18 19 20 21 22 |
#ifdef CONFIG_GENERIC_CLOCKEVENTS enum tick_device_mode { TICKDEV_MODE_PERIODIC, TICKDEV_MODE_ONESHOT, }; struct tick_device { struct clock_event_device *evtdev; enum tick_device_mode mode; }; |
79bf2bb33 [PATCH] tick-mana... |
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
enum tick_nohz_mode { NOHZ_MODE_INACTIVE, NOHZ_MODE_LOWRES, NOHZ_MODE_HIGHRES, }; /** * struct tick_sched - sched tick emulation and no idle tick control/stats * @sched_timer: hrtimer to schedule the periodic tick in high * resolution mode * @idle_tick: Store the last idle tick expiry time when the tick * timer is modified for idle sleeps. This is necessary * to resume the tick timer operation in the timeline * when the CPU returns from idle * @tick_stopped: Indicator that the idle tick has been stopped * @idle_jiffies: jiffies at the entry to idle for idle time accounting * @idle_calls: Total number of idle calls * @idle_sleeps: Number of idle calls, where the sched tick was stopped * @idle_entrytime: Time when the idle call was entered |
5df7fa1c6 tick-sched: add m... |
42 43 |
* @idle_waketime: Time when the idle was interrupted * @idle_exittime: Time when the idle state was left |
79bf2bb33 [PATCH] tick-mana... |
44 |
* @idle_sleeptime: Sum of the time slept in idle with sched tick stopped |
0224cf4c5 sched: Intoduce g... |
45 |
* @iowait_sleeptime: Sum of the time slept in idle with sched tick stopped, with IO outstanding |
4f86d3a8e cpuidle: consolid... |
46 |
* @sleep_length: Duration of the current idle sleep |
27185016b nohz: Track last ... |
47 |
* @do_timer_lst: CPU was the last one doing do_timer before going idle |
79bf2bb33 [PATCH] tick-mana... |
48 49 50 51 52 53 |
*/ struct tick_sched { struct hrtimer sched_timer; unsigned long check_clocks; enum tick_nohz_mode nohz_mode; ktime_t idle_tick; |
b8f8c3cf0 nohz: prevent tic... |
54 |
int inidle; |
79bf2bb33 [PATCH] tick-mana... |
55 56 57 58 |
int tick_stopped; unsigned long idle_jiffies; unsigned long idle_calls; unsigned long idle_sleeps; |
6378ddb59 time: track accur... |
59 |
int idle_active; |
79bf2bb33 [PATCH] tick-mana... |
60 |
ktime_t idle_entrytime; |
5df7fa1c6 tick-sched: add m... |
61 62 |
ktime_t idle_waketime; ktime_t idle_exittime; |
79bf2bb33 [PATCH] tick-mana... |
63 |
ktime_t idle_sleeptime; |
0224cf4c5 sched: Intoduce g... |
64 |
ktime_t iowait_sleeptime; |
4f86d3a8e cpuidle: consolid... |
65 |
ktime_t sleep_length; |
79bf2bb33 [PATCH] tick-mana... |
66 67 68 |
unsigned long last_jiffies; unsigned long next_jiffies; ktime_t idle_expires; |
27185016b nohz: Track last ... |
69 |
int do_timer_last; |
79bf2bb33 [PATCH] tick-mana... |
70 |
}; |
906568c9c [PATCH] tick-mana... |
71 |
extern void __init tick_init(void); |
79bf2bb33 [PATCH] tick-mana... |
72 |
extern int tick_is_oneshot_available(void); |
289f480af [PATCH] Add debug... |
73 |
extern struct tick_device *tick_get_device(int cpu); |
79bf2bb33 [PATCH] tick-mana... |
74 75 76 77 78 |
# ifdef CONFIG_HIGH_RES_TIMERS extern int tick_init_highres(void); extern int tick_program_event(ktime_t expires, int force); extern void tick_setup_sched_timer(void); |
3c4fbe5e0 nohz: fix wrong e... |
79 80 81 |
# endif # if defined CONFIG_NO_HZ || defined CONFIG_HIGH_RES_TIMERS |
79bf2bb33 [PATCH] tick-mana... |
82 83 84 |
extern void tick_cancel_sched_timer(int cpu); # else static inline void tick_cancel_sched_timer(int cpu) { } |
3c4fbe5e0 nohz: fix wrong e... |
85 |
# endif |
906568c9c [PATCH] tick-mana... |
86 |
|
289f480af [PATCH] Add debug... |
87 88 |
# ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST extern struct tick_device *tick_get_broadcast_device(void); |
6b954823c cpumask: convert ... |
89 |
extern struct cpumask *tick_get_broadcast_mask(void); |
289f480af [PATCH] Add debug... |
90 91 |
# ifdef CONFIG_TICK_ONESHOT |
6b954823c cpumask: convert ... |
92 |
extern struct cpumask *tick_get_broadcast_oneshot_mask(void); |
289f480af [PATCH] Add debug... |
93 94 95 |
# endif # endif /* BROADCAST */ |
79bf2bb33 [PATCH] tick-mana... |
96 97 98 99 |
# ifdef CONFIG_TICK_ONESHOT extern void tick_clock_notify(void); extern int tick_check_oneshot_change(int allow_nohz); extern struct tick_sched *tick_get_tick_sched(int cpu); |
719254faa NOHZ: unify the n... |
100 |
extern void tick_check_idle(int cpu); |
cd6d95d84 clocksource: prev... |
101 |
extern int tick_oneshot_mode_active(void); |
3c5d92a0c nohz: Introduce a... |
102 103 104 |
# ifndef arch_needs_cpu # define arch_needs_cpu(cpu) (0) # endif |
79bf2bb33 [PATCH] tick-mana... |
105 106 107 |
# else static inline void tick_clock_notify(void) { } static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } |
719254faa NOHZ: unify the n... |
108 |
static inline void tick_check_idle(int cpu) { } |
cd6d95d84 clocksource: prev... |
109 |
static inline int tick_oneshot_mode_active(void) { return 0; } |
79bf2bb33 [PATCH] tick-mana... |
110 |
# endif |
906568c9c [PATCH] tick-mana... |
111 |
|
79bf2bb33 [PATCH] tick-mana... |
112 |
#else /* CONFIG_GENERIC_CLOCKEVENTS */ |
906568c9c [PATCH] tick-mana... |
113 |
static inline void tick_init(void) { } |
79bf2bb33 [PATCH] tick-mana... |
114 115 116 |
static inline void tick_cancel_sched_timer(int cpu) { } static inline void tick_clock_notify(void) { } static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } |
719254faa NOHZ: unify the n... |
117 |
static inline void tick_check_idle(int cpu) { } |
cd6d95d84 clocksource: prev... |
118 |
static inline int tick_oneshot_mode_active(void) { return 0; } |
79bf2bb33 [PATCH] tick-mana... |
119 |
#endif /* !CONFIG_GENERIC_CLOCKEVENTS */ |
906568c9c [PATCH] tick-mana... |
120 |
|
79bf2bb33 [PATCH] tick-mana... |
121 |
# ifdef CONFIG_NO_HZ |
1268fbc74 nohz: Remove tick... |
122 |
extern void tick_nohz_idle_enter(void); |
280f06774 nohz: Separate ou... |
123 124 |
extern void tick_nohz_idle_exit(void); extern void tick_nohz_irq_exit(void); |
4f86d3a8e cpuidle: consolid... |
125 |
extern ktime_t tick_nohz_get_sleep_length(void); |
6378ddb59 time: track accur... |
126 |
extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); |
0224cf4c5 sched: Intoduce g... |
127 |
extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); |
79bf2bb33 [PATCH] tick-mana... |
128 |
# else |
2bbb6817c nohz: Allow rcu e... |
129 130 |
static inline void tick_nohz_idle_enter(void) { } static inline void tick_nohz_idle_exit(void) { } |
280f06774 nohz: Separate ou... |
131 |
|
4f86d3a8e cpuidle: consolid... |
132 133 134 135 136 137 |
static inline ktime_t tick_nohz_get_sleep_length(void) { ktime_t len = { .tv64 = NSEC_PER_SEC/HZ }; return len; } |
8083e4ad9 [CPUFREQ][5/6] cp... |
138 |
static inline u64 get_cpu_idle_time_us(int cpu, u64 *unused) { return -1; } |
0224cf4c5 sched: Intoduce g... |
139 |
static inline u64 get_cpu_iowait_time_us(int cpu, u64 *unused) { return -1; } |
79bf2bb33 [PATCH] tick-mana... |
140 |
# endif /* !NO_HZ */ |
906568c9c [PATCH] tick-mana... |
141 142 |
#endif |