Re: [PATCH v2 0/2] Add a generic virtual thermal sensor
From: Alexandre Bailon <hidden>
Date: 2021-10-04 10:24:28
Also in:
lkml
On 9/22/21 10:10 AM, Daniel Lezcano wrote:
On 20/09/2021 15:12, Alexandre Bailon wrote:quoted
On 9/17/21 4:03 PM, Daniel Lezcano wrote:quoted
On 17/09/2021 15:33, Alexandre Bailon wrote:quoted
Hi Daniel, On 9/17/21 2:41 PM, Daniel Lezcano wrote:quoted
On 17/09/2021 09:27, Alexandre Bailon wrote:quoted
This series add a virtual thermal sensor. It could be used to get a temperature using some thermal sensors. Currently, the supported operations are max, min and avg. The virtual sensor could be easily extended to support others operations. Note: Currently, thermal drivers must explicitly register their sensors to make them available to the virtual sensor. This doesn't seem a good solution to me and I think it would be preferable to update the framework to register the list of each available sensors.Why must the drivers do that ?Because there are no central place where thermal sensor are registered. The only other way I found was to update thermal_of.c, to register the thermal sensors and make them available later to the virtual thermal sensor. To work, the virtual thermal need to get the sensor_data the ops from the thermal sensor. And as far I know, this is only registered in thermal_of.c, in the thermal zone data but I can't access it directly from the virtual thermal sensor. How would you do it ?Via the phandles when registering the virtual sensor ?As far I know, we can't get the ops or the sensor_data from the phandle of a thermal sensor. The closest solution I found so far would be to aggregate the thermal zones instead of thermal sensors. thermal_zone_device has the data needed and a thermal zone could be find easily using its name.Yeah, the concept of the thermal zone and the sensor are very close. There is the function in thermal_core.h: -> for_each_thermal_zone() You should be able for each 'slave' sensor, do a lookup to find the corresponding thermal_zone_device_ops.quoted
But, using a thermal_zone_device, I don't see how to handle module unloading.I think try_module_get() / module_put() are adequate for this situation as it is done on an external module and we can not rely on the exported symbols.
I don't see how it would be possible to use these functions. The thermal zone doesn't have the data required to use it. Maybe a more easier way is to use the thermal_zone_device mutex. If I get a lock before to use the thermal_zone_device ops, I have the guaranty that module won't be unloaded. When a "thermal of sensor" is unloaded, it calls thermal_zone_of_sensor_unregister which takes a lock before update ops. Thanks, Alexandre