cpufreq: governors: implement generic policy_is_shared
Implement a generic helper function policy_is_shared() to replace the current dbs_sw_coordinated_cpus() at cpufreq level, so that it can be used by code other than cpufreq governors. Suggested-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
6f35a65fbb
commit
2624f90c16
|
@ -734,7 +734,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
|||
|
||||
#ifdef CONFIG_SMP
|
||||
dmi_check_system(sw_any_bug_dmi_table);
|
||||
if (bios_with_sw_any_bug && cpumask_weight(policy->cpus) == 1) {
|
||||
if (bios_with_sw_any_bug && !policy_is_shared(policy)) {
|
||||
policy->shared_type = CPUFREQ_SHARED_TYPE_ALL;
|
||||
cpumask_copy(policy->cpus, cpu_core_mask(cpu));
|
||||
}
|
||||
|
|
|
@ -154,7 +154,7 @@ static void cs_dbs_timer(struct work_struct *work)
|
|||
struct cs_cpu_dbs_info_s *dbs_info = container_of(work,
|
||||
struct cs_cpu_dbs_info_s, cdbs.work.work);
|
||||
|
||||
if (dbs_sw_coordinated_cpus(&dbs_info->cdbs)) {
|
||||
if (policy_is_shared(dbs_info->cdbs.cur_policy)) {
|
||||
cs_timer_coordinated(dbs_info, dw);
|
||||
} else {
|
||||
mutex_lock(&dbs_info->cdbs.timer_mutex);
|
||||
|
|
|
@ -161,14 +161,6 @@ void dbs_check_cpu(struct dbs_data *dbs_data, int cpu)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(dbs_check_cpu);
|
||||
|
||||
bool dbs_sw_coordinated_cpus(struct cpu_dbs_common_info *cdbs)
|
||||
{
|
||||
struct cpufreq_policy *policy = cdbs->cur_policy;
|
||||
|
||||
return cpumask_weight(policy->cpus) > 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dbs_sw_coordinated_cpus);
|
||||
|
||||
static inline void dbs_timer_init(struct dbs_data *dbs_data, int cpu,
|
||||
unsigned int sampling_rate)
|
||||
{
|
||||
|
|
|
@ -172,7 +172,6 @@ static inline int delay_for_sampling_rate(unsigned int sampling_rate)
|
|||
|
||||
u64 get_cpu_idle_time(unsigned int cpu, u64 *wall);
|
||||
void dbs_check_cpu(struct dbs_data *dbs_data, int cpu);
|
||||
bool dbs_sw_coordinated_cpus(struct cpu_dbs_common_info *cdbs);
|
||||
int cpufreq_governor_dbs(struct dbs_data *dbs_data,
|
||||
struct cpufreq_policy *policy, unsigned int event);
|
||||
#endif /* _CPUFREQ_GOVERNER_H */
|
||||
|
|
|
@ -277,7 +277,7 @@ static void od_dbs_timer(struct work_struct *work)
|
|||
struct od_cpu_dbs_info_s *dbs_info =
|
||||
container_of(work, struct od_cpu_dbs_info_s, cdbs.work.work);
|
||||
|
||||
if (dbs_sw_coordinated_cpus(&dbs_info->cdbs)) {
|
||||
if (policy_is_shared(dbs_info->cdbs.cur_policy)) {
|
||||
od_timer_coordinated(dbs_info, dw);
|
||||
} else {
|
||||
mutex_lock(&dbs_info->cdbs.timer_mutex);
|
||||
|
|
|
@ -185,7 +185,7 @@ static void cpufreq_stats_free_table(unsigned int cpu)
|
|||
static void cpufreq_stats_free_sysfs(unsigned int cpu)
|
||||
{
|
||||
struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
|
||||
if (policy && (cpumask_weight(policy->cpus) == 1)) {
|
||||
if (policy && !policy_is_shared(policy)) {
|
||||
pr_debug("%s: Free sysfs stat\n", __func__);
|
||||
sysfs_remove_group(&policy->kobj, &stats_attr_group);
|
||||
}
|
||||
|
|
|
@ -127,6 +127,11 @@ struct cpufreq_policy {
|
|||
#define CPUFREQ_SHARED_TYPE_ALL (2) /* All dependent CPUs should set freq */
|
||||
#define CPUFREQ_SHARED_TYPE_ANY (3) /* Freq can be set from any dependent CPU*/
|
||||
|
||||
static inline bool policy_is_shared(struct cpufreq_policy *policy)
|
||||
{
|
||||
return cpumask_weight(policy->cpus) > 1;
|
||||
}
|
||||
|
||||
/******************** cpufreq transition notifiers *******************/
|
||||
|
||||
#define CPUFREQ_PRECHANGE (0)
|
||||
|
|
Loading…
Reference in New Issue