lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 18 Feb 2016 11:23:54 +0530 From: Viresh Kumar <viresh.kumar@...aro.org> To: "Rafael J. Wysocki" <rjw@...ysocki.net> Cc: Linux PM list <linux-pm@...r.kernel.org>, Linux Kernel Mailing List <linux-kernel@...r.kernel.org> Subject: Re: [PATCH 7/12] cpufreq: ondemand: Rework the handling of powersave bias updates On 18-02-16, 02:28, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@...el.com> > > The ondemand_powersave_bias_init() function used for resetting data > fields related to the powersave bias tunable of the ondemand governor > works by walking all of the online CPUs in the system and updating the > od_cpu_dbs_info_s structures for all of them. > > However, if governor tunables are per policy, the update should not > touch the CPUs that are not associated with the given dbs_data. > > Moreover, since the data fields in question are only ever used for > policy->cpu in each policy governed by ondemand, the update can be > limited to those specific CPUs. Now that I am looking at struct **_cpu_dbs_info_s definitions, I think we need to change the design of the structures a bit. Only cdbs is something that is per-cpu and everything else is per-policy. And so we will be able to move the per-cpu structures present in individual governors into cpufreq_governor.c and save some memory. > Rework the code to take the above observations into account. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@...el.com> > --- > drivers/cpufreq/cpufreq_ondemand.c | 30 +++++++++++++----------------- > 1 file changed, 13 insertions(+), 17 deletions(-) > > Index: linux-pm/drivers/cpufreq/cpufreq_ondemand.c > =================================================================== > --- linux-pm.orig/drivers/cpufreq/cpufreq_ondemand.c > +++ linux-pm/drivers/cpufreq/cpufreq_ondemand.c > @@ -34,14 +34,6 @@ static struct od_ops od_ops; > > static unsigned int default_powersave_bias; > > -static void ondemand_powersave_bias_init_cpu(int cpu) > -{ > - struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, cpu); > - > - dbs_info->freq_table = cpufreq_frequency_get_table(cpu); > - dbs_info->freq_lo = 0; > -} > - > /* > * Not all CPUs want IO time to be accounted as busy; this depends on how > * efficient idling at a higher frequency/voltage is. > @@ -120,12 +112,13 @@ static unsigned int generic_powersave_bi > return freq_hi; > } > > -static void ondemand_powersave_bias_init(void) > +static void ondemand_powersave_bias_init(struct cpufreq_policy *policy) > { > - int i; > - for_each_online_cpu(i) { > - ondemand_powersave_bias_init_cpu(i); > - } > + unsigned int cpu = policy->cpu; > + struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, cpu); > + > + dbs_info->freq_table = cpufreq_frequency_get_table(cpu); > + dbs_info->freq_lo = 0; > } > > static void dbs_freq_increase(struct cpufreq_policy *policy, unsigned int freq) > @@ -306,6 +299,7 @@ static ssize_t store_powersave_bias(stru > size_t count) > { > struct od_dbs_tuners *od_tuners = dbs_data->tuners; > + struct policy_dbs_info *policy_dbs; > unsigned int input; > int ret; > ret = sscanf(buf, "%u", &input); > @@ -317,7 +311,10 @@ static ssize_t store_powersave_bias(stru > input = 1000; > > od_tuners->powersave_bias = input; > - ondemand_powersave_bias_init(); > + > + list_for_each_entry(policy_dbs, &dbs_data->policy_dbs_list, list) > + ondemand_powersave_bias_init(policy_dbs->policy); > + > return count; > } > > @@ -398,11 +395,10 @@ static void od_exit(struct dbs_data *dbs > > static void od_start(struct cpufreq_policy *policy) > { > - unsigned int cpu = policy->cpu; > - struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, cpu); > + struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, policy->cpu); > > dbs_info->sample_type = OD_NORMAL_SAMPLE; > - ondemand_powersave_bias_init_cpu(cpu); > + ondemand_powersave_bias_init(policy); > } > > define_get_cpu_dbs_routines(od_cpu_dbs_info); I agree with the patch, but because we have all these fields per-cpu, I feel a bit scared while depending on policy->cpu for everything. Acked-by: Viresh Kumar <viresh.kumar@...aro.org> -- viresh
Powered by blists - more mailing lists