diff options
author | Rafael J. Wysocki <[email protected]> | 2024-07-11 14:39:02 +0200 |
---|---|---|
committer | Rafael J. Wysocki <[email protected]> | 2024-07-12 15:14:57 +0200 |
commit | 3669716401921c4c545ac2998d7c67f9727ee056 (patch) | |
tree | 5ef501b14990c42bb78b805fae8396dccf513d4f | |
parent | 5b674baa596e624fde8bf62b9a3d8a26eef399b2 (diff) |
thermal: core: Add sanity checks for polling_delay and passive_delay
If polling_delay is nonzero and passive_delay is greater than
polling_delay, the thermal zone temperature will be updated less
often when tz->passive is nonzero, which is not as expected. Make
the thermal zone registration fail with -EINVAL in that case as
this is a clear thermal zone configuration mistake.
If polling_delay is nonzero and passive_delay is 0, which is regarded
as a valid thermal zone configuration, the thermal zone will use polling
except when tz->passive is nonzero. However, the expected behavior in
that case is to continue temperature polling with the same delay value
regardless of tz->passive, so set passive_delay to the polling_delay
value then.
Signed-off-by: Rafael J. Wysocki <[email protected]>
Reviewed-by: Daniel Lezcano <[email protected]>
Link: https://patch.msgid.link/[email protected]
-rw-r--r-- | drivers/thermal/thermal_core.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index 7139f729a83d..24e0520340f6 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -1390,6 +1390,14 @@ thermal_zone_device_register_with_trips(const char *type, if (num_trips > 0 && !trips) return ERR_PTR(-EINVAL); + if (polling_delay) { + if (passive_delay > polling_delay) + return ERR_PTR(-EINVAL); + + if (!passive_delay) + passive_delay = polling_delay; + } + if (!thermal_class) return ERR_PTR(-ENODEV); |