Messages in this thread | | | Date | Tue, 7 Jul 2015 10:11:26 -0700 | From | Dmitry Torokhov <> | Subject | Re: [PATCH V2] acpi-cpufreq: replace per_cpu with driver_data of policy |
| |
Hi Pan,
On Tue, Jul 07, 2015 at 08:43:26PM +0800, Pan Xinhui wrote: > @@ -364,19 +363,24 @@ static u32 get_cur_val(const struct cpumask *mask) > > static unsigned int get_cur_freq_on_cpu(unsigned int cpu) > { > - struct acpi_cpufreq_data *data = per_cpu(acfreq_data, cpu); > + struct acpi_cpufreq_data *data; > + struct cpufreq_policy *policy; > unsigned int freq; > unsigned int cached_freq; > > pr_debug("get_cur_freq_on_cpu (%d)\n", cpu); > > - if (unlikely(data == NULL || > - data->acpi_data == NULL || data->freq_table == NULL)) { > + policy = cpufreq_cpu_get(cpu); > + if (unlikely(!policy)) > + return 0; > + > + data = policy->driver_data; > + cpufreq_cpu_put(policy);
If we put policy here can we guarantee that memory pointed to by data stays valid? Shoudln't we issue cpufreq_cpu_put(policy) after we done assessing the pointer?
> + if (unlikely(!data || !data->acpi_data || !data->freq_table)) > return 0; > - } > > cached_freq = data->freq_table[data->acpi_data->state].frequency; > - freq = extract_freq(get_cur_val(cpumask_of(cpu)), data); > + freq = extract_freq(get_cur_val(cpumask_of(cpu), data), data); > if (freq != cached_freq) { > /* > * The dreaded BIOS frequency change behind our back.
Thanks.
-- Dmitry
| |