You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.7 KiB
91 lines
2.7 KiB
#ifndef _TICK_SCHED_H |
|
#define _TICK_SCHED_H |
|
|
|
#include <linux/hrtimer.h> |
|
|
|
enum tick_device_mode { |
|
TICKDEV_MODE_PERIODIC, |
|
TICKDEV_MODE_ONESHOT, |
|
}; |
|
|
|
struct tick_device { |
|
struct clock_event_device *evtdev; |
|
enum tick_device_mode mode; |
|
}; |
|
|
|
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 |
|
* @last_tick: Store the last tick expiry time when the tick |
|
* timer is modified for nohz sleeps. This is necessary |
|
* to resume the tick timer operation in the timeline |
|
* when the CPU returns from nohz sleep. |
|
* @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 |
|
* @idle_waketime: Time when the idle was interrupted |
|
* @idle_exittime: Time when the idle state was left |
|
* @idle_sleeptime: Sum of the time slept in idle with sched tick stopped |
|
* @iowait_sleeptime: Sum of the time slept in idle with sched tick stopped, with IO outstanding |
|
* @sleep_length: Duration of the current idle sleep |
|
* @do_timer_lst: CPU was the last one doing do_timer before going idle |
|
*/ |
|
struct tick_sched { |
|
struct hrtimer sched_timer; |
|
unsigned long check_clocks; |
|
enum tick_nohz_mode nohz_mode; |
|
ktime_t last_tick; |
|
int inidle; |
|
int tick_stopped; |
|
unsigned long idle_jiffies; |
|
unsigned long idle_calls; |
|
unsigned long idle_sleeps; |
|
int idle_active; |
|
ktime_t idle_entrytime; |
|
ktime_t idle_waketime; |
|
ktime_t idle_exittime; |
|
ktime_t idle_sleeptime; |
|
ktime_t iowait_sleeptime; |
|
ktime_t sleep_length; |
|
unsigned long last_jiffies; |
|
u64 next_timer; |
|
ktime_t idle_expires; |
|
int do_timer_last; |
|
#ifdef CONFIG_MEDIATEK_SOLUTION |
|
ktime_t idle_entrytime_wo_cpuoffline; |
|
ktime_t idle_sleeptime_wo_cpuoffline; |
|
ktime_t iowait_sleeptime_wo_cpuoffline; |
|
unsigned long next_jiffies; |
|
int cpu_plug_off_flag; |
|
#endif |
|
}; |
|
|
|
extern struct tick_sched *tick_get_tick_sched(int cpu); |
|
|
|
extern void tick_setup_sched_timer(void); |
|
#if defined CONFIG_NO_HZ_COMMON || defined CONFIG_HIGH_RES_TIMERS |
|
extern void tick_cancel_sched_timer(int cpu); |
|
#else |
|
static inline void tick_cancel_sched_timer(int cpu) { } |
|
#endif |
|
|
|
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST |
|
extern int __tick_broadcast_oneshot_control(enum tick_broadcast_state state); |
|
#else |
|
static inline int |
|
__tick_broadcast_oneshot_control(enum tick_broadcast_state state) |
|
{ |
|
return -EBUSY; |
|
} |
|
#endif |
|
|
|
#endif
|
|
|