diff mbox series

[thermal-next,1/2] thermal: qcom: tsens: init debugfs only with successful probe

Message ID 20210419012930.7727-1-ansuelsmth@gmail.com
State Superseded
Headers show
Series [thermal-next,1/2] thermal: qcom: tsens: init debugfs only with successful probe | expand

Commit Message

Christian Marangi April 19, 2021, 1:29 a.m. UTC
calibrate and tsens_register can fail or PROBE_DEFER. This will cause a
double or a wrong init of the debugfs information. Init debugfs only
with successful probe fixing warning about directory already present.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
---
 drivers/thermal/qcom/tsens.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Thara Gopinath April 28, 2021, 4:47 p.m. UTC | #1
Hi,

Please include a cover letter next time describing the patch series.

On 4/18/21 9:29 PM, Ansuel Smith wrote:
> Simplify debugfs init function.
> - Drop useless variables
> - Add check for existing dev directory.
> - Fix wrong version in dbg_version_show (with version 0.0.0, 0.1.0 was
>    incorrectly reported)
> 
> Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
> ---
>   drivers/thermal/qcom/tsens.c | 16 +++++++---------
>   1 file changed, 7 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
> index f9d50a67e..b086d1496 100644
> --- a/drivers/thermal/qcom/tsens.c
> +++ b/drivers/thermal/qcom/tsens.c
> @@ -692,7 +692,7 @@ static int dbg_version_show(struct seq_file *s, void *data)
>   			return ret;
>   		seq_printf(s, "%d.%d.%d\n", maj_ver, min_ver, step_ver);
>   	} else {
> -		seq_puts(s, "0.1.0\n");
> +		seq_printf(s, "0.%d.0\n", priv->feat->ver_major);
>   	}
>   
>   	return 0;
> @@ -704,21 +704,19 @@ DEFINE_SHOW_ATTRIBUTE(dbg_sensors);
>   static void tsens_debug_init(struct platform_device *pdev)
>   {
>   	struct tsens_priv *priv = platform_get_drvdata(pdev);
> -	struct dentry *root, *file;
>   
> -	root = debugfs_lookup("tsens", NULL);
> -	if (!root)
> +	priv->debug_root = debugfs_lookup("tsens", NULL);
> +	if (!priv->debug_root)
>   		priv->debug_root = debugfs_create_dir("tsens", NULL);
> -	else
> -		priv->debug_root = root;
>   
> -	file = debugfs_lookup("version", priv->debug_root);
> -	if (!file)
> +	if (!debugfs_lookup("version", priv->debug_root))
>   		debugfs_create_file("version", 0444, priv->debug_root,
>   				    pdev, &dbg_version_fops);
>   
>   	/* A directory for each instance of the TSENS IP */
> -	priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);

Unconditionally creating priv->debug here is correct. The below if 
(!priv->debug) will never be true because as per your patch 1, we call 
tsens_debug_init once per instance of tsens.

> +	priv->debug = debugfs_lookup(dev_name(&pdev->dev), priv->debug_root);
> +	if (!priv->debug)
> +		priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);
>   	debugfs_create_file("sensors", 0444, priv->debug, pdev, &dbg_sensors_fops);
>   }
>   #else
>
Christian Marangi April 28, 2021, 6:48 p.m. UTC | #2
On Wed, Apr 28, 2021 at 12:47:30PM -0400, Thara Gopinath wrote:
> Hi,

> 

> Please include a cover letter next time describing the patch series.

>


Yes sorry, I tought that for a small series (2 patch) it wasn't needed.

> On 4/18/21 9:29 PM, Ansuel Smith wrote:

> > Simplify debugfs init function.

> > - Drop useless variables

> > - Add check for existing dev directory.

> > - Fix wrong version in dbg_version_show (with version 0.0.0, 0.1.0 was

> >    incorrectly reported)

> > 

> > Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>

> > ---

> >   drivers/thermal/qcom/tsens.c | 16 +++++++---------

> >   1 file changed, 7 insertions(+), 9 deletions(-)

> > 

> > diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c

> > index f9d50a67e..b086d1496 100644

> > --- a/drivers/thermal/qcom/tsens.c

> > +++ b/drivers/thermal/qcom/tsens.c

> > @@ -692,7 +692,7 @@ static int dbg_version_show(struct seq_file *s, void *data)

> >   			return ret;

> >   		seq_printf(s, "%d.%d.%d\n", maj_ver, min_ver, step_ver);

> >   	} else {

> > -		seq_puts(s, "0.1.0\n");

> > +		seq_printf(s, "0.%d.0\n", priv->feat->ver_major);

> >   	}

> >   	return 0;

> > @@ -704,21 +704,19 @@ DEFINE_SHOW_ATTRIBUTE(dbg_sensors);

> >   static void tsens_debug_init(struct platform_device *pdev)

> >   {

> >   	struct tsens_priv *priv = platform_get_drvdata(pdev);

> > -	struct dentry *root, *file;

> > -	root = debugfs_lookup("tsens", NULL);

> > -	if (!root)

> > +	priv->debug_root = debugfs_lookup("tsens", NULL);

> > +	if (!priv->debug_root)

> >   		priv->debug_root = debugfs_create_dir("tsens", NULL);

> > -	else

> > -		priv->debug_root = root;

> > -	file = debugfs_lookup("version", priv->debug_root);

> > -	if (!file)

> > +	if (!debugfs_lookup("version", priv->debug_root))

> >   		debugfs_create_file("version", 0444, priv->debug_root,

> >   				    pdev, &dbg_version_fops);

> >   	/* A directory for each instance of the TSENS IP */

> > -	priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);

> 

> Unconditionally creating priv->debug here is correct. The below if

> (!priv->debug) will never be true because as per your patch 1, we call

> tsens_debug_init once per instance of tsens.

> 


You are right, will send a v2 if everything else is good. What do you
think?

> > +	priv->debug = debugfs_lookup(dev_name(&pdev->dev), priv->debug_root);

> > +	if (!priv->debug)

> > +		priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);

> >   	debugfs_create_file("sensors", 0444, priv->debug, pdev, &dbg_sensors_fops);

> >   }

> >   #else

> > 

> 

> -- 

> Warm Regards

> Thara
Thara Gopinath April 28, 2021, 7:14 p.m. UTC | #3
On 4/28/21 2:48 PM, Ansuel Smith wrote:
> On Wed, Apr 28, 2021 at 12:47:30PM -0400, Thara Gopinath wrote:
>> Hi,
>>
>> Please include a cover letter next time describing the patch series.
>>
> 
> Yes sorry, I tought that for a small series (2 patch) it wasn't needed.
> 
>> On 4/18/21 9:29 PM, Ansuel Smith wrote:
>>> Simplify debugfs init function.
>>> - Drop useless variables
>>> - Add check for existing dev directory.
>>> - Fix wrong version in dbg_version_show (with version 0.0.0, 0.1.0 was
>>>     incorrectly reported)
>>>
>>> Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
>>> ---
>>>    drivers/thermal/qcom/tsens.c | 16 +++++++---------
>>>    1 file changed, 7 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
>>> index f9d50a67e..b086d1496 100644
>>> --- a/drivers/thermal/qcom/tsens.c
>>> +++ b/drivers/thermal/qcom/tsens.c
>>> @@ -692,7 +692,7 @@ static int dbg_version_show(struct seq_file *s, void *data)
>>>    			return ret;
>>>    		seq_printf(s, "%d.%d.%d\n", maj_ver, min_ver, step_ver);
>>>    	} else {
>>> -		seq_puts(s, "0.1.0\n");
>>> +		seq_printf(s, "0.%d.0\n", priv->feat->ver_major);
>>>    	}
>>>    	return 0;
>>> @@ -704,21 +704,19 @@ DEFINE_SHOW_ATTRIBUTE(dbg_sensors);
>>>    static void tsens_debug_init(struct platform_device *pdev)
>>>    {
>>>    	struct tsens_priv *priv = platform_get_drvdata(pdev);
>>> -	struct dentry *root, *file;
>>> -	root = debugfs_lookup("tsens", NULL);
>>> -	if (!root)
>>> +	priv->debug_root = debugfs_lookup("tsens", NULL);
>>> +	if (!priv->debug_root)
>>>    		priv->debug_root = debugfs_create_dir("tsens", NULL);
>>> -	else
>>> -		priv->debug_root = root;
>>> -	file = debugfs_lookup("version", priv->debug_root);
>>> -	if (!file)
>>> +	if (!debugfs_lookup("version", priv->debug_root))
>>>    		debugfs_create_file("version", 0444, priv->debug_root,
>>>    				    pdev, &dbg_version_fops);
>>>    	/* A directory for each instance of the TSENS IP */
>>> -	priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);
>>
>> Unconditionally creating priv->debug here is correct. The below if
>> (!priv->debug) will never be true because as per your patch 1, we call
>> tsens_debug_init once per instance of tsens.
>>
> 
> You are right, will send a v2 if everything else is good. What do you
> think?

I have not tested this yet. The clean up itself looks okay to me.
My question is have you tried this with 8960 tsens ? That is the only 
version of tsens that does not use init_common and hence looks to me 
that a debug interface is not created. I don't think this should be a 
problem though. So if you can fix the above, it is a go ahead from me.
Christian Marangi April 28, 2021, 7:19 p.m. UTC | #4
On Wed, Apr 28, 2021 at 03:14:31PM -0400, Thara Gopinath wrote:
> 
> 
> On 4/28/21 2:48 PM, Ansuel Smith wrote:
> > On Wed, Apr 28, 2021 at 12:47:30PM -0400, Thara Gopinath wrote:
> > > Hi,
> > > 
> > > Please include a cover letter next time describing the patch series.
> > > 
> > 
> > Yes sorry, I tought that for a small series (2 patch) it wasn't needed.
> > 
> > > On 4/18/21 9:29 PM, Ansuel Smith wrote:
> > > > Simplify debugfs init function.
> > > > - Drop useless variables
> > > > - Add check for existing dev directory.
> > > > - Fix wrong version in dbg_version_show (with version 0.0.0, 0.1.0 was
> > > >     incorrectly reported)
> > > > 
> > > > Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
> > > > ---
> > > >    drivers/thermal/qcom/tsens.c | 16 +++++++---------
> > > >    1 file changed, 7 insertions(+), 9 deletions(-)
> > > > 
> > > > diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
> > > > index f9d50a67e..b086d1496 100644
> > > > --- a/drivers/thermal/qcom/tsens.c
> > > > +++ b/drivers/thermal/qcom/tsens.c
> > > > @@ -692,7 +692,7 @@ static int dbg_version_show(struct seq_file *s, void *data)
> > > >    			return ret;
> > > >    		seq_printf(s, "%d.%d.%d\n", maj_ver, min_ver, step_ver);
> > > >    	} else {
> > > > -		seq_puts(s, "0.1.0\n");
> > > > +		seq_printf(s, "0.%d.0\n", priv->feat->ver_major);
> > > >    	}
> > > >    	return 0;
> > > > @@ -704,21 +704,19 @@ DEFINE_SHOW_ATTRIBUTE(dbg_sensors);
> > > >    static void tsens_debug_init(struct platform_device *pdev)
> > > >    {
> > > >    	struct tsens_priv *priv = platform_get_drvdata(pdev);
> > > > -	struct dentry *root, *file;
> > > > -	root = debugfs_lookup("tsens", NULL);
> > > > -	if (!root)
> > > > +	priv->debug_root = debugfs_lookup("tsens", NULL);
> > > > +	if (!priv->debug_root)
> > > >    		priv->debug_root = debugfs_create_dir("tsens", NULL);
> > > > -	else
> > > > -		priv->debug_root = root;
> > > > -	file = debugfs_lookup("version", priv->debug_root);
> > > > -	if (!file)
> > > > +	if (!debugfs_lookup("version", priv->debug_root))
> > > >    		debugfs_create_file("version", 0444, priv->debug_root,
> > > >    				    pdev, &dbg_version_fops);
> > > >    	/* A directory for each instance of the TSENS IP */
> > > > -	priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);
> > > 
> > > Unconditionally creating priv->debug here is correct. The below if
> > > (!priv->debug) will never be true because as per your patch 1, we call
> > > tsens_debug_init once per instance of tsens.
> > > 
> > 
> > You are right, will send a v2 if everything else is good. What do you
> > think?
> 
> I have not tested this yet. The clean up itself looks okay to me.
> My question is have you tried this with 8960 tsens ? That is the only
> version of tsens that does not use init_common and hence looks to me that a
> debug interface is not created. I don't think this should be a problem
> though. So if you can fix the above, it is a go ahead from me.
> 

Recent commits should have switched 8960 to init_common. Actually I
pushed this cause while testing 8960 I notice the warning about
double debugfs. Anyway thx for the review. Will send v2 ASAP.

> 
> -- 
> Warm Regards
> Thara
Thara Gopinath April 28, 2021, 7:23 p.m. UTC | #5
On 4/28/21 3:19 PM, Ansuel Smith wrote:
> On Wed, Apr 28, 2021 at 03:14:31PM -0400, Thara Gopinath wrote:
>>
>>
>> On 4/28/21 2:48 PM, Ansuel Smith wrote:
>>> On Wed, Apr 28, 2021 at 12:47:30PM -0400, Thara Gopinath wrote:
>>>> Hi,
>>>>
>>>> Please include a cover letter next time describing the patch series.
>>>>
>>>
>>> Yes sorry, I tought that for a small series (2 patch) it wasn't needed.
>>>
>>>> On 4/18/21 9:29 PM, Ansuel Smith wrote:
>>>>> Simplify debugfs init function.
>>>>> - Drop useless variables
>>>>> - Add check for existing dev directory.
>>>>> - Fix wrong version in dbg_version_show (with version 0.0.0, 0.1.0 was
>>>>>      incorrectly reported)
>>>>>
>>>>> Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
>>>>> ---
>>>>>     drivers/thermal/qcom/tsens.c | 16 +++++++---------
>>>>>     1 file changed, 7 insertions(+), 9 deletions(-)
>>>>>
>>>>> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
>>>>> index f9d50a67e..b086d1496 100644
>>>>> --- a/drivers/thermal/qcom/tsens.c
>>>>> +++ b/drivers/thermal/qcom/tsens.c
>>>>> @@ -692,7 +692,7 @@ static int dbg_version_show(struct seq_file *s, void *data)
>>>>>     			return ret;
>>>>>     		seq_printf(s, "%d.%d.%d\n", maj_ver, min_ver, step_ver);
>>>>>     	} else {
>>>>> -		seq_puts(s, "0.1.0\n");
>>>>> +		seq_printf(s, "0.%d.0\n", priv->feat->ver_major);
>>>>>     	}
>>>>>     	return 0;
>>>>> @@ -704,21 +704,19 @@ DEFINE_SHOW_ATTRIBUTE(dbg_sensors);
>>>>>     static void tsens_debug_init(struct platform_device *pdev)
>>>>>     {
>>>>>     	struct tsens_priv *priv = platform_get_drvdata(pdev);
>>>>> -	struct dentry *root, *file;
>>>>> -	root = debugfs_lookup("tsens", NULL);
>>>>> -	if (!root)
>>>>> +	priv->debug_root = debugfs_lookup("tsens", NULL);
>>>>> +	if (!priv->debug_root)
>>>>>     		priv->debug_root = debugfs_create_dir("tsens", NULL);
>>>>> -	else
>>>>> -		priv->debug_root = root;
>>>>> -	file = debugfs_lookup("version", priv->debug_root);
>>>>> -	if (!file)
>>>>> +	if (!debugfs_lookup("version", priv->debug_root))
>>>>>     		debugfs_create_file("version", 0444, priv->debug_root,
>>>>>     				    pdev, &dbg_version_fops);
>>>>>     	/* A directory for each instance of the TSENS IP */
>>>>> -	priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);
>>>>
>>>> Unconditionally creating priv->debug here is correct. The below if
>>>> (!priv->debug) will never be true because as per your patch 1, we call
>>>> tsens_debug_init once per instance of tsens.
>>>>
>>>
>>> You are right, will send a v2 if everything else is good. What do you
>>> think?
>>
>> I have not tested this yet. The clean up itself looks okay to me.
>> My question is have you tried this with 8960 tsens ? That is the only
>> version of tsens that does not use init_common and hence looks to me that a
>> debug interface is not created. I don't think this should be a problem
>> though. So if you can fix the above, it is a go ahead from me.
>>
> 
> Recent commits should have switched 8960 to init_common. Actually I
> pushed this cause while testing 8960 I notice the warning about
> double debugfs. Anyway thx for the review. Will send v2 ASAP.

Sounds good. Thanks.

> 
>>
>> -- 
>> Warm Regards
>> Thara
Daniel Lezcano April 28, 2021, 7:44 p.m. UTC | #6
On 28/04/2021 18:47, Thara Gopinath wrote:
> Hi,
> 
> Please include a cover letter next time describing the patch series.

Yes, a cover letter helps for the understanding of a patch series but in
this case the changes are simple enough to get rid of it.

> On 4/18/21 9:29 PM, Ansuel Smith wrote:
>> Simplify debugfs init function.
>> - Drop useless variables
>> - Add check for existing dev directory.
>> - Fix wrong version in dbg_version_show (with version 0.0.0, 0.1.0 was
>>    incorrectly reported)
>>
>> Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
>> ---
>>   drivers/thermal/qcom/tsens.c | 16 +++++++---------
>>   1 file changed, 7 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
>> index f9d50a67e..b086d1496 100644
>> --- a/drivers/thermal/qcom/tsens.c
>> +++ b/drivers/thermal/qcom/tsens.c
>> @@ -692,7 +692,7 @@ static int dbg_version_show(struct seq_file *s,
>> void *data)
>>               return ret;
>>           seq_printf(s, "%d.%d.%d\n", maj_ver, min_ver, step_ver);
>>       } else {
>> -        seq_puts(s, "0.1.0\n");
>> +        seq_printf(s, "0.%d.0\n", priv->feat->ver_major);
>>       }
>>         return 0;
>> @@ -704,21 +704,19 @@ DEFINE_SHOW_ATTRIBUTE(dbg_sensors);
>>   static void tsens_debug_init(struct platform_device *pdev)
>>   {
>>       struct tsens_priv *priv = platform_get_drvdata(pdev);
>> -    struct dentry *root, *file;
>>   -    root = debugfs_lookup("tsens", NULL);
>> -    if (!root)
>> +    priv->debug_root = debugfs_lookup("tsens", NULL);
>> +    if (!priv->debug_root)
>>           priv->debug_root = debugfs_create_dir("tsens", NULL);
>> -    else
>> -        priv->debug_root = root;
>>   -    file = debugfs_lookup("version", priv->debug_root);
>> -    if (!file)
>> +    if (!debugfs_lookup("version", priv->debug_root))
>>           debugfs_create_file("version", 0444, priv->debug_root,
>>                       pdev, &dbg_version_fops);
>>         /* A directory for each instance of the TSENS IP */
>> -    priv->debug = debugfs_create_dir(dev_name(&pdev->dev),
>> priv->debug_root);
> 
> Unconditionally creating priv->debug here is correct. The below if
> (!priv->debug) will never be true because as per your patch 1, we call
> tsens_debug_init once per instance of tsens.
> 
>> +    priv->debug = debugfs_lookup(dev_name(&pdev->dev),
>> priv->debug_root);
>> +    if (!priv->debug)
>> +        priv->debug = debugfs_create_dir(dev_name(&pdev->dev),
>> priv->debug_root);
>>       debugfs_create_file("sensors", 0444, priv->debug, pdev,
>> &dbg_sensors_fops);
>>   }
>>   #else
>>
>
diff mbox series

Patch

diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
index 4c7ebd1d3..f9d50a67e 100644
--- a/drivers/thermal/qcom/tsens.c
+++ b/drivers/thermal/qcom/tsens.c
@@ -918,8 +918,6 @@  int __init init_common(struct tsens_priv *priv)
 	if (tsens_version(priv) >= VER_0_1)
 		tsens_enable_irq(priv);
 
-	tsens_debug_init(op);
-
 err_put_device:
 	put_device(&op->dev);
 	return ret;
@@ -1158,7 +1156,12 @@  static int tsens_probe(struct platform_device *pdev)
 		}
 	}
 
-	return tsens_register(priv);
+	ret = tsens_register(priv);
+
+	if (!ret)
+		tsens_debug_init(pdev);
+
+	return ret;
 }
 
 static int tsens_remove(struct platform_device *pdev)