Hi Viresh, Apologies for the late reply, On Wed, Nov 15, 2023 at 3:29 PM Viresh Kumar <viresh.kumar@xxxxxxxxxx> wrote: > > On 10-11-23, 17:49, David Dai wrote: > > diff --git a/drivers/cpufreq/virtual-cpufreq.c b/drivers/cpufreq/virtual-cpufreq.c > > +static unsigned int virt_cpufreq_set_perf(struct cpufreq_policy *policy) > > +{ > > + writel_relaxed(policy->cached_target_freq, > > Drivers shouldn't be using the cached_target_freq directly. Use the target freq > or index passed from cpufreq core. We were trying to avoid rounding to frequency table entries to provide more accurate frequency requests. However, we didn't find any significant power or performance regressions using the frequencies from the table, so I'll send another patch series using your suggestion. > > > +static int virt_cpufreq_cpu_exit(struct cpufreq_policy *policy) > > +{ > > + topology_clear_scale_freq_source(SCALE_FREQ_SOURCE_VIRT, policy->related_cpus); > > + kfree(policy->freq_table); > > + policy->freq_table = NULL; > > No need of doing this. Also the order of above two calls is wrong anyway. Can you clarify this point a bit more? Are you suggesting to just remove setting policy->freq_table to NULL and swap the ordering freeing the freq_table vs clearing the topology source? I can alternatively use dev_pm_opp_free_cpufreq_table to mirror the init. Thanks, David > > -- > viresh