[Patch v2] cpufreq: tegra194: remove opp table in exit hook

Sumit Gupta posted 1 patch 2 years ago
drivers/cpufreq/tegra194-cpufreq.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
[Patch v2] cpufreq: tegra194: remove opp table in exit hook
Posted by Sumit Gupta 2 years ago
Add exit hook and remove OPP table when the device gets unregistered.
This will fix the error messages when the CPU FREQ driver module is
removed and then re-inserted. It also fixes these messages while
onlining the first CPU from a policy whose all CPU's were previously
offlined.

 debugfs: File 'cpu5' in directory 'opp' already present!
 debugfs: File 'cpu6' in directory 'opp' already present!
 debugfs: File 'cpu7' in directory 'opp' already present!

Fixes: f41e1442ac5b ("cpufreq: tegra194: add OPP support and set bandwidth")
Signed-off-by: Sumit Gupta <sumitg@nvidia.com>
---

v1[1] -> v2:
- updated commit description.

[1] https://lore.kernel.org/lkml/20230809153455.29056-1-sumitg@nvidia.com/

 drivers/cpufreq/tegra194-cpufreq.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/cpufreq/tegra194-cpufreq.c b/drivers/cpufreq/tegra194-cpufreq.c
index c90b30469165..66a9c23544db 100644
--- a/drivers/cpufreq/tegra194-cpufreq.c
+++ b/drivers/cpufreq/tegra194-cpufreq.c
@@ -454,6 +454,8 @@ static int tegra_cpufreq_init_cpufreq_table(struct cpufreq_policy *policy,
 		if (ret < 0)
 			return ret;
 
+		dev_pm_opp_put(opp);
+
 		freq_table[j].driver_data = pos->driver_data;
 		freq_table[j].frequency = pos->frequency;
 		j++;
@@ -508,6 +510,16 @@ static int tegra194_cpufreq_init(struct cpufreq_policy *policy)
 	return 0;
 }
 
+static int tegra194_cpufreq_exit(struct cpufreq_policy *policy)
+{
+	struct device *cpu_dev = get_cpu_device(policy->cpu);
+
+	dev_pm_opp_remove_all_dynamic(cpu_dev);
+	dev_pm_opp_of_cpumask_remove_table(policy->related_cpus);
+
+	return 0;
+}
+
 static int tegra194_cpufreq_set_target(struct cpufreq_policy *policy,
 				       unsigned int index)
 {
@@ -535,6 +547,7 @@ static struct cpufreq_driver tegra194_cpufreq_driver = {
 	.target_index = tegra194_cpufreq_set_target,
 	.get = tegra194_get_speed,
 	.init = tegra194_cpufreq_init,
+	.exit = tegra194_cpufreq_exit,
 	.attr = cpufreq_generic_attr,
 };
 
-- 
2.17.1
Re: [Patch v2] cpufreq: tegra194: remove opp table in exit hook
Posted by Viresh Kumar 2 years ago
On 25-08-23, 16:46, Sumit Gupta wrote:
> Add exit hook and remove OPP table when the device gets unregistered.
> This will fix the error messages when the CPU FREQ driver module is
> removed and then re-inserted. It also fixes these messages while
> onlining the first CPU from a policy whose all CPU's were previously
> offlined.
> 
>  debugfs: File 'cpu5' in directory 'opp' already present!
>  debugfs: File 'cpu6' in directory 'opp' already present!
>  debugfs: File 'cpu7' in directory 'opp' already present!
> 
> Fixes: f41e1442ac5b ("cpufreq: tegra194: add OPP support and set bandwidth")
> Signed-off-by: Sumit Gupta <sumitg@nvidia.com>
> ---
> 
> v1[1] -> v2:
> - updated commit description.
> 
> [1] https://lore.kernel.org/lkml/20230809153455.29056-1-sumitg@nvidia.com/
> 
>  drivers/cpufreq/tegra194-cpufreq.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/cpufreq/tegra194-cpufreq.c b/drivers/cpufreq/tegra194-cpufreq.c
> index c90b30469165..66a9c23544db 100644
> --- a/drivers/cpufreq/tegra194-cpufreq.c
> +++ b/drivers/cpufreq/tegra194-cpufreq.c
> @@ -454,6 +454,8 @@ static int tegra_cpufreq_init_cpufreq_table(struct cpufreq_policy *policy,
>  		if (ret < 0)
>  			return ret;
>  
> +		dev_pm_opp_put(opp);
> +

Missed this earlier, can you please do this in a separate patch please
?

>  		freq_table[j].driver_data = pos->driver_data;
>  		freq_table[j].frequency = pos->frequency;
>  		j++;
> @@ -508,6 +510,16 @@ static int tegra194_cpufreq_init(struct cpufreq_policy *policy)
>  	return 0;
>  }
>  
> +static int tegra194_cpufreq_exit(struct cpufreq_policy *policy)
> +{
> +	struct device *cpu_dev = get_cpu_device(policy->cpu);
> +
> +	dev_pm_opp_remove_all_dynamic(cpu_dev);
> +	dev_pm_opp_of_cpumask_remove_table(policy->related_cpus);
> +
> +	return 0;
> +}
> +
>  static int tegra194_cpufreq_set_target(struct cpufreq_policy *policy,
>  				       unsigned int index)
>  {
> @@ -535,6 +547,7 @@ static struct cpufreq_driver tegra194_cpufreq_driver = {
>  	.target_index = tegra194_cpufreq_set_target,
>  	.get = tegra194_get_speed,
>  	.init = tegra194_cpufreq_init,
> +	.exit = tegra194_cpufreq_exit,
>  	.attr = cpufreq_generic_attr,
>  };
>  
> -- 
> 2.17.1

-- 
viresh
Re: [Patch v2] cpufreq: tegra194: remove opp table in exit hook
Posted by Viresh Kumar 2 years ago
On 28-08-23, 11:41, Viresh Kumar wrote:
> On 25-08-23, 16:46, Sumit Gupta wrote:
> > Add exit hook and remove OPP table when the device gets unregistered.
> > This will fix the error messages when the CPU FREQ driver module is
> > removed and then re-inserted. It also fixes these messages while
> > onlining the first CPU from a policy whose all CPU's were previously
> > offlined.
> > 
> >  debugfs: File 'cpu5' in directory 'opp' already present!
> >  debugfs: File 'cpu6' in directory 'opp' already present!
> >  debugfs: File 'cpu7' in directory 'opp' already present!
> > 
> > Fixes: f41e1442ac5b ("cpufreq: tegra194: add OPP support and set bandwidth")
> > Signed-off-by: Sumit Gupta <sumitg@nvidia.com>
> > ---
> > 
> > v1[1] -> v2:
> > - updated commit description.
> > 
> > [1] https://lore.kernel.org/lkml/20230809153455.29056-1-sumitg@nvidia.com/
> > 
> >  drivers/cpufreq/tegra194-cpufreq.c | 13 +++++++++++++
> >  1 file changed, 13 insertions(+)
> > 
> > diff --git a/drivers/cpufreq/tegra194-cpufreq.c b/drivers/cpufreq/tegra194-cpufreq.c
> > index c90b30469165..66a9c23544db 100644
> > --- a/drivers/cpufreq/tegra194-cpufreq.c
> > +++ b/drivers/cpufreq/tegra194-cpufreq.c
> > @@ -454,6 +454,8 @@ static int tegra_cpufreq_init_cpufreq_table(struct cpufreq_policy *policy,
> >  		if (ret < 0)
> >  			return ret;
> >  
> > +		dev_pm_opp_put(opp);
> > +
> 
> Missed this earlier, can you please do this in a separate patch please
> ?

I have pushed rest of this commit and dropped this part. Send it
separately. Thanks.

-- 
viresh
Re: [Patch v2] cpufreq: tegra194: remove opp table in exit hook
Posted by Sumit Gupta 2 years ago

On 28/08/23 15:47, Viresh Kumar wrote:
> External email: Use caution opening links or attachments
> 
> 
> On 28-08-23, 11:41, Viresh Kumar wrote:
>> On 25-08-23, 16:46, Sumit Gupta wrote:
>>> Add exit hook and remove OPP table when the device gets unregistered.
>>> This will fix the error messages when the CPU FREQ driver module is
>>> removed and then re-inserted. It also fixes these messages while
>>> onlining the first CPU from a policy whose all CPU's were previously
>>> offlined.
>>>
>>>   debugfs: File 'cpu5' in directory 'opp' already present!
>>>   debugfs: File 'cpu6' in directory 'opp' already present!
>>>   debugfs: File 'cpu7' in directory 'opp' already present!
>>>
>>> Fixes: f41e1442ac5b ("cpufreq: tegra194: add OPP support and set bandwidth")
>>> Signed-off-by: Sumit Gupta <sumitg@nvidia.com>
>>> ---
>>>
>>> v1[1] -> v2:
>>> - updated commit description.
>>>
>>> [1] https://lore.kernel.org/lkml/20230809153455.29056-1-sumitg@nvidia.com/
>>>
>>>   drivers/cpufreq/tegra194-cpufreq.c | 13 +++++++++++++
>>>   1 file changed, 13 insertions(+)
>>>
>>> diff --git a/drivers/cpufreq/tegra194-cpufreq.c b/drivers/cpufreq/tegra194-cpufreq.c
>>> index c90b30469165..66a9c23544db 100644
>>> --- a/drivers/cpufreq/tegra194-cpufreq.c
>>> +++ b/drivers/cpufreq/tegra194-cpufreq.c
>>> @@ -454,6 +454,8 @@ static int tegra_cpufreq_init_cpufreq_table(struct cpufreq_policy *policy,
>>>              if (ret < 0)
>>>                      return ret;
>>>
>>> +           dev_pm_opp_put(opp);
>>> +
>>
>> Missed this earlier, can you please do this in a separate patch please
>> ?
> 
> I have pushed rest of this commit and dropped this part. Send it
> separately. Thanks.
> 
> --
> viresh

Thank you.
Sent the change separately @
  https://lore.kernel.org/lkml/20230828120959.24680-1-sumitg@nvidia.com/

Regards,
Sumit Gupta