diff mbox series

hwmon: Fix the 'No sensors found' error after replacing the parameter NULL by the actual device

Message ID 1538469324-8028-1-git-send-email-cv-dong@jinso.co.jp (mailing list archive)
State Superseded
Delegated to: Geert Uytterhoeven
Headers show
Series hwmon: Fix the 'No sensors found' error after replacing the parameter NULL by the actual device | expand

Commit Message

Cao Van Dong Oct. 2, 2018, 8:35 a.m. UTC
In __hwmon_device_register() function of hwmon.c, we have assigned 'dev' directly to 'hdev->parent'. 
Formerly, when registering the hwmon device, we pass NULL as the device. This is not affected.
Recently, the developer has replaced the parameter NULL as the device by the actual device.
This causes the "No sensors found" error. This patch is to fix this error.

This patch is based on the v4.19-rc3 tag.

---
 drivers/hwmon/hwmon.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Guenter Roeck Oct. 2, 2018, 12:50 p.m. UTC | #1
On 10/02/2018 01:35 AM, Cao Van Dong wrote:
> In __hwmon_device_register() function of hwmon.c, we have assigned 'dev' directly to 'hdev->parent'.
> Formerly, when registering the hwmon device, we pass NULL as the device. This is not affected.
> Recently, the developer has replaced the parameter NULL as the device by the actual device.
> This causes the "No sensors found" error. This patch is to fix this error.
> 
> This patch is based on the v4.19-rc3 tag.
> 

NACK.

This is wrong. The passed device is the hwmon driver's parent device. Using that device's
parent would be wrong. Indeed, that device could be a platform device with no parent.
The problem must be fixed in the calling code.

Guenter

> ---
>   drivers/hwmon/hwmon.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
> index 33d5128..7c8d3cb 100644
> --- a/drivers/hwmon/hwmon.c
> +++ b/drivers/hwmon/hwmon.c
> @@ -610,7 +610,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
>   
>   	hwdev->name = name;
>   	hdev->class = &hwmon_class;
> -	hdev->parent = dev;
> +	hdev->parent = dev->parent;
>   	hdev->of_node = dev ? dev->of_node : NULL;
>   	hwdev->chip = chip;
>   	dev_set_drvdata(hdev, drvdata);
>
Guenter Roeck Oct. 2, 2018, 12:56 p.m. UTC | #2
On 10/02/2018 02:06 AM, Cao Van Dong wrote:
> Dear Geert-san,
> 
> Thanks for your comment!
> 
>>> In __hwmon_device_register() function of hwmon.c, we have assigned 'dev' directly to 'hdev->parent'.
>>> Formerly, when registering the hwmon device, we pass NULL as the device. This is not affected.
>>> Recently, the developer has replaced the parameter NULL as the device by the actual device.
>> Do you know the commit ID of this recent change?
>> It's useful for review of your change, and to know to which versions your
>> patch should be backported.
> 
> The commit ID of this recent change is"f6b6b52 thermal_hwmon: Pass the originating device down to hwmon_device_register_with_info".
> 
If thermal doesn't want hwmon to use the thermal zone device, it should pass
the parent of that device as parameter.

>>> This causes the "No sensors found" error. This patch is to fix this error.
>> On which platform do you see this failure?
>> Thanks again!
> 
> This error is found on Gen2 Lager board v4.19-rc2 by RVC team.
> 

Some more details about the error would be useful.

Guenter

> 
> Best regards,
> Dong/Jinso
> 
>
Geert Uytterhoeven Oct. 2, 2018, 12:57 p.m. UTC | #3
CC  Marc, Eduardo

On Tue, Oct 2, 2018 at 2:50 PM Guenter Roeck <linux@roeck-us.net> wrote:
> On 10/02/2018 01:35 AM, Cao Van Dong wrote:
> > In __hwmon_device_register() function of hwmon.c, we have assigned 'dev' directly to 'hdev->parent'.
> > Formerly, when registering the hwmon device, we pass NULL as the device. This is not affected.
> > Recently, the developer has replaced the parameter NULL as the device by the actual device.
> > This causes the "No sensors found" error. This patch is to fix this error.
> >
> > This patch is based on the v4.19-rc3 tag.
> >
>
> NACK.
>
> This is wrong. The passed device is the hwmon driver's parent device. Using that device's
> parent would be wrong. Indeed, that device could be a platform device with no parent.
> The problem must be fixed in the calling code.
>
> Guenter
>
> > ---
> >   drivers/hwmon/hwmon.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
> > index 33d5128..7c8d3cb 100644
> > --- a/drivers/hwmon/hwmon.c
> > +++ b/drivers/hwmon/hwmon.c
> > @@ -610,7 +610,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
> >
> >       hwdev->name = name;
> >       hdev->class = &hwmon_class;
> > -     hdev->parent = dev;
> > +     hdev->parent = dev->parent;
> >       hdev->of_node = dev ? dev->of_node : NULL;
> >       hwdev->chip = chip;
> >       dev_set_drvdata(hdev, drvdata);
Geert Uytterhoeven Oct. 2, 2018, 12:58 p.m. UTC | #4
CC  Marc, Eduardo

On Tue, Oct 2, 2018 at 2:56 PM Guenter Roeck <linux@roeck-us.net> wrote:
>
> On 10/02/2018 02:06 AM, Cao Van Dong wrote:
> > Dear Geert-san,
> >
> > Thanks for your comment!
> >
> >>> In __hwmon_device_register() function of hwmon.c, we have assigned 'dev' directly to 'hdev->parent'.
> >>> Formerly, when registering the hwmon device, we pass NULL as the device. This is not affected.
> >>> Recently, the developer has replaced the parameter NULL as the device by the actual device.
> >> Do you know the commit ID of this recent change?
> >> It's useful for review of your change, and to know to which versions your
> >> patch should be backported.
> >
> > The commit ID of this recent change is"f6b6b52 thermal_hwmon: Pass the originating device down to hwmon_device_register_with_info".
> >
> If thermal doesn't want hwmon to use the thermal zone device, it should pass
> the parent of that device as parameter.
>
> >>> This causes the "No sensors found" error. This patch is to fix this error.
> >> On which platform do you see this failure?
> >> Thanks again!
> >
> > This error is found on Gen2 Lager board v4.19-rc2 by RVC team.
> >
>
> Some more details about the error would be useful.

Gr{oetje,eeting}s,

                        Geert
Cao Van Dong Oct. 3, 2018, 1:17 a.m. UTC | #5
Dear Guente-san,

Thanks for your comment!
>>>> In __hwmon_device_register() function of hwmon.c, we have assigned 
>>>> 'dev' directly to 'hdev->parent'.
>>>> Formerly, when registering the hwmon device, we pass NULL as the 
>>>> device. This is not affected.
>>>> Recently, the developer has replaced the parameter NULL as the 
>>>> device by the actual device.
>>> Do you know the commit ID of this recent change?
>>> It's useful for review of your change, and to know to which versions 
>>> your
>>> patch should be backported.
>>
>> The commit ID of this recent change is"f6b6b52 thermal_hwmon: Pass 
>> the originating device down to hwmon_device_register_with_info".
>>
> If thermal doesn't want hwmon to use the thermal zone device, it 
> should pass
> the parent of that device as parameter.

I will see the feedback from Marc-san.
>
>>>> This causes the "No sensors found" error. This patch is to fix this 
>>>> error.
>>> On which platform do you see this failure?
>>> Thanks again!
>>
>> This error is found on Gen2 Lager board v4.19-rc2 by RVC team.
>>
>
> Some more details about the error would be useful.

Below are some information about confirm the error:

- Before the commit "f6b6b52ef7a54160c0a4d2b56a58f84a2e5b33c5" (pass 
NULL as the device):
"root@linaro-nano:~# sensors
  cpu_thermal-virtual-0
  Adapter: Virtual device
  temp1:        +30.0�°C  (crit = +95.0�°C)

  root@linaro-nano:~# "


- After the commit "f6b6b52ef7a54160c0a4d2b56a58f84a2e5b33c5" (pass the 
actual device):
"root@linaro-nano:~# sensors
  No sensors found!
  Make sure you loaded all the kernel drivers you need.
  Try sensors-detect to find out which these are.
  root@linaro-nano:~#"


- At my patch (change dev to dev->parent):
"root@linaro-nano:~# sensors
  cpu_thermal-virtual-0
  Adapter: Virtual device
  temp1:        +30.0�°C  (crit = +95.0�°C)

  root@linaro-nano:~#"


Regards,
Dong/Jinso
Cao Van Dong Oct. 3, 2018, 1:33 a.m. UTC | #6
Dear Guenter-san,

Thanks for your comment!

>> In __hwmon_device_register() function of hwmon.c, we have assigned 
>> 'dev' directly to 'hdev->parent'.
>> Formerly, when registering the hwmon device, we pass NULL as the 
>> device. This is not affected.
>> Recently, the developer has replaced the parameter NULL as the device 
>> by the actual device.
>> This causes the "No sensors found" error. This patch is to fix this 
>> error.
>>
>> This patch is based on the v4.19-rc3 tag.
>>
>
> NACK.
>
> This is wrong. The passed device is the hwmon driver's parent device. 
> Using that device's
> parent would be wrong. Indeed, that device could be a platform device 
> with no parent.
Maybe I did not know all problem. If I'm wrong, sorry for the inconvenience.

> The problem must be fixed in the calling code.
>
I will see the feedback from Marc-san.


Regards,
Dong/Jinso

>> ---
>>   drivers/hwmon/hwmon.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
>> index 33d5128..7c8d3cb 100644
>> --- a/drivers/hwmon/hwmon.c
>> +++ b/drivers/hwmon/hwmon.c
>> @@ -610,7 +610,7 @@ __hwmon_device_register(struct device *dev, const 
>> char *name, void *drvdata,
>>         hwdev->name = name;
>>       hdev->class = &hwmon_class;
>> -    hdev->parent = dev;
>> +    hdev->parent = dev->parent;
>>       hdev->of_node = dev ? dev->of_node : NULL;
>>       hwdev->chip = chip;
>>       dev_set_drvdata(hdev, drvdata);
Guenter Roeck Oct. 3, 2018, 3:04 a.m. UTC | #7
On 10/02/2018 06:33 PM, Cao Van Dong wrote:
> Dear Guenter-san,
> 
> Thanks for your comment!
> 
>>> In __hwmon_device_register() function of hwmon.c, we have assigned 'dev' directly to 'hdev->parent'.
>>> Formerly, when registering the hwmon device, we pass NULL as the device. This is not affected.
>>> Recently, the developer has replaced the parameter NULL as the device by the actual device.
>>> This causes the "No sensors found" error. This patch is to fix this error.
>>>
>>> This patch is based on the v4.19-rc3 tag.
>>>
>>
>> NACK.
>>
>> This is wrong. The passed device is the hwmon driver's parent device. Using that device's
>> parent would be wrong. Indeed, that device could be a platform device with no parent.
> Maybe I did not know all problem. If I'm wrong, sorry for the inconvenience.
> 
>> The problem must be fixed in the calling code.
>>
> I will see the feedback from Marc-san.
> 

The "No sensors found" message is from the "sensors" application.
The device type associated with the passed device is unknown to
libsensors (it is parsed from the parent device subsystem name -
what is that, anyway ?). This could be addressed in libsensors,
or the thermal subsystem could attach itself to a known subsystem,
or the thermal subsystem must pass a pointer the parent device.

Again, trying to address the problem in the hwmon core is simply wrong.

Guenter

> 
> Regards,
> Dong/Jinso
> 
>>> ---
>>>   drivers/hwmon/hwmon.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
>>> index 33d5128..7c8d3cb 100644
>>> --- a/drivers/hwmon/hwmon.c
>>> +++ b/drivers/hwmon/hwmon.c
>>> @@ -610,7 +610,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
>>>         hwdev->name = name;
>>>       hdev->class = &hwmon_class;
>>> -    hdev->parent = dev;
>>> +    hdev->parent = dev->parent;
>>>       hdev->of_node = dev ? dev->of_node : NULL;
>>>       hwdev->chip = chip;
>>>       dev_set_drvdata(hdev, drvdata);
>
Cao Van Dong Oct. 3, 2018, 3:16 a.m. UTC | #8
Dear Guenter-san,

Thanks for your comment!

>>>> In __hwmon_device_register() function of hwmon.c, we have assigned 
>>>> 'dev' directly to 'hdev->parent'.
>>>> Formerly, when registering the hwmon device, we pass NULL as the 
>>>> device. This is not affected.
>>>> Recently, the developer has replaced the parameter NULL as the 
>>>> device by the actual device.
>>>> This causes the "No sensors found" error. This patch is to fix this 
>>>> error.
>>>>
>>>> This patch is based on the v4.19-rc3 tag.
>>>>
>>>
>>> NACK.
>>>
>>> This is wrong. The passed device is the hwmon driver's parent 
>>> device. Using that device's
>>> parent would be wrong. Indeed, that device could be a platform 
>>> device with no parent.
>> Maybe I did not know all problem. If I'm wrong, sorry for the 
>> inconvenience.
>>
>>> The problem must be fixed in the calling code.
>>>
>> I will see the feedback from Marc-san.
>>
>
> The "No sensors found" message is from the "sensors" application.
> The device type associated with the passed device is unknown to
> libsensors (it is parsed from the parent device subsystem name -
> what is that, anyway ?). This could be addressed in libsensors,
> or the thermal subsystem could attach itself to a known subsystem,
> or the thermal subsystem must pass a pointer the parent device.
>
> Again, trying to address the problem in the hwmon core is simply wrong.
>
I will create other patch(v2) to fix for this error from the calling 
function.


Regards,
Dong/Jinso


>>>> ---
>>>>   drivers/hwmon/hwmon.c | 2 +-
>>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
>>>> index 33d5128..7c8d3cb 100644
>>>> --- a/drivers/hwmon/hwmon.c
>>>> +++ b/drivers/hwmon/hwmon.c
>>>> @@ -610,7 +610,7 @@ __hwmon_device_register(struct device *dev, 
>>>> const char *name, void *drvdata,
>>>>         hwdev->name = name;
>>>>       hdev->class = &hwmon_class;
>>>> -    hdev->parent = dev;
>>>> +    hdev->parent = dev->parent;
>>>>       hdev->of_node = dev ? dev->of_node : NULL;
>>>>       hwdev->chip = chip;
>>>>       dev_set_drvdata(hdev, drvdata);
diff mbox series

Patch

diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
index 33d5128..7c8d3cb 100644
--- a/drivers/hwmon/hwmon.c
+++ b/drivers/hwmon/hwmon.c
@@ -610,7 +610,7 @@  __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
 
 	hwdev->name = name;
 	hdev->class = &hwmon_class;
-	hdev->parent = dev;
+	hdev->parent = dev->parent;
 	hdev->of_node = dev ? dev->of_node : NULL;
 	hwdev->chip = chip;
 	dev_set_drvdata(hdev, drvdata);