#define IOWAIT_BOOST_MIN …
struct sugov_tunables { … };
struct sugov_policy { … };
struct sugov_cpu { … };
static DEFINE_PER_CPU(struct sugov_cpu, sugov_cpu);
static bool sugov_should_update_freq(struct sugov_policy *sg_policy, u64 time)
{ … }
static bool sugov_update_next_freq(struct sugov_policy *sg_policy, u64 time,
unsigned int next_freq)
{ … }
static void sugov_deferred_update(struct sugov_policy *sg_policy)
{ … }
static __always_inline
unsigned long get_capacity_ref_freq(struct cpufreq_policy *policy)
{ … }
static unsigned int get_next_freq(struct sugov_policy *sg_policy,
unsigned long util, unsigned long max)
{ … }
unsigned long sugov_effective_cpu_perf(int cpu, unsigned long actual,
unsigned long min,
unsigned long max)
{ … }
static void sugov_get_util(struct sugov_cpu *sg_cpu, unsigned long boost)
{ … }
static bool sugov_iowait_reset(struct sugov_cpu *sg_cpu, u64 time,
bool set_iowait_boost)
{ … }
static void sugov_iowait_boost(struct sugov_cpu *sg_cpu, u64 time,
unsigned int flags)
{ … }
static unsigned long sugov_iowait_apply(struct sugov_cpu *sg_cpu, u64 time,
unsigned long max_cap)
{ … }
#ifdef CONFIG_NO_HZ_COMMON
static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu)
{ … }
#else
static inline bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu) { return false; }
#endif
static inline void ignore_dl_rate_limit(struct sugov_cpu *sg_cpu)
{ … }
static inline bool sugov_update_single_common(struct sugov_cpu *sg_cpu,
u64 time, unsigned long max_cap,
unsigned int flags)
{ … }
static void sugov_update_single_freq(struct update_util_data *hook, u64 time,
unsigned int flags)
{ … }
static void sugov_update_single_perf(struct update_util_data *hook, u64 time,
unsigned int flags)
{ … }
static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu, u64 time)
{ … }
static void
sugov_update_shared(struct update_util_data *hook, u64 time, unsigned int flags)
{ … }
static void sugov_work(struct kthread_work *work)
{ … }
static void sugov_irq_work(struct irq_work *irq_work)
{ … }
static struct sugov_tunables *global_tunables;
static DEFINE_MUTEX(global_tunables_lock);
static inline struct sugov_tunables *to_sugov_tunables(struct gov_attr_set *attr_set)
{ … }
static ssize_t rate_limit_us_show(struct gov_attr_set *attr_set, char *buf)
{ … }
static ssize_t
rate_limit_us_store(struct gov_attr_set *attr_set, const char *buf, size_t count)
{ … }
static struct governor_attr rate_limit_us = …;
static struct attribute *sugov_attrs[] = …;
ATTRIBUTE_GROUPS(…);
static void sugov_tunables_free(struct kobject *kobj)
{ … }
static const struct kobj_type sugov_tunables_ktype = …;
#ifdef CONFIG_ENERGY_MODEL
static void rebuild_sd_workfn(struct work_struct *work)
{ … }
static DECLARE_WORK(rebuild_sd_work, rebuild_sd_workfn);
static void sugov_eas_rebuild_sd(void)
{ … }
#else
static inline void sugov_eas_rebuild_sd(void) { };
#endif
struct cpufreq_governor schedutil_gov;
static struct sugov_policy *sugov_policy_alloc(struct cpufreq_policy *policy)
{ … }
static void sugov_policy_free(struct sugov_policy *sg_policy)
{ … }
static int sugov_kthread_create(struct sugov_policy *sg_policy)
{ … }
static void sugov_kthread_stop(struct sugov_policy *sg_policy)
{ … }
static struct sugov_tunables *sugov_tunables_alloc(struct sugov_policy *sg_policy)
{ … }
static void sugov_clear_global_tunables(void)
{ … }
static int sugov_init(struct cpufreq_policy *policy)
{ … }
static void sugov_exit(struct cpufreq_policy *policy)
{ … }
static int sugov_start(struct cpufreq_policy *policy)
{ … }
static void sugov_stop(struct cpufreq_policy *policy)
{ … }
static void sugov_limits(struct cpufreq_policy *policy)
{ … }
struct cpufreq_governor schedutil_gov = …;
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL
struct cpufreq_governor *cpufreq_default_governor(void)
{ … }
#endif
cpufreq_governor_init(schedutil_gov);