[v3,0/3] thermal: introduce by-name softlink
mbox series

Message ID 20191205071953.121511-1-wvw@google.com
Headers show
Series
  • thermal: introduce by-name softlink
Related show

Message

Wei Wang Dec. 5, 2019, 7:19 a.m. UTC
The paths thermal_zone%d and cooling_device%d are not intuitive and the
numbers are subject to change due to device tree change. This usually
leads to tree traversal in userspace code.
The patch creates `tz-by-name' and `cdev-by-name' for thermal zone and
cooling_device respectively.


Changes since v1 [1]:
 * Split cooling device registration into a seperate patch
Changes since v2 [2]:
 * Split improve error message in thermal zone registration

[1]: v1: https://lore.kernel.org/patchwork/patch/1139450/
[2]: v2: https://lkml.org/lkml/2019/12/4/1291

Wei Wang (3):
  thermal: prevent cooling device with no type to be registered
  thermal: improve error message in thermal zone registration
  thermal: create softlink by name for thermal_zone and cooling_device

 drivers/thermal/thermal_core.c | 55 +++++++++++++++++++++++++++-------
 1 file changed, 44 insertions(+), 11 deletions(-)

Comments

Daniel Lezcano Dec. 10, 2019, 2:36 p.m. UTC | #1
On 05/12/2019 08:19, Wei Wang wrote:
> The paths thermal_zone%d and cooling_device%d are not intuitive and the
> numbers are subject to change due to device tree change. This usually
> leads to tree traversal in userspace code.
> The patch creates `tz-by-name' and `cdev-by-name' for thermal zone and
> cooling_device respectively.

Instead of adding another ABI, I suggest we put the current one
deprecated with a warning in the dmesg, update the documentation and
change the name the next version.


> Changes since v1 [1]:
>  * Split cooling device registration into a seperate patch
> Changes since v2 [2]:
>  * Split improve error message in thermal zone registration
> 
> [1]: v1: https://lore.kernel.org/patchwork/patch/1139450/
> [2]: v2: https://lkml.org/lkml/2019/12/4/1291
> 
> Wei Wang (3):
>   thermal: prevent cooling device with no type to be registered
>   thermal: improve error message in thermal zone registration
>   thermal: create softlink by name for thermal_zone and cooling_device
> 
>  drivers/thermal/thermal_core.c | 55 +++++++++++++++++++++++++++-------
>  1 file changed, 44 insertions(+), 11 deletions(-)
>
Wei Wang Dec. 10, 2019, 8:01 p.m. UTC | #2
On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
>
> On 05/12/2019 08:19, Wei Wang wrote:
> > The paths thermal_zone%d and cooling_device%d are not intuitive and the
> > numbers are subject to change due to device tree change. This usually
> > leads to tree traversal in userspace code.
> > The patch creates `tz-by-name' and `cdev-by-name' for thermal zone and
> > cooling_device respectively.
>
> Instead of adding another ABI, I suggest we put the current one
> deprecated with a warning in the dmesg, update the documentation and
> change the name the next version.
>
>

IMHO, we should keep the existing path which is a common pattern for
sysfs interface. There are reasons we need couple thermal zone and
cooling device in one class, but might be worth considering split as
the latter might be used for other purposes e.g. battery current limit
for preventive vdrop prevention. By nature, thermal zone are sensors,
and cooling devices are usually components with potential high power
use.


> > Changes since v1 [1]:
> >  * Split cooling device registration into a seperate patch
> > Changes since v2 [2]:
> >  * Split improve error message in thermal zone registration
> >
> > [1]: v1: https://lore.kernel.org/patchwork/patch/1139450/
> > [2]: v2: https://lkml.org/lkml/2019/12/4/1291
> >
> > Wei Wang (3):
> >   thermal: prevent cooling device with no type to be registered
> >   thermal: improve error message in thermal zone registration
> >   thermal: create softlink by name for thermal_zone and cooling_device
> >
> >  drivers/thermal/thermal_core.c | 55 +++++++++++++++++++++++++++-------
> >  1 file changed, 44 insertions(+), 11 deletions(-)
> >
>
>
> --
>  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
>
> Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
> <http://twitter.com/#!/linaroorg> Twitter |
> <http://www.linaro.org/linaro-blog/> Blog
>
Daniel Lezcano Dec. 10, 2019, 8:54 p.m. UTC | #3
On 10/12/2019 21:01, Wei Wang wrote:
> On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
> <daniel.lezcano@linaro.org> wrote:
>>
>> On 05/12/2019 08:19, Wei Wang wrote:
>>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
>>> numbers are subject to change due to device tree change. This usually
>>> leads to tree traversal in userspace code.
>>> The patch creates `tz-by-name' and `cdev-by-name' for thermal zone and
>>> cooling_device respectively.
>>
>> Instead of adding another ABI, I suggest we put the current one
>> deprecated with a warning in the dmesg, update the documentation and
>> change the name the next version.
>>
>>
> 
> IMHO, we should keep the existing path which is a common pattern for
> sysfs interface. There are reasons we need couple thermal zone and
> cooling device in one class, but might be worth considering split as
> the latter might be used for other purposes e.g. battery current limit
> for preventive vdrop prevention. By nature, thermal zone are sensors,
> and cooling devices are usually components with potential high power
> use.

[Added Greghk and Rafael in Cc]

I understand but I would like to have Greg's and Rafael's opinion on that.

The result is:

ls -al /sys/devices/virtual/thermal/
total 0
drwxr-xr-x 22 root root 0 Dec 10 12:34 .
drwxr-xr-x 15 root root 0 Dec 10 12:34 ..
drwxr-xr-x  2 root root 0 Dec 10 13:18 cdev-by-name
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device0
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device1
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device10
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device11
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device12
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device13
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device14
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device15
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device2
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device3
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device4
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device5
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device6
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device7
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device8
drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device9
drwxr-xr-x  3 root root 0 Dec 10 12:34 thermal_zone0
drwxr-xr-x  3 root root 0 Dec 10 12:34 thermal_zone1
drwxr-xr-x  2 root root 0 Dec 10 13:18 tz-by-name

ls -al /sys/devices/virtual/thermal/cdev-by-name/
total 0
drwxr-xr-x  2 root root 0 Dec 10 13:18 .
drwxr-xr-x 22 root root 0 Dec 10 12:34 ..
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-cpufreq-0 ->
../cooling_device0
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-cpufreq-1 ->
../cooling_device1
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-0 -> ../cooling_device2
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-1 -> ../cooling_device3
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-10 ->
../cooling_device12
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-11 ->
../cooling_device13
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-12 ->
../cooling_device14
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-13 ->
../cooling_device15
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-2 -> ../cooling_device4
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-3 -> ../cooling_device5
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-4 -> ../cooling_device6
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-5 -> ../cooling_device7
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-6 -> ../cooling_device8
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-7 -> ../cooling_device9
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-8 -> ../cooling_device10
lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-idle-9 -> ../cooling_device11

ls -al /sys/devices/virtual/thermal/tz-by-name/
total 0
drwxr-xr-x  2 root root 0 Dec 10 13:18 .
drwxr-xr-x 22 root root 0 Dec 10 12:34 ..
lrwxrwxrwx  1 root root 0 Dec 10 20:53 cpu -> ../thermal_zone0
lrwxrwxrwx  1 root root 0 Dec 10 20:53 gpu -> ../thermal_zone1
Greg Kroah-Hartman Dec. 11, 2019, 8:53 a.m. UTC | #4
On Tue, Dec 10, 2019 at 09:54:11PM +0100, Daniel Lezcano wrote:
> On 10/12/2019 21:01, Wei Wang wrote:
> > On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
> > <daniel.lezcano@linaro.org> wrote:
> >>
> >> On 05/12/2019 08:19, Wei Wang wrote:
> >>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
> >>> numbers are subject to change due to device tree change. This usually
> >>> leads to tree traversal in userspace code.
> >>> The patch creates `tz-by-name' and `cdev-by-name' for thermal zone and
> >>> cooling_device respectively.
> >>
> >> Instead of adding another ABI, I suggest we put the current one
> >> deprecated with a warning in the dmesg, update the documentation and
> >> change the name the next version.
> >>
> >>
> > 
> > IMHO, we should keep the existing path which is a common pattern for
> > sysfs interface. There are reasons we need couple thermal zone and
> > cooling device in one class, but might be worth considering split as
> > the latter might be used for other purposes e.g. battery current limit
> > for preventive vdrop prevention. By nature, thermal zone are sensors,
> > and cooling devices are usually components with potential high power
> > use.
> 
> [Added Greghk and Rafael in Cc]
> 
> I understand but I would like to have Greg's and Rafael's opinion on that.
> 
> The result is:
> 
> ls -al /sys/devices/virtual/thermal/
> total 0
> drwxr-xr-x 22 root root 0 Dec 10 12:34 .
> drwxr-xr-x 15 root root 0 Dec 10 12:34 ..
> drwxr-xr-x  2 root root 0 Dec 10 13:18 cdev-by-name

Ick!

> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device0
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device1
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device10
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device11
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device12
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device13
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device14
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device15
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device2
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device3
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device4
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device5
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device6
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device7
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device8
> drwxr-xr-x  3 root root 0 Dec 10 12:34 cooling_device9
> drwxr-xr-x  3 root root 0 Dec 10 12:34 thermal_zone0
> drwxr-xr-x  3 root root 0 Dec 10 12:34 thermal_zone1
> drwxr-xr-x  2 root root 0 Dec 10 13:18 tz-by-name
> 
> ls -al /sys/devices/virtual/thermal/cdev-by-name/
> total 0
> drwxr-xr-x  2 root root 0 Dec 10 13:18 .
> drwxr-xr-x 22 root root 0 Dec 10 12:34 ..
> lrwxrwxrwx  1 root root 0 Dec 10 13:18 thermal-cpufreq-0 ->
> ../cooling_device0

Ick ick ick!

What is this all for?

Where is the Documentation/ABI/ entry trying to explain this mess?
Please provide that and we can go from there as I have no idea what this
is trying to "help with".

thanks,

greg k-h
Greg Kroah-Hartman Dec. 11, 2019, 8:54 a.m. UTC | #5
On Tue, Dec 10, 2019 at 09:54:11PM +0100, Daniel Lezcano wrote:
> On 10/12/2019 21:01, Wei Wang wrote:
> > On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
> > <daniel.lezcano@linaro.org> wrote:
> >>
> >> On 05/12/2019 08:19, Wei Wang wrote:
> >>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
> >>> numbers are subject to change due to device tree change. This usually
> >>> leads to tree traversal in userspace code.

tree traversal is supposed to be done in userspace code :)

But what userspace code needs to do this, and for what?

thanks,

greg k-h
Wei Wang Dec. 11, 2019, 8:11 p.m. UTC | #6
On Wed, Dec 11, 2019 at 12:54 AM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> On Tue, Dec 10, 2019 at 09:54:11PM +0100, Daniel Lezcano wrote:
> > On 10/12/2019 21:01, Wei Wang wrote:
> > > On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
> > > <daniel.lezcano@linaro.org> wrote:
> > >>
> > >> On 05/12/2019 08:19, Wei Wang wrote:
> > >>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
> > >>> numbers are subject to change due to device tree change. This usually
> > >>> leads to tree traversal in userspace code.
>
> tree traversal is supposed to be done in userspace code :)
>
Yes, that can be done in userspace, but given the amount of thermal
zones we have in some mobile devices, this will bring a lot of
convenience.

e.g. this is on Pixel 4 XL:
coral:/ # ls  /sys/devices/virtual/thermal/
cdev-by-name      cooling_device15  cooling_device22  cooling_device3
 cooling_device9  thermal_zone15  thermal_zone22  thermal_zone3
thermal_zone37  thermal_zone44  thermal_zone51  thermal_zone59
thermal_zone66  thermal_zone73  thermal_zone80  thermal_zone88
cooling_device0   cooling_device16  cooling_device23  cooling_device30
 thermal_zone0    thermal_zone16  thermal_zone23  thermal_zone30
thermal_zone38  thermal_zone45  thermal_zone52  thermal_zone6
thermal_zone67  thermal_zone74  thermal_zone81  thermal_zone9
cooling_device1   cooling_device17  cooling_device24  cooling_device31
 thermal_zone1    thermal_zone17  thermal_zone24  thermal_zone31
thermal_zone39  thermal_zone46  thermal_zone53  thermal_zone60
thermal_zone68  thermal_zone75  thermal_zone82  tz-by-name
cooling_device10  cooling_device18  cooling_device25  cooling_device4
 thermal_zone10   thermal_zone18  thermal_zone25  thermal_zone32
thermal_zone4   thermal_zone47  thermal_zone54  thermal_zone61
thermal_zone69  thermal_zone76  thermal_zone83
cooling_device11  cooling_device19  cooling_device26  cooling_device5
 thermal_zone11   thermal_zone19  thermal_zone26  thermal_zone33
thermal_zone40  thermal_zone48  thermal_zone55  thermal_zone62
thermal_zone7   thermal_zone77  thermal_zone84
cooling_device12  cooling_device2   cooling_device27  cooling_device6
 thermal_zone12   thermal_zone2   thermal_zone27  thermal_zone34
thermal_zone41  thermal_zone49  thermal_zone56  thermal_zone63
thermal_zone70  thermal_zone78  thermal_zone85
cooling_device13  cooling_device20  cooling_device28  cooling_device7
 thermal_zone13   thermal_zone20  thermal_zone28  thermal_zone35
thermal_zone42  thermal_zone5   thermal_zone57  thermal_zone64
thermal_zone71  thermal_zone79  thermal_zone86
cooling_device14  cooling_device21  cooling_device29  cooling_device8
 thermal_zone14   thermal_zone21  thermal_zone29  thermal_zone36
thermal_zone43  thermal_zone50  thermal_zone58  thermal_zone65
thermal_zone72  thermal_zone8   thermal_zone87


> But what userspace code needs to do this, and for what?
In Android, thermal daemon and thermal HAL as well as some init.rc
script would use those thermal paths for managing and monitoring
thermal. The daemon/HAL could have logic pipled in, however Android's
init.rc script would be really tricky.
On a related note, we also create /dev/block/by-name links from userspace.

Thanks!
-Wei
>
> thanks,
>
> greg k-h
Daniel Lezcano Dec. 11, 2019, 9:11 p.m. UTC | #7
On 11/12/2019 21:11, Wei Wang wrote:
> On Wed, Dec 11, 2019 at 12:54 AM Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
>>
>> On Tue, Dec 10, 2019 at 09:54:11PM +0100, Daniel Lezcano wrote:
>>> On 10/12/2019 21:01, Wei Wang wrote:
>>>> On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
>>>> <daniel.lezcano@linaro.org> wrote:
>>>>>
>>>>> On 05/12/2019 08:19, Wei Wang wrote:
>>>>>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
>>>>>> numbers are subject to change due to device tree change. This usually
>>>>>> leads to tree traversal in userspace code.
>>
>> tree traversal is supposed to be done in userspace code :)
>>
> Yes, that can be done in userspace, but given the amount of thermal
> zones we have in some mobile devices, this will bring a lot of
> convenience.

But usually all these thermal zones are fixed and building the name<->tz
association is just a question of a few lines of code from userspace,
no? What would be the benefit of adding more ABI?

If there is a thermal zone change, then a notification can be used, so
the userspace code rebuild the name<->tz, no?

> e.g. this is on Pixel 4 XL:
> coral:/ # ls  /sys/devices/virtual/thermal/
> cdev-by-name      cooling_device15  cooling_device22  cooling_device3
>  cooling_device9  thermal_zone15  thermal_zone22  thermal_zone3
> thermal_zone37  thermal_zone44  thermal_zone51  thermal_zone59
> thermal_zone66  thermal_zone73  thermal_zone80  thermal_zone88
> cooling_device0   cooling_device16  cooling_device23  cooling_device30
>  thermal_zone0    thermal_zone16  thermal_zone23  thermal_zone30
> thermal_zone38  thermal_zone45  thermal_zone52  thermal_zone6
> thermal_zone67  thermal_zone74  thermal_zone81  thermal_zone9
> cooling_device1   cooling_device17  cooling_device24  cooling_device31
>  thermal_zone1    thermal_zone17  thermal_zone24  thermal_zone31
> thermal_zone39  thermal_zone46  thermal_zone53  thermal_zone60
> thermal_zone68  thermal_zone75  thermal_zone82  tz-by-name
> cooling_device10  cooling_device18  cooling_device25  cooling_device4
>  thermal_zone10   thermal_zone18  thermal_zone25  thermal_zone32
> thermal_zone4   thermal_zone47  thermal_zone54  thermal_zone61
> thermal_zone69  thermal_zone76  thermal_zone83
> cooling_device11  cooling_device19  cooling_device26  cooling_device5
>  thermal_zone11   thermal_zone19  thermal_zone26  thermal_zone33
> thermal_zone40  thermal_zone48  thermal_zone55  thermal_zone62
> thermal_zone7   thermal_zone77  thermal_zone84
> cooling_device12  cooling_device2   cooling_device27  cooling_device6
>  thermal_zone12   thermal_zone2   thermal_zone27  thermal_zone34
> thermal_zone41  thermal_zone49  thermal_zone56  thermal_zone63
> thermal_zone70  thermal_zone78  thermal_zone85
> cooling_device13  cooling_device20  cooling_device28  cooling_device7
>  thermal_zone13   thermal_zone20  thermal_zone28  thermal_zone35
> thermal_zone42  thermal_zone5   thermal_zone57  thermal_zone64
> thermal_zone71  thermal_zone79  thermal_zone86
> cooling_device14  cooling_device21  cooling_device29  cooling_device8
>  thermal_zone14   thermal_zone21  thermal_zone29  thermal_zone36
> thermal_zone43  thermal_zone50  thermal_zone58  thermal_zone65
> thermal_zone72  thermal_zone8   thermal_zone87
> 
> 
>> But what userspace code needs to do this, and for what?
> In Android, thermal daemon and thermal HAL as well as some init.rc
> script would use those thermal paths for managing and monitoring
> thermal. The daemon/HAL could have logic pipled in, however Android's
> init.rc script would be really tricky.
> On a related note, we also create /dev/block/by-name links from userspace.
> 
> Thanks!
> -Wei
>>
>> thanks,
>>
>> greg k-h
Wei Wang Dec. 11, 2019, 10:19 p.m. UTC | #8
On Wed, Dec 11, 2019 at 1:11 PM Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
>
> On 11/12/2019 21:11, Wei Wang wrote:
> > On Wed, Dec 11, 2019 at 12:54 AM Greg Kroah-Hartman
> > <gregkh@linuxfoundation.org> wrote:
> >>
> >> On Tue, Dec 10, 2019 at 09:54:11PM +0100, Daniel Lezcano wrote:
> >>> On 10/12/2019 21:01, Wei Wang wrote:
> >>>> On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
> >>>> <daniel.lezcano@linaro.org> wrote:
> >>>>>
> >>>>> On 05/12/2019 08:19, Wei Wang wrote:
> >>>>>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
> >>>>>> numbers are subject to change due to device tree change. This usually
> >>>>>> leads to tree traversal in userspace code.
> >>
> >> tree traversal is supposed to be done in userspace code :)
> >>
> > Yes, that can be done in userspace, but given the amount of thermal
> > zones we have in some mobile devices, this will bring a lot of
> > convenience.
>
> But usually all these thermal zones are fixed and building the name<->tz
> association is just a question of a few lines of code from userspace,
> no? What would be the benefit of adding more ABI?


code reuse as tz mapping is per device tree setup and we try to use
the same _type_  in thermal zone in shared client code for Android
thermal API.

>
> If there is a thermal zone change, then a notification can be used, so
> the userspace code rebuild the name<->tz, no?


Assuming you meant for type<->tz, this mapping won't change in runtime
in our case (not unloading things), but it could be changed due to
device tree change, e.g. adding/removing thermal zones.


>
> > e.g. this is on Pixel 4 XL:
> > coral:/ # ls  /sys/devices/virtual/thermal/
> > cdev-by-name      cooling_device15  cooling_device22  cooling_device3
> >  cooling_device9  thermal_zone15  thermal_zone22  thermal_zone3
> > thermal_zone37  thermal_zone44  thermal_zone51  thermal_zone59
> > thermal_zone66  thermal_zone73  thermal_zone80  thermal_zone88
> > cooling_device0   cooling_device16  cooling_device23  cooling_device30
> >  thermal_zone0    thermal_zone16  thermal_zone23  thermal_zone30
> > thermal_zone38  thermal_zone45  thermal_zone52  thermal_zone6
> > thermal_zone67  thermal_zone74  thermal_zone81  thermal_zone9
> > cooling_device1   cooling_device17  cooling_device24  cooling_device31
> >  thermal_zone1    thermal_zone17  thermal_zone24  thermal_zone31
> > thermal_zone39  thermal_zone46  thermal_zone53  thermal_zone60
> > thermal_zone68  thermal_zone75  thermal_zone82  tz-by-name
> > cooling_device10  cooling_device18  cooling_device25  cooling_device4
> >  thermal_zone10   thermal_zone18  thermal_zone25  thermal_zone32
> > thermal_zone4   thermal_zone47  thermal_zone54  thermal_zone61
> > thermal_zone69  thermal_zone76  thermal_zone83
> > cooling_device11  cooling_device19  cooling_device26  cooling_device5
> >  thermal_zone11   thermal_zone19  thermal_zone26  thermal_zone33
> > thermal_zone40  thermal_zone48  thermal_zone55  thermal_zone62
> > thermal_zone7   thermal_zone77  thermal_zone84
> > cooling_device12  cooling_device2   cooling_device27  cooling_device6
> >  thermal_zone12   thermal_zone2   thermal_zone27  thermal_zone34
> > thermal_zone41  thermal_zone49  thermal_zone56  thermal_zone63
> > thermal_zone70  thermal_zone78  thermal_zone85
> > cooling_device13  cooling_device20  cooling_device28  cooling_device7
> >  thermal_zone13   thermal_zone20  thermal_zone28  thermal_zone35
> > thermal_zone42  thermal_zone5   thermal_zone57  thermal_zone64
> > thermal_zone71  thermal_zone79  thermal_zone86
> > cooling_device14  cooling_device21  cooling_device29  cooling_device8
> >  thermal_zone14   thermal_zone21  thermal_zone29  thermal_zone36
> > thermal_zone43  thermal_zone50  thermal_zone58  thermal_zone65
> > thermal_zone72  thermal_zone8   thermal_zone87
> >
> >
> >> But what userspace code needs to do this, and for what?
> > In Android, thermal daemon and thermal HAL as well as some init.rc
> > script would use those thermal paths for managing and monitoring
> > thermal. The daemon/HAL could have logic pipled in, however Android's
> > init.rc script would be really tricky.
> > On a related note, we also create /dev/block/by-name links from userspace.
> >
> > Thanks!
> > -Wei
> >>
> >> thanks,
> >>
> >> greg k-h
>
>
> --
>  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
>
> Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
> <http://twitter.com/#!/linaroorg> Twitter |
> <http://www.linaro.org/linaro-blog/> Blog
>
Greg Kroah-Hartman Dec. 12, 2019, 7:34 a.m. UTC | #9
On Wed, Dec 11, 2019 at 12:11:53PM -0800, Wei Wang wrote:
> On Wed, Dec 11, 2019 at 12:54 AM Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> >
> > On Tue, Dec 10, 2019 at 09:54:11PM +0100, Daniel Lezcano wrote:
> > > On 10/12/2019 21:01, Wei Wang wrote:
> > > > On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
> > > > <daniel.lezcano@linaro.org> wrote:
> > > >>
> > > >> On 05/12/2019 08:19, Wei Wang wrote:
> > > >>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
> > > >>> numbers are subject to change due to device tree change. This usually
> > > >>> leads to tree traversal in userspace code.
> >
> > tree traversal is supposed to be done in userspace code :)
> >
> Yes, that can be done in userspace, but given the amount of thermal
> zones we have in some mobile devices, this will bring a lot of
> convenience.

Userspace is easier to write than kernel code.  Kernel code and apis you
have to retain for the next 20+ years, are you willing to do that?

> e.g. this is on Pixel 4 XL:
> coral:/ # ls  /sys/devices/virtual/thermal/
> cdev-by-name      cooling_device15  cooling_device22  cooling_device3
>  cooling_device9  thermal_zone15  thermal_zone22  thermal_zone3
> thermal_zone37  thermal_zone44  thermal_zone51  thermal_zone59
> thermal_zone66  thermal_zone73  thermal_zone80  thermal_zone88
> cooling_device0   cooling_device16  cooling_device23  cooling_device30
>  thermal_zone0    thermal_zone16  thermal_zone23  thermal_zone30
> thermal_zone38  thermal_zone45  thermal_zone52  thermal_zone6
> thermal_zone67  thermal_zone74  thermal_zone81  thermal_zone9
> cooling_device1   cooling_device17  cooling_device24  cooling_device31
>  thermal_zone1    thermal_zone17  thermal_zone24  thermal_zone31
> thermal_zone39  thermal_zone46  thermal_zone53  thermal_zone60
> thermal_zone68  thermal_zone75  thermal_zone82  tz-by-name
> cooling_device10  cooling_device18  cooling_device25  cooling_device4
>  thermal_zone10   thermal_zone18  thermal_zone25  thermal_zone32
> thermal_zone4   thermal_zone47  thermal_zone54  thermal_zone61
> thermal_zone69  thermal_zone76  thermal_zone83
> cooling_device11  cooling_device19  cooling_device26  cooling_device5
>  thermal_zone11   thermal_zone19  thermal_zone26  thermal_zone33
> thermal_zone40  thermal_zone48  thermal_zone55  thermal_zone62
> thermal_zone7   thermal_zone77  thermal_zone84
> cooling_device12  cooling_device2   cooling_device27  cooling_device6
>  thermal_zone12   thermal_zone2   thermal_zone27  thermal_zone34
> thermal_zone41  thermal_zone49  thermal_zone56  thermal_zone63
> thermal_zone70  thermal_zone78  thermal_zone85
> cooling_device13  cooling_device20  cooling_device28  cooling_device7
>  thermal_zone13   thermal_zone20  thermal_zone28  thermal_zone35
> thermal_zone42  thermal_zone5   thermal_zone57  thermal_zone64
> thermal_zone71  thermal_zone79  thermal_zone86
> cooling_device14  cooling_device21  cooling_device29  cooling_device8
>  thermal_zone14   thermal_zone21  thermal_zone29  thermal_zone36
> thermal_zone43  thermal_zone50  thermal_zone58  thermal_zone65
> thermal_zone72  thermal_zone8   thermal_zone87

Nice, you have a crazy SoC here, good luck!  :)

> > But what userspace code needs to do this, and for what?
> In Android, thermal daemon and thermal HAL as well as some init.rc
> script would use those thermal paths for managing and monitoring
> thermal. The daemon/HAL could have logic pipled in, however Android's
> init.rc script would be really tricky.

Then put that logic in your userspace code.

> On a related note, we also create /dev/block/by-name links from userspace.

Yes we do, from userspace, not from within the kernel itself, so I think
you have answered the question :)

thanks,

greg k-h
Sandeep Patil Dec. 15, 2019, 4:34 p.m. UTC | #10
Hi Wei,

(resending because I accidentally replied only to you. Also adding everyone
else back in the thread, not sure what happened before).

On Wed, Dec 11, 2019 at 02:19:03PM -0800, Wei Wang wrote:
> On Wed, Dec 11, 2019 at 1:11 PM Daniel Lezcano
> <daniel.lezcano@linaro.org> wrote:
> >
> > On 11/12/2019 21:11, Wei Wang wrote:
> > > On Wed, Dec 11, 2019 at 12:54 AM Greg Kroah-Hartman
> > > <gregkh@linuxfoundation.org> wrote:
> > >>
> > >> On Tue, Dec 10, 2019 at 09:54:11PM +0100, Daniel Lezcano wrote:
> > >>> On 10/12/2019 21:01, Wei Wang wrote:
> > >>>> On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
> > >>>> <daniel.lezcano@linaro.org> wrote:
> > >>>>>
> > >>>>> On 05/12/2019 08:19, Wei Wang wrote:
> > >>>>>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
> > >>>>>> numbers are subject to change due to device tree change. This usually
> > >>>>>> leads to tree traversal in userspace code.
> > >>
> > >> tree traversal is supposed to be done in userspace code :)
> > >>
> > > Yes, that can be done in userspace, but given the amount of thermal
> > > zones we have in some mobile devices, this will bring a lot of
> > > convenience.
> >
> > But usually all these thermal zones are fixed and building the name<->tz
> > association is just a question of a few lines of code from userspace,
> > no? What would be the benefit of adding more ABI?
> 
> 
> code reuse as tz mapping is per device tree setup and we try to use
> the same _type_  in thermal zone in shared client code for Android
> thermal API.

CMIIW, but the tz mapping today can still be done by parsing through the
directory the other way? (i.e. tz->type) instead of type->tz?

Also, I understand the resistance to add a new ABI since it will have to be
kept around forever. What would be worth knowing is if these mappings are
static (built once) or you have to go through and parse the directories every
time? AFAIU, the parsing (map creation) seems to only happen once during
boot, so we (Android) should be ok?

> 
> >
> > If there is a thermal zone change, then a notification can be used, so
> > the userspace code rebuild the name<->tz, no?
> 
> 
> Assuming you meant for type<->tz, this mapping won't change in runtime
> in our case (not unloading things), but it could be changed due to
> device tree change, e.g. adding/removing thermal zones.

I actually think we might need this after all. This assumes all tz devices
are registered when userspace (thermal hal/daemon) is coming up. However,
that may soon not be the case and we have to adjust for devices being added
in parallel with userspace?

So, may be we need to start monitoring uevents like we do for power supplies
too? In that case, the mapping can also be done dynamically.

Lastly, I think we can make a case further if there are benefits we can share
here other than convenience. Like startup time, handing hardware variations
etc? (Also point to the current userspace code that uses this)

- ssp
> 
> 
> >
> > > e.g. this is on Pixel 4 XL:
> > > coral:/ # ls  /sys/devices/virtual/thermal/
> > > cdev-by-name      cooling_device15  cooling_device22  cooling_device3
> > >  cooling_device9  thermal_zone15  thermal_zone22  thermal_zone3
> > > thermal_zone37  thermal_zone44  thermal_zone51  thermal_zone59
> > > thermal_zone66  thermal_zone73  thermal_zone80  thermal_zone88
> > > cooling_device0   cooling_device16  cooling_device23  cooling_device30
> > >  thermal_zone0    thermal_zone16  thermal_zone23  thermal_zone30
> > > thermal_zone38  thermal_zone45  thermal_zone52  thermal_zone6
> > > thermal_zone67  thermal_zone74  thermal_zone81  thermal_zone9
> > > cooling_device1   cooling_device17  cooling_device24  cooling_device31
> > >  thermal_zone1    thermal_zone17  thermal_zone24  thermal_zone31
> > > thermal_zone39  thermal_zone46  thermal_zone53  thermal_zone60
> > > thermal_zone68  thermal_zone75  thermal_zone82  tz-by-name
> > > cooling_device10  cooling_device18  cooling_device25  cooling_device4
> > >  thermal_zone10   thermal_zone18  thermal_zone25  thermal_zone32
> > > thermal_zone4   thermal_zone47  thermal_zone54  thermal_zone61
> > > thermal_zone69  thermal_zone76  thermal_zone83
> > > cooling_device11  cooling_device19  cooling_device26  cooling_device5
> > >  thermal_zone11   thermal_zone19  thermal_zone26  thermal_zone33
> > > thermal_zone40  thermal_zone48  thermal_zone55  thermal_zone62
> > > thermal_zone7   thermal_zone77  thermal_zone84
> > > cooling_device12  cooling_device2   cooling_device27  cooling_device6
> > >  thermal_zone12   thermal_zone2   thermal_zone27  thermal_zone34
> > > thermal_zone41  thermal_zone49  thermal_zone56  thermal_zone63
> > > thermal_zone70  thermal_zone78  thermal_zone85
> > > cooling_device13  cooling_device20  cooling_device28  cooling_device7
> > >  thermal_zone13   thermal_zone20  thermal_zone28  thermal_zone35
> > > thermal_zone42  thermal_zone5   thermal_zone57  thermal_zone64
> > > thermal_zone71  thermal_zone79  thermal_zone86
> > > cooling_device14  cooling_device21  cooling_device29  cooling_device8
> > >  thermal_zone14   thermal_zone21  thermal_zone29  thermal_zone36
> > > thermal_zone43  thermal_zone50  thermal_zone58  thermal_zone65
> > > thermal_zone72  thermal_zone8   thermal_zone87
> > >
> > >
> > >> But what userspace code needs to do this, and for what?
> > > In Android, thermal daemon and thermal HAL as well as some init.rc
> > > script would use those thermal paths for managing and monitoring
> > > thermal. The daemon/HAL could have logic pipled in, however Android's
> > > init.rc script would be really tricky.
> > > On a related note, we also create /dev/block/by-name links from userspace.
> > >
> > > Thanks!
> > > -Wei
> > >>
> > >> thanks,
> > >>
> > >> greg k-h
> >
> >
> > --
> >  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
> >
> > Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
> > <http://twitter.com/#!/linaroorg> Twitter |
> > <http://www.linaro.org/linaro-blog/> Blog
> >
Wei Wang Dec. 16, 2019, 5:37 p.m. UTC | #11
On Sun, Dec 15, 2019 at 8:34 AM Sandeep Patil <sspatil@android.com> wrote:
>
> Hi Wei,
>
> (resending because I accidentally replied only to you. Also adding everyone
> else back in the thread, not sure what happened before).
>
> On Wed, Dec 11, 2019 at 02:19:03PM -0800, Wei Wang wrote:
> > On Wed, Dec 11, 2019 at 1:11 PM Daniel Lezcano
> > <daniel.lezcano@linaro.org> wrote:
> > >
> > > On 11/12/2019 21:11, Wei Wang wrote:
> > > > On Wed, Dec 11, 2019 at 12:54 AM Greg Kroah-Hartman
> > > > <gregkh@linuxfoundation.org> wrote:
> > > >>
> > > >> On Tue, Dec 10, 2019 at 09:54:11PM +0100, Daniel Lezcano wrote:
> > > >>> On 10/12/2019 21:01, Wei Wang wrote:
> > > >>>> On Tue, Dec 10, 2019 at 6:36 AM Daniel Lezcano
> > > >>>> <daniel.lezcano@linaro.org> wrote:
> > > >>>>>
> > > >>>>> On 05/12/2019 08:19, Wei Wang wrote:
> > > >>>>>> The paths thermal_zone%d and cooling_device%d are not intuitive and the
> > > >>>>>> numbers are subject to change due to device tree change. This usually
> > > >>>>>> leads to tree traversal in userspace code.
> > > >>
> > > >> tree traversal is supposed to be done in userspace code :)
> > > >>
> > > > Yes, that can be done in userspace, but given the amount of thermal
> > > > zones we have in some mobile devices, this will bring a lot of
> > > > convenience.
> > >
> > > But usually all these thermal zones are fixed and building the name<->tz
> > > association is just a question of a few lines of code from userspace,
> > > no? What would be the benefit of adding more ABI?
> >
> >
> > code reuse as tz mapping is per device tree setup and we try to use
> > the same _type_  in thermal zone in shared client code for Android
> > thermal API.
>
> CMIIW, but the tz mapping today can still be done by parsing through the
> directory the other way? (i.e. tz->type) instead of type->tz?
>
Parsing can be done in clients, one particular place is for init, but
still possible.
https://cs.android.com/search?q=tz-by-name%20file:%5C.rc
Yeah, as said, we can definitely do pasing in every userspace daemon,
but AFAICT, all userspace codes (open source / closed source) are
using thermal zones / cooling devices  by "name/type". So I am
probling the possibility of having this kind of support for
convenience.
FYI, Chrome also feel this is useful
https://lore.kernel.org/lkml/20191206191545.GO228856@google.com/

> Also, I understand the resistance to add a new ABI since it will have to be
> kept around forever. What would be worth knowing is if these mappings are
> static (built once) or you have to go through and parse the directories every
> time? AFAIU, the parsing (map creation) seems to only happen once during
> boot, so we (Android) should be ok?
>
Those mapping are usually static nowadays, but could be changed if
modules are unloaded. Right now we only do UEVENT for userspace
governor,
https://github.com/torvalds/linux/blob/9c7db5004280767566e91a33445bf93aa479ef02/drivers/thermal/user_space.c#L37
Actually, I am about sending another RFC to add some more uevent to
userspace. Without the UEVENT, I think we cannot guarantee the mapping
is static.

> >
> > >
> > > If there is a thermal zone change, then a notification can be used, so
> > > the userspace code rebuild the name<->tz, no?
> >
> >
> > Assuming you meant for type<->tz, this mapping won't change in runtime
> > in our case (not unloading things), but it could be changed due to
> > device tree change, e.g. adding/removing thermal zones.
>
> I actually think we might need this after all. This assumes all tz devices
> are registered when userspace (thermal hal/daemon) is coming up. However,
> that may soon not be the case and we have to adjust for devices being added
> in parallel with userspace?
>
> So, may be we need to start monitoring uevents like we do for power supplies
> too? In that case, the mapping can also be done dynamically.
>
> Lastly, I think we can make a case further if there are benefits we can share
> here other than convenience. Like startup time, handing hardware variations
> etc? (Also point to the current userspace code that uses this)
>
I replied above before reading this part, and I guess we had the same
thought on this.

> - ssp
> >
> >
> > >
> > > > e.g. this is on Pixel 4 XL:
> > > > coral:/ # ls  /sys/devices/virtual/thermal/
> > > > cdev-by-name      cooling_device15  cooling_device22  cooling_device3
> > > >  cooling_device9  thermal_zone15  thermal_zone22  thermal_zone3
> > > > thermal_zone37  thermal_zone44  thermal_zone51  thermal_zone59
> > > > thermal_zone66  thermal_zone73  thermal_zone80  thermal_zone88
> > > > cooling_device0   cooling_device16  cooling_device23  cooling_device30
> > > >  thermal_zone0    thermal_zone16  thermal_zone23  thermal_zone30
> > > > thermal_zone38  thermal_zone45  thermal_zone52  thermal_zone6
> > > > thermal_zone67  thermal_zone74  thermal_zone81  thermal_zone9
> > > > cooling_device1   cooling_device17  cooling_device24  cooling_device31
> > > >  thermal_zone1    thermal_zone17  thermal_zone24  thermal_zone31
> > > > thermal_zone39  thermal_zone46  thermal_zone53  thermal_zone60
> > > > thermal_zone68  thermal_zone75  thermal_zone82  tz-by-name
> > > > cooling_device10  cooling_device18  cooling_device25  cooling_device4
> > > >  thermal_zone10   thermal_zone18  thermal_zone25  thermal_zone32
> > > > thermal_zone4   thermal_zone47  thermal_zone54  thermal_zone61
> > > > thermal_zone69  thermal_zone76  thermal_zone83
> > > > cooling_device11  cooling_device19  cooling_device26  cooling_device5
> > > >  thermal_zone11   thermal_zone19  thermal_zone26  thermal_zone33
> > > > thermal_zone40  thermal_zone48  thermal_zone55  thermal_zone62
> > > > thermal_zone7   thermal_zone77  thermal_zone84
> > > > cooling_device12  cooling_device2   cooling_device27  cooling_device6
> > > >  thermal_zone12   thermal_zone2   thermal_zone27  thermal_zone34
> > > > thermal_zone41  thermal_zone49  thermal_zone56  thermal_zone63
> > > > thermal_zone70  thermal_zone78  thermal_zone85
> > > > cooling_device13  cooling_device20  cooling_device28  cooling_device7
> > > >  thermal_zone13   thermal_zone20  thermal_zone28  thermal_zone35
> > > > thermal_zone42  thermal_zone5   thermal_zone57  thermal_zone64
> > > > thermal_zone71  thermal_zone79  thermal_zone86
> > > > cooling_device14  cooling_device21  cooling_device29  cooling_device8
> > > >  thermal_zone14   thermal_zone21  thermal_zone29  thermal_zone36
> > > > thermal_zone43  thermal_zone50  thermal_zone58  thermal_zone65
> > > > thermal_zone72  thermal_zone8   thermal_zone87
> > > >
> > > >
> > > >> But what userspace code needs to do this, and for what?
> > > > In Android, thermal daemon and thermal HAL as well as some init.rc
> > > > script would use those thermal paths for managing and monitoring
> > > > thermal. The daemon/HAL could have logic pipled in, however Android's
> > > > init.rc script would be really tricky.
> > > > On a related note, we also create /dev/block/by-name links from userspace.
> > > >
> > > > Thanks!
> > > > -Wei
> > > >>
> > > >> thanks,
> > > >>
> > > >> greg k-h
> > >
> > >
> > > --
> > >  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
> > >
> > > Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
> > > <http://twitter.com/#!/linaroorg> Twitter |
> > > <http://www.linaro.org/linaro-blog/> Blog
> > >