| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (c) 2021 MediaTek Inc. |
| */ |
| #ifndef _SCHED_COMMON_H |
| #define _SCHED_COMMON_H |
| |
| #if IS_ENABLED(CONFIG_NONLINEAR_FREQ_CTL) |
| extern void mtk_map_util_freq(void *data, unsigned long util, unsigned long freq, |
| struct cpumask *cpumask, unsigned long *next_freq); |
| #else |
| #define mtk_map_util_freq(data, util, freq, cap, next_freq) |
| #endif /* CONFIG_NONLINEAR_FREQ_CTL */ |
| |
| #if IS_ENABLED(CONFIG_MTK_CPUFREQ_SUGOV_EXT) |
| DECLARE_PER_CPU(int, cpufreq_idle_cpu); |
| DECLARE_PER_CPU(spinlock_t, cpufreq_idle_cpu_lock); |
| unsigned long mtk_cpu_util(int cpu, unsigned long util_cfs, |
| unsigned long max, enum cpu_util_type type, |
| struct task_struct *p); |
| int dequeue_idle_cpu(int cpu); |
| #endif |
| __always_inline |
| unsigned long mtk_uclamp_rq_util_with(struct rq *rq, unsigned long util, |
| struct task_struct *p); |
| |
| #if IS_ENABLED(CONFIG_RT_GROUP_SCHED) |
| static inline int rt_rq_throttled(struct rt_rq *rt_rq) |
| { |
| return rt_rq->rt_throttled && !rt_rq->rt_nr_boosted; |
| } |
| #else /* !CONFIG_RT_GROUP_SCHED */ |
| static inline int rt_rq_throttled(struct rt_rq *rt_rq) |
| { |
| return rt_rq->rt_throttled; |
| } |
| #endif |
| |
| #endif /* _SCHED_COMMON_H */ |