* Re: [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum [not found] <20200529150549.GA154196@roeck-us.net> @ 2020-05-29 15:08 ` Andrzej Pietrasiewicz 2020-05-29 15:30 ` Guenter Roeck 0 siblings, 1 reply; 8+ messages in thread From: Andrzej Pietrasiewicz @ 2020-05-29 15:08 UTC (permalink / raw) To: Guenter Roeck Cc: Emmanuel Grumbach, Heiko Stuebner, Kalle Valo, linux-wireless, Peter Kaestle, platform-driver-x86, Vishal Kulkarni, Luca Coelho, Miquel Raynal, Shawn Guo, kernel, Fabio Estevam, Amit Kucheria, linux-rockchip, Chunyan Zhang, Daniel Lezcano, linux-acpi, linux-arm-kernel, Darren Hart, Zhang Rui, Gayatri Kammela, NXP Linux Team, Johannes Berg, linux-pm, Sascha Hauer, Intel Linux Wireless, Ido Schimmel, Niklas Söderlund, Jiri Pirko, Orson Zhai, Thomas Gleixner, Allison Randal, Support Opensource, netdev, Rafael J . Wysocki, Sebastian Reichel, linux-renesas-soc, Bartlomiej Zolnierkiewicz, Pengutronix Kernel Team, Baolin Wang, Len Brown, Enrico Weigelt, David S . Miller, Andy Shevchenko W dniu 29.05.2020 o 17:05, Guenter Roeck pisze: > On Thu, May 28, 2020 at 09:20:42PM +0200, Andrzej Pietrasiewicz wrote: >> Prepare for storing mode in struct thermal_zone_device. >> >> Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> > > What is the baseline for this series ? I can't get this patch to apply > on top of current mainline, nor on v5.6, nor on top of linux-next. > > Thanks, > Guenter > git://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git, branch "testing". base-commit: 351f4911a477ae01239c42f771f621d85b06ea10 Andrzej _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum 2020-05-29 15:08 ` [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum Andrzej Pietrasiewicz @ 2020-05-29 15:30 ` Guenter Roeck 0 siblings, 0 replies; 8+ messages in thread From: Guenter Roeck @ 2020-05-29 15:30 UTC (permalink / raw) To: Andrzej Pietrasiewicz Cc: Emmanuel Grumbach, Heiko Stuebner, Kalle Valo, linux-wireless, Peter Kaestle, platform-driver-x86, Vishal Kulkarni, Luca Coelho, Miquel Raynal, Shawn Guo, kernel, Fabio Estevam, Amit Kucheria, linux-rockchip, Chunyan Zhang, Daniel Lezcano, linux-acpi, linux-arm-kernel, Darren Hart, Zhang Rui, Gayatri Kammela, NXP Linux Team, Johannes Berg, linux-pm, Sascha Hauer, Intel Linux Wireless, Ido Schimmel, Niklas Söderlund, Jiri Pirko, Orson Zhai, Thomas Gleixner, Allison Randal, Support Opensource, netdev, Rafael J . Wysocki, Sebastian Reichel, linux-renesas-soc, Bartlomiej Zolnierkiewicz, Pengutronix Kernel Team, Baolin Wang, Len Brown, Enrico Weigelt, David S . Miller, Andy Shevchenko On 5/29/20 8:08 AM, Andrzej Pietrasiewicz wrote: > W dniu 29.05.2020 o 17:05, Guenter Roeck pisze: >> On Thu, May 28, 2020 at 09:20:42PM +0200, Andrzej Pietrasiewicz wrote: >>> Prepare for storing mode in struct thermal_zone_device. >>> >>> Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> >> >> What is the baseline for this series ? I can't get this patch to apply >> on top of current mainline, nor on v5.6, nor on top of linux-next. >> >> Thanks, >> Guenter >> > > git://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git, branch "testing". > > base-commit: 351f4911a477ae01239c42f771f621d85b06ea10 > Thanks! Guenter _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <Message-ID: <4493c0e4-51aa-3907-810c-74949ff27ca4@samsung.com>]
* [PATCH v4 00/11] Stop monitoring disabled devices [not found] <Message-ID: <4493c0e4-51aa-3907-810c-74949ff27ca4@samsung.com> @ 2020-05-28 19:20 ` Andrzej Pietrasiewicz 2020-05-28 19:20 ` [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum Andrzej Pietrasiewicz 2020-06-01 11:36 ` Peter Kästle 0 siblings, 2 replies; 8+ messages in thread From: Andrzej Pietrasiewicz @ 2020-05-28 19:20 UTC (permalink / raw) To: linux-pm, linux-acpi, netdev, linux-wireless, platform-driver-x86, linux-arm-kernel, linux-renesas-soc, linux-rockchip Cc: Emmanuel Grumbach, Heiko Stuebner, Rafael J . Wysocki, Vishal Kulkarni, Luca Coelho, Miquel Raynal, kernel, Fabio Estevam, Amit Kucheria, Chunyan Zhang, Daniel Lezcano, Allison Randal, NXP Linux Team, Darren Hart, Zhang Rui, Gayatri Kammela, Len Brown, Johannes Berg, Intel Linux Wireless, Sascha Hauer, Ido Schimmel, Baolin Wang, Jiri Pirko, Orson Zhai, Thomas Gleixner, Kalle Valo, Support Opensource, Enrico Weigelt, Peter Kaestle, Sebastian Reichel, Andrzej Pietrasiewicz, Bartlomiej Zolnierkiewicz, Pengutronix Kernel Team, Niklas Söderlund, Shawn Guo, David S . Miller, Andy Shevchenko There is already a reviewed v3 (not to be confused with RFC v3), which can be considered for merging: https://lore.kernel.org/linux-pm/20200423165705.13585-2-andrzej.p@collabora.com/ Let me cite Bartlomiej Zolnierkiewicz: "I couldn't find the problems with the patch itself (no new issues being introduced, all changes seem to be improvements over the current situation). Also the patch is not small but it also not that big and it mostly removes the code: 17 files changed, 105 insertions(+), 244 deletions(-)" There have been raised some concerns about bisectability and about introducing "initial_mode" member in struct thermal_zone_params. This v4 series addresses those concerns: it takes a more gradual approach and uses explicit tzd state initialization, hence there are more insertions than in v3, and the net effect is -63 lines versus -139 lines in v3. Patch 2/11 converts the 3 drivers which don't store their mode in enum thermal_device_mode to do so. Once that is cleared, struct thermal_zone_device gains its "mode" member (patch 3/11) and then all interested drivers change the location where they store their state: instead of storing it in some variable in a driver, they store it in struct thermal_zone_device (patch 4/11). Patch 4/11 does not introduce other changes. Then get_mode() driver method becomes redundant, and so it is removed (patch 5/11). This is the first part of the groundwork. The second part of the groundwork is to add (patch 6/11) and use (patch 7/11) helpers for accessing tzd's state from drivers. From this moment on the drivers don't access tzd->mode directly. Please note that after patch 4/11 all thermal zone devices have their mode implicitly initialized to DISABLED, as a result of kzalloc and THERMAL_DEVICE_DISABLED == 0. This is not a problem from the point of view of polling them, because their state is not considered when deciding to poll or to cease polling. In preparation for considering tzd's state when deciding to poll or to cease polling it ensured (patch 8/11 and some in patch 7/11) that all the drivers are explicitly initialized with regard to their state. With all that groundwork in place now it makes sense to modify thermal_core so that it stops polling DISABLED devices (patch 9/11), which is the ultimate purpose of this work. While at it, some set_mode() implementations only change the polling variables to make the core stop polling their drivers, but that is now unnecessary and those set_mode() implementations are removed. In other implementations polling variables modifications are removed. Some other set_mode() implementations are simplified or removed (patch 10/11). set_mode() is now only called when tzd's mode is about to change. Actual setting is performed in thermal_core, in thermal_zone_device_set_mode(). The meaning of set_mode() callback is actually to notify the driver about the mode being changed and giving the driver a chance to oppose such a change. To better reflect the purpose of the method it is renamed to change_mode() (patch 11/11). Andrzej Pietrasiewicz (11): acpi: thermal: Fix error handling in the register function thermal: Store thermal mode in a dedicated enum thermal: Add current mode to thermal zone device thermal: Store device mode in struct thermal_zone_device thermal: remove get_mode() operation of drivers thermal: Add mode helpers thermal: Use mode helpers in drivers thermal: Explicitly enable non-changing thermal zone devices thermal: core: Stop polling DISABLED thermal devices thermal: Simplify or eliminate unnecessary set_mode() methods thermal: Rename set_mode() to change_mode() drivers/acpi/thermal.c | 75 +++++---------- .../ethernet/chelsio/cxgb4/cxgb4_thermal.c | 8 ++ .../ethernet/mellanox/mlxsw/core_thermal.c | 91 ++++--------------- drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 9 +- drivers/platform/x86/acerhdf.c | 33 +++---- drivers/platform/x86/intel_mid_thermal.c | 6 ++ drivers/power/supply/power_supply_core.c | 9 +- drivers/thermal/armada_thermal.c | 6 ++ drivers/thermal/da9062-thermal.c | 16 +--- drivers/thermal/dove_thermal.c | 6 ++ drivers/thermal/hisi_thermal.c | 6 +- drivers/thermal/imx_thermal.c | 57 ++++-------- .../intel/int340x_thermal/int3400_thermal.c | 43 +++------ .../int340x_thermal/int340x_thermal_zone.c | 5 + drivers/thermal/intel/intel_pch_thermal.c | 5 + .../thermal/intel/intel_quark_dts_thermal.c | 34 ++----- drivers/thermal/intel/intel_soc_dts_iosf.c | 3 + drivers/thermal/intel/x86_pkg_temp_thermal.c | 6 ++ drivers/thermal/kirkwood_thermal.c | 7 ++ drivers/thermal/rcar_thermal.c | 9 +- drivers/thermal/rockchip_thermal.c | 6 +- drivers/thermal/spear_thermal.c | 7 ++ drivers/thermal/sprd_thermal.c | 6 +- drivers/thermal/st/st_thermal.c | 5 + drivers/thermal/thermal_core.c | 76 ++++++++++++++-- drivers/thermal/thermal_of.c | 51 ++--------- drivers/thermal/thermal_sysfs.c | 37 +------- include/linux/thermal.h | 19 +++- 28 files changed, 289 insertions(+), 352 deletions(-) base-commit: 351f4911a477ae01239c42f771f621d85b06ea10 -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum 2020-05-28 19:20 ` [PATCH v4 00/11] Stop monitoring disabled devices Andrzej Pietrasiewicz @ 2020-05-28 19:20 ` Andrzej Pietrasiewicz 2020-05-29 14:48 ` Guenter Roeck 2020-06-24 9:38 ` Bartlomiej Zolnierkiewicz 2020-06-01 11:36 ` Peter Kästle 1 sibling, 2 replies; 8+ messages in thread From: Andrzej Pietrasiewicz @ 2020-05-28 19:20 UTC (permalink / raw) To: linux-pm, linux-acpi, netdev, linux-wireless, platform-driver-x86, linux-arm-kernel, linux-renesas-soc, linux-rockchip Cc: Emmanuel Grumbach, Heiko Stuebner, Rafael J . Wysocki, Vishal Kulkarni, Luca Coelho, Miquel Raynal, kernel, Fabio Estevam, Amit Kucheria, Chunyan Zhang, Daniel Lezcano, Allison Randal, NXP Linux Team, Darren Hart, Zhang Rui, Gayatri Kammela, Len Brown, Johannes Berg, Intel Linux Wireless, Sascha Hauer, Ido Schimmel, Baolin Wang, Jiri Pirko, Orson Zhai, Thomas Gleixner, Kalle Valo, Support Opensource, Enrico Weigelt, Peter Kaestle, Sebastian Reichel, Andrzej Pietrasiewicz, Bartlomiej Zolnierkiewicz, Pengutronix Kernel Team, Niklas Söderlund, Shawn Guo, David S . Miller, Andy Shevchenko Prepare for storing mode in struct thermal_zone_device. Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> --- drivers/acpi/thermal.c | 27 +++++++++---------- drivers/platform/x86/acerhdf.c | 8 ++++-- .../intel/int340x_thermal/int3400_thermal.c | 18 +++++-------- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c index 6de8066ca1e7..fb46070c66d8 100644 --- a/drivers/acpi/thermal.c +++ b/drivers/acpi/thermal.c @@ -172,7 +172,7 @@ struct acpi_thermal { struct acpi_thermal_trips trips; struct acpi_handle_list devices; struct thermal_zone_device *thermal_zone; - int tz_enabled; + enum thermal_device_mode mode; int kelvin_offset; /* in millidegrees */ struct work_struct thermal_check_work; }; @@ -500,7 +500,7 @@ static void acpi_thermal_check(void *data) { struct acpi_thermal *tz = data; - if (!tz->tz_enabled) + if (tz->mode != THERMAL_DEVICE_ENABLED) return; thermal_zone_device_update(tz->thermal_zone, @@ -534,8 +534,7 @@ static int thermal_get_mode(struct thermal_zone_device *thermal, if (!tz) return -EINVAL; - *mode = tz->tz_enabled ? THERMAL_DEVICE_ENABLED : - THERMAL_DEVICE_DISABLED; + *mode = tz->mode; return 0; } @@ -544,27 +543,25 @@ static int thermal_set_mode(struct thermal_zone_device *thermal, enum thermal_device_mode mode) { struct acpi_thermal *tz = thermal->devdata; - int enable; if (!tz) return -EINVAL; + if (mode != THERMAL_DEVICE_DISABLED && + mode != THERMAL_DEVICE_ENABLED) + return -EINVAL; /* * enable/disable thermal management from ACPI thermal driver */ - if (mode == THERMAL_DEVICE_ENABLED) - enable = 1; - else if (mode == THERMAL_DEVICE_DISABLED) { - enable = 0; + if (mode == THERMAL_DEVICE_DISABLED) pr_warn("thermal zone will be disabled\n"); - } else - return -EINVAL; - if (enable != tz->tz_enabled) { - tz->tz_enabled = enable; + if (mode != tz->mode) { + tz->mode = mode; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s kernel ACPI thermal control\n", - tz->tz_enabled ? "Enable" : "Disable")); + tz->mode == THERMAL_DEVICE_ENABLED ? + "Enable" : "Disable")); acpi_thermal_check(tz); } return 0; @@ -915,7 +912,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) goto remove_dev_link; } - tz->tz_enabled = 1; + tz->mode = THERMAL_DEVICE_ENABLED; dev_info(&tz->device->dev, "registered as thermal_zone%d\n", tz->thermal_zone->id); diff --git a/drivers/platform/x86/acerhdf.c b/drivers/platform/x86/acerhdf.c index 8cc86f4e3ac1..830a8b060e74 100644 --- a/drivers/platform/x86/acerhdf.c +++ b/drivers/platform/x86/acerhdf.c @@ -68,6 +68,7 @@ static int kernelmode = 1; #else static int kernelmode; #endif +static enum thermal_device_mode thermal_mode; static unsigned int interval = 10; static unsigned int fanon = 60000; @@ -397,6 +398,7 @@ static inline void acerhdf_revert_to_bios_mode(void) { acerhdf_change_fanstate(ACERHDF_FAN_AUTO); kernelmode = 0; + thermal_mode = THERMAL_DEVICE_DISABLED; if (thz_dev) thz_dev->polling_delay = 0; pr_notice("kernel mode fan control OFF\n"); @@ -404,6 +406,7 @@ static inline void acerhdf_revert_to_bios_mode(void) static inline void acerhdf_enable_kernelmode(void) { kernelmode = 1; + thermal_mode = THERMAL_DEVICE_ENABLED; thz_dev->polling_delay = interval*1000; thermal_zone_device_update(thz_dev, THERMAL_EVENT_UNSPECIFIED); @@ -416,8 +419,7 @@ static int acerhdf_get_mode(struct thermal_zone_device *thermal, if (verbose) pr_notice("kernel mode fan control %d\n", kernelmode); - *mode = (kernelmode) ? THERMAL_DEVICE_ENABLED - : THERMAL_DEVICE_DISABLED; + *mode = thermal_mode; return 0; } @@ -739,6 +741,8 @@ static int __init acerhdf_register_thermal(void) if (IS_ERR(cl_dev)) return -EINVAL; + thermal_mode = kernelmode ? + THERMAL_DEVICE_ENABLED : THERMAL_DEVICE_DISABLED; thz_dev = thermal_zone_device_register("acerhdf", 2, 0, NULL, &acerhdf_dev_ops, &acerhdf_zone_params, 0, diff --git a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c index 0b3a62655843..e84faaadff87 100644 --- a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c +++ b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c @@ -48,7 +48,7 @@ struct int3400_thermal_priv { struct acpi_device *adev; struct platform_device *pdev; struct thermal_zone_device *thermal; - int mode; + enum thermal_device_mode mode; int art_count; struct art *arts; int trt_count; @@ -395,24 +395,20 @@ static int int3400_thermal_set_mode(struct thermal_zone_device *thermal, enum thermal_device_mode mode) { struct int3400_thermal_priv *priv = thermal->devdata; - bool enable; int result = 0; if (!priv) return -EINVAL; - if (mode == THERMAL_DEVICE_ENABLED) - enable = true; - else if (mode == THERMAL_DEVICE_DISABLED) - enable = false; - else + if (mode != THERMAL_DEVICE_ENABLED && + mode != THERMAL_DEVICE_DISABLED) return -EINVAL; - if (enable != priv->mode) { - priv->mode = enable; + if (mode != priv->mode) { + priv->mode = mode; result = int3400_thermal_run_osc(priv->adev->handle, - priv->current_uuid_index, - enable); + priv->current_uuid_index, + mode == THERMAL_DEVICE_ENABLED); } evaluate_odvp(priv); -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum 2020-05-28 19:20 ` [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum Andrzej Pietrasiewicz @ 2020-05-29 14:48 ` Guenter Roeck 2020-05-29 15:13 ` Andrzej Pietrasiewicz 2020-06-24 9:38 ` Bartlomiej Zolnierkiewicz 1 sibling, 1 reply; 8+ messages in thread From: Guenter Roeck @ 2020-05-29 14:48 UTC (permalink / raw) To: Andrzej Pietrasiewicz Cc: Emmanuel Grumbach, Heiko Stuebner, Kalle Valo, linux-wireless, Peter Kaestle, platform-driver-x86, Vishal Kulkarni, Luca Coelho, Miquel Raynal, Shawn Guo, kernel, Fabio Estevam, Amit Kucheria, linux-rockchip, Chunyan Zhang, Daniel Lezcano, linux-acpi, linux-arm-kernel, Darren Hart, Zhang Rui, Gayatri Kammela, NXP Linux Team, Johannes Berg, linux-pm, Sascha Hauer, Intel Linux Wireless, Ido Schimmel, Niklas Söderlund, Jiri Pirko, Orson Zhai, Thomas Gleixner, Allison Randal, Support Opensource, netdev, Rafael J . Wysocki, Sebastian Reichel, linux-renesas-soc, Bartlomiej Zolnierkiewicz, Pengutronix Kernel Team, Baolin Wang, Len Brown, Enrico Weigelt, David S . Miller, Andy Shevchenko On Thu, May 28, 2020 at 09:20:42PM +0200, Andrzej Pietrasiewicz wrote: > Prepare for storing mode in struct thermal_zone_device. > > Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> > --- > drivers/acpi/thermal.c | 27 +++++++++---------- > drivers/platform/x86/acerhdf.c | 8 ++++-- > .../intel/int340x_thermal/int3400_thermal.c | 18 +++++-------- > 3 files changed, 25 insertions(+), 28 deletions(-) > > diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c > index 6de8066ca1e7..fb46070c66d8 100644 > --- a/drivers/acpi/thermal.c > +++ b/drivers/acpi/thermal.c > @@ -172,7 +172,7 @@ struct acpi_thermal { > struct acpi_thermal_trips trips; > struct acpi_handle_list devices; > struct thermal_zone_device *thermal_zone; > - int tz_enabled; > + enum thermal_device_mode mode; > int kelvin_offset; /* in millidegrees */ > struct work_struct thermal_check_work; > }; > @@ -500,7 +500,7 @@ static void acpi_thermal_check(void *data) > { > struct acpi_thermal *tz = data; > > - if (!tz->tz_enabled) > + if (tz->mode != THERMAL_DEVICE_ENABLED) > return; > > thermal_zone_device_update(tz->thermal_zone, > @@ -534,8 +534,7 @@ static int thermal_get_mode(struct thermal_zone_device *thermal, > if (!tz) > return -EINVAL; > > - *mode = tz->tz_enabled ? THERMAL_DEVICE_ENABLED : > - THERMAL_DEVICE_DISABLED; > + *mode = tz->mode; > > return 0; > } > @@ -544,27 +543,25 @@ static int thermal_set_mode(struct thermal_zone_device *thermal, > enum thermal_device_mode mode) > { > struct acpi_thermal *tz = thermal->devdata; > - int enable; > > if (!tz) > return -EINVAL; > > + if (mode != THERMAL_DEVICE_DISABLED && > + mode != THERMAL_DEVICE_ENABLED) > + return -EINVAL; Personally I find this check unnecessary: The enum has no other values, and it is verifyable that the callers provide the enum and not some other value. > /* > * enable/disable thermal management from ACPI thermal driver > */ > - if (mode == THERMAL_DEVICE_ENABLED) > - enable = 1; > - else if (mode == THERMAL_DEVICE_DISABLED) { > - enable = 0; > + if (mode == THERMAL_DEVICE_DISABLED) > pr_warn("thermal zone will be disabled\n"); > - } else > - return -EINVAL; > > - if (enable != tz->tz_enabled) { > - tz->tz_enabled = enable; > + if (mode != tz->mode) { > + tz->mode = mode; > ACPI_DEBUG_PRINT((ACPI_DB_INFO, > "%s kernel ACPI thermal control\n", > - tz->tz_enabled ? "Enable" : "Disable")); > + tz->mode == THERMAL_DEVICE_ENABLED ? > + "Enable" : "Disable")); > acpi_thermal_check(tz); > } > return 0; > @@ -915,7 +912,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) > goto remove_dev_link; > } > > - tz->tz_enabled = 1; > + tz->mode = THERMAL_DEVICE_ENABLED; > > dev_info(&tz->device->dev, "registered as thermal_zone%d\n", > tz->thermal_zone->id); > diff --git a/drivers/platform/x86/acerhdf.c b/drivers/platform/x86/acerhdf.c > index 8cc86f4e3ac1..830a8b060e74 100644 > --- a/drivers/platform/x86/acerhdf.c > +++ b/drivers/platform/x86/acerhdf.c > @@ -68,6 +68,7 @@ static int kernelmode = 1; > #else > static int kernelmode; > #endif > +static enum thermal_device_mode thermal_mode; > > static unsigned int interval = 10; > static unsigned int fanon = 60000; > @@ -397,6 +398,7 @@ static inline void acerhdf_revert_to_bios_mode(void) > { > acerhdf_change_fanstate(ACERHDF_FAN_AUTO); > kernelmode = 0; > + thermal_mode = THERMAL_DEVICE_DISABLED; > if (thz_dev) > thz_dev->polling_delay = 0; > pr_notice("kernel mode fan control OFF\n"); > @@ -404,6 +406,7 @@ static inline void acerhdf_revert_to_bios_mode(void) > static inline void acerhdf_enable_kernelmode(void) > { > kernelmode = 1; > + thermal_mode = THERMAL_DEVICE_ENABLED; > > thz_dev->polling_delay = interval*1000; > thermal_zone_device_update(thz_dev, THERMAL_EVENT_UNSPECIFIED); > @@ -416,8 +419,7 @@ static int acerhdf_get_mode(struct thermal_zone_device *thermal, > if (verbose) > pr_notice("kernel mode fan control %d\n", kernelmode); > > - *mode = (kernelmode) ? THERMAL_DEVICE_ENABLED > - : THERMAL_DEVICE_DISABLED; > + *mode = thermal_mode; > > return 0; > } > @@ -739,6 +741,8 @@ static int __init acerhdf_register_thermal(void) > if (IS_ERR(cl_dev)) > return -EINVAL; > > + thermal_mode = kernelmode ? > + THERMAL_DEVICE_ENABLED : THERMAL_DEVICE_DISABLED; > thz_dev = thermal_zone_device_register("acerhdf", 2, 0, NULL, > &acerhdf_dev_ops, > &acerhdf_zone_params, 0, > diff --git a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c > index 0b3a62655843..e84faaadff87 100644 > --- a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c > +++ b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c > @@ -48,7 +48,7 @@ struct int3400_thermal_priv { > struct acpi_device *adev; > struct platform_device *pdev; > struct thermal_zone_device *thermal; > - int mode; > + enum thermal_device_mode mode; > int art_count; > struct art *arts; > int trt_count; > @@ -395,24 +395,20 @@ static int int3400_thermal_set_mode(struct thermal_zone_device *thermal, > enum thermal_device_mode mode) > { > struct int3400_thermal_priv *priv = thermal->devdata; > - bool enable; > int result = 0; > > if (!priv) > return -EINVAL; > > - if (mode == THERMAL_DEVICE_ENABLED) > - enable = true; > - else if (mode == THERMAL_DEVICE_DISABLED) > - enable = false; > - else > + if (mode != THERMAL_DEVICE_ENABLED && > + mode != THERMAL_DEVICE_DISABLED) > return -EINVAL; Same as above. > > - if (enable != priv->mode) { > - priv->mode = enable; > + if (mode != priv->mode) { > + priv->mode = mode; > result = int3400_thermal_run_osc(priv->adev->handle, > - priv->current_uuid_index, > - enable); > + priv->current_uuid_index, > + mode == THERMAL_DEVICE_ENABLED); > } > > evaluate_odvp(priv); _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum 2020-05-29 14:48 ` Guenter Roeck @ 2020-05-29 15:13 ` Andrzej Pietrasiewicz 2020-05-29 15:34 ` Guenter Roeck 0 siblings, 1 reply; 8+ messages in thread From: Andrzej Pietrasiewicz @ 2020-05-29 15:13 UTC (permalink / raw) To: Guenter Roeck Cc: Emmanuel Grumbach, Heiko Stuebner, Kalle Valo, linux-wireless, Peter Kaestle, platform-driver-x86, Vishal Kulkarni, Luca Coelho, Miquel Raynal, Shawn Guo, kernel, Fabio Estevam, Amit Kucheria, linux-rockchip, Chunyan Zhang, Daniel Lezcano, linux-acpi, linux-arm-kernel, Darren Hart, Zhang Rui, Gayatri Kammela, NXP Linux Team, Johannes Berg, linux-pm, Sascha Hauer, Intel Linux Wireless, Ido Schimmel, Niklas Söderlund, Jiri Pirko, Orson Zhai, Thomas Gleixner, Allison Randal, Support Opensource, netdev, Rafael J . Wysocki, Sebastian Reichel, linux-renesas-soc, Bartlomiej Zolnierkiewicz, Pengutronix Kernel Team, Baolin Wang, Len Brown, Enrico Weigelt, David S . Miller, Andy Shevchenko Hi Guenter, W dniu 29.05.2020 o 16:48, Guenter Roeck pisze: > On Thu, May 28, 2020 at 09:20:42PM +0200, Andrzej Pietrasiewicz wrote: >> Prepare for storing mode in struct thermal_zone_device. >> >> Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> >> --- >> drivers/acpi/thermal.c | 27 +++++++++---------- >> drivers/platform/x86/acerhdf.c | 8 ++++-- >> .../intel/int340x_thermal/int3400_thermal.c | 18 +++++-------- >> 3 files changed, 25 insertions(+), 28 deletions(-) <snip> >> @@ -544,27 +543,25 @@ static int thermal_set_mode(struct thermal_zone_device *thermal, >> enum thermal_device_mode mode) >> { >> struct acpi_thermal *tz = thermal->devdata; >> - int enable; >> >> if (!tz) >> return -EINVAL; >> >> + if (mode != THERMAL_DEVICE_DISABLED && >> + mode != THERMAL_DEVICE_ENABLED) >> + return -EINVAL; > > Personally I find this check unnecessary: The enum has no other values, > and it is verifyable that the callers provide the enum and not some other > value. It is getting removed in PATCH 10/11. >> + if (mode != THERMAL_DEVICE_ENABLED && >> + mode != THERMAL_DEVICE_DISABLED) >> return -EINVAL; > > Same as above. ditto. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum 2020-05-29 15:13 ` Andrzej Pietrasiewicz @ 2020-05-29 15:34 ` Guenter Roeck 0 siblings, 0 replies; 8+ messages in thread From: Guenter Roeck @ 2020-05-29 15:34 UTC (permalink / raw) To: Andrzej Pietrasiewicz Cc: Emmanuel Grumbach, Heiko Stuebner, Kalle Valo, linux-wireless, Peter Kaestle, platform-driver-x86, Vishal Kulkarni, Luca Coelho, Miquel Raynal, Shawn Guo, kernel, Fabio Estevam, Amit Kucheria, linux-rockchip, Chunyan Zhang, Daniel Lezcano, linux-acpi, linux-arm-kernel, Darren Hart, Zhang Rui, Gayatri Kammela, NXP Linux Team, Johannes Berg, linux-pm, Sascha Hauer, Intel Linux Wireless, Ido Schimmel, Niklas Söderlund, Jiri Pirko, Orson Zhai, Thomas Gleixner, Allison Randal, Support Opensource, netdev, Rafael J . Wysocki, Sebastian Reichel, linux-renesas-soc, Bartlomiej Zolnierkiewicz, Pengutronix Kernel Team, Baolin Wang, Len Brown, Enrico Weigelt, David S . Miller, Andy Shevchenko On 5/29/20 8:13 AM, Andrzej Pietrasiewicz wrote: > Hi Guenter, > > W dniu 29.05.2020 o 16:48, Guenter Roeck pisze: >> On Thu, May 28, 2020 at 09:20:42PM +0200, Andrzej Pietrasiewicz wrote: >>> Prepare for storing mode in struct thermal_zone_device. >>> >>> Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> >>> --- >>> drivers/acpi/thermal.c | 27 +++++++++---------- >>> drivers/platform/x86/acerhdf.c | 8 ++++-- >>> .../intel/int340x_thermal/int3400_thermal.c | 18 +++++-------- >>> 3 files changed, 25 insertions(+), 28 deletions(-) > > <snip> > >>> @@ -544,27 +543,25 @@ static int thermal_set_mode(struct thermal_zone_device *thermal, >>> enum thermal_device_mode mode) >>> { >>> struct acpi_thermal *tz = thermal->devdata; >>> - int enable; >>> if (!tz) >>> return -EINVAL; >>> + if (mode != THERMAL_DEVICE_DISABLED && >>> + mode != THERMAL_DEVICE_ENABLED) >>> + return -EINVAL; >> >> Personally I find this check unnecessary: The enum has no other values, >> and it is verifyable that the callers provide the enum and not some other >> value. > > It is getting removed in PATCH 10/11. > > >>> + if (mode != THERMAL_DEVICE_ENABLED && >>> + mode != THERMAL_DEVICE_DISABLED) >>> return -EINVAL; >> >> Same as above. > > ditto. Hmm, I think that would be better done with this patch. But I guess that is a bit of PoV, so Reviewed-by: Guenter Roeck <linux@roeck-us.net> since I don't have any other objections/observations. Guenter _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum 2020-05-28 19:20 ` [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum Andrzej Pietrasiewicz 2020-05-29 14:48 ` Guenter Roeck @ 2020-06-24 9:38 ` Bartlomiej Zolnierkiewicz 1 sibling, 0 replies; 8+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2020-06-24 9:38 UTC (permalink / raw) To: Andrzej Pietrasiewicz Cc: linux-wireless, Emmanuel Grumbach, Heiko Stuebner, Peter Kaestle, platform-driver-x86, Vishal Kulkarni, Luca Coelho, Miquel Raynal, kernel, Fabio Estevam, Amit Kucheria, linux-rockchip, Chunyan Zhang, Intel Linux Wireless, Allison Randal, NXP Linux Team, linux-acpi, linux-arm-kernel, Darren Hart, Zhang Rui, Gayatri Kammela, Len Brown, Johannes Berg, linux-pm, Sascha Hauer, Ido Schimmel, Baolin Wang, Jiri Pirko, Orson Zhai, Thomas Gleixner, Kalle Valo, Support Opensource, Enrico Weigelt, Daniel Lezcano, netdev, Rafael J . Wysocki, Sebastian Reichel, linux-renesas-soc, Pengutronix Kernel Team, Niklas Söderlund, Shawn Guo, David S . Miller, Andy Shevchenko On 5/28/20 9:20 PM, Andrzej Pietrasiewicz wrote: > Prepare for storing mode in struct thermal_zone_device. > > Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics > --- > drivers/acpi/thermal.c | 27 +++++++++---------- > drivers/platform/x86/acerhdf.c | 8 ++++-- > .../intel/int340x_thermal/int3400_thermal.c | 18 +++++-------- > 3 files changed, 25 insertions(+), 28 deletions(-) > > diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c > index 6de8066ca1e7..fb46070c66d8 100644 > --- a/drivers/acpi/thermal.c > +++ b/drivers/acpi/thermal.c > @@ -172,7 +172,7 @@ struct acpi_thermal { > struct acpi_thermal_trips trips; > struct acpi_handle_list devices; > struct thermal_zone_device *thermal_zone; > - int tz_enabled; > + enum thermal_device_mode mode; > int kelvin_offset; /* in millidegrees */ > struct work_struct thermal_check_work; > }; > @@ -500,7 +500,7 @@ static void acpi_thermal_check(void *data) > { > struct acpi_thermal *tz = data; > > - if (!tz->tz_enabled) > + if (tz->mode != THERMAL_DEVICE_ENABLED) > return; > > thermal_zone_device_update(tz->thermal_zone, > @@ -534,8 +534,7 @@ static int thermal_get_mode(struct thermal_zone_device *thermal, > if (!tz) > return -EINVAL; > > - *mode = tz->tz_enabled ? THERMAL_DEVICE_ENABLED : > - THERMAL_DEVICE_DISABLED; > + *mode = tz->mode; > > return 0; > } > @@ -544,27 +543,25 @@ static int thermal_set_mode(struct thermal_zone_device *thermal, > enum thermal_device_mode mode) > { > struct acpi_thermal *tz = thermal->devdata; > - int enable; > > if (!tz) > return -EINVAL; > > + if (mode != THERMAL_DEVICE_DISABLED && > + mode != THERMAL_DEVICE_ENABLED) > + return -EINVAL; > /* > * enable/disable thermal management from ACPI thermal driver > */ > - if (mode == THERMAL_DEVICE_ENABLED) > - enable = 1; > - else if (mode == THERMAL_DEVICE_DISABLED) { > - enable = 0; > + if (mode == THERMAL_DEVICE_DISABLED) > pr_warn("thermal zone will be disabled\n"); > - } else > - return -EINVAL; > > - if (enable != tz->tz_enabled) { > - tz->tz_enabled = enable; > + if (mode != tz->mode) { > + tz->mode = mode; > ACPI_DEBUG_PRINT((ACPI_DB_INFO, > "%s kernel ACPI thermal control\n", > - tz->tz_enabled ? "Enable" : "Disable")); > + tz->mode == THERMAL_DEVICE_ENABLED ? > + "Enable" : "Disable")); > acpi_thermal_check(tz); > } > return 0; > @@ -915,7 +912,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz) > goto remove_dev_link; > } > > - tz->tz_enabled = 1; > + tz->mode = THERMAL_DEVICE_ENABLED; > > dev_info(&tz->device->dev, "registered as thermal_zone%d\n", > tz->thermal_zone->id); > diff --git a/drivers/platform/x86/acerhdf.c b/drivers/platform/x86/acerhdf.c > index 8cc86f4e3ac1..830a8b060e74 100644 > --- a/drivers/platform/x86/acerhdf.c > +++ b/drivers/platform/x86/acerhdf.c > @@ -68,6 +68,7 @@ static int kernelmode = 1; > #else > static int kernelmode; > #endif > +static enum thermal_device_mode thermal_mode; > > static unsigned int interval = 10; > static unsigned int fanon = 60000; > @@ -397,6 +398,7 @@ static inline void acerhdf_revert_to_bios_mode(void) > { > acerhdf_change_fanstate(ACERHDF_FAN_AUTO); > kernelmode = 0; > + thermal_mode = THERMAL_DEVICE_DISABLED; > if (thz_dev) > thz_dev->polling_delay = 0; > pr_notice("kernel mode fan control OFF\n"); > @@ -404,6 +406,7 @@ static inline void acerhdf_revert_to_bios_mode(void) > static inline void acerhdf_enable_kernelmode(void) > { > kernelmode = 1; > + thermal_mode = THERMAL_DEVICE_ENABLED; > > thz_dev->polling_delay = interval*1000; > thermal_zone_device_update(thz_dev, THERMAL_EVENT_UNSPECIFIED); > @@ -416,8 +419,7 @@ static int acerhdf_get_mode(struct thermal_zone_device *thermal, > if (verbose) > pr_notice("kernel mode fan control %d\n", kernelmode); > > - *mode = (kernelmode) ? THERMAL_DEVICE_ENABLED > - : THERMAL_DEVICE_DISABLED; > + *mode = thermal_mode; > > return 0; > } > @@ -739,6 +741,8 @@ static int __init acerhdf_register_thermal(void) > if (IS_ERR(cl_dev)) > return -EINVAL; > > + thermal_mode = kernelmode ? > + THERMAL_DEVICE_ENABLED : THERMAL_DEVICE_DISABLED; > thz_dev = thermal_zone_device_register("acerhdf", 2, 0, NULL, > &acerhdf_dev_ops, > &acerhdf_zone_params, 0, > diff --git a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c > index 0b3a62655843..e84faaadff87 100644 > --- a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c > +++ b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c > @@ -48,7 +48,7 @@ struct int3400_thermal_priv { > struct acpi_device *adev; > struct platform_device *pdev; > struct thermal_zone_device *thermal; > - int mode; > + enum thermal_device_mode mode; > int art_count; > struct art *arts; > int trt_count; > @@ -395,24 +395,20 @@ static int int3400_thermal_set_mode(struct thermal_zone_device *thermal, > enum thermal_device_mode mode) > { > struct int3400_thermal_priv *priv = thermal->devdata; > - bool enable; > int result = 0; > > if (!priv) > return -EINVAL; > > - if (mode == THERMAL_DEVICE_ENABLED) > - enable = true; > - else if (mode == THERMAL_DEVICE_DISABLED) > - enable = false; > - else > + if (mode != THERMAL_DEVICE_ENABLED && > + mode != THERMAL_DEVICE_DISABLED) > return -EINVAL; > > - if (enable != priv->mode) { > - priv->mode = enable; > + if (mode != priv->mode) { > + priv->mode = mode; > result = int3400_thermal_run_osc(priv->adev->handle, > - priv->current_uuid_index, > - enable); > + priv->current_uuid_index, > + mode == THERMAL_DEVICE_ENABLED); > } > > evaluate_odvp(priv); > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum 2020-05-28 19:20 ` [PATCH v4 00/11] Stop monitoring disabled devices Andrzej Pietrasiewicz 2020-05-28 19:20 ` [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum Andrzej Pietrasiewicz @ 2020-06-01 11:36 ` Peter Kästle 1 sibling, 0 replies; 8+ messages in thread From: Peter Kästle @ 2020-06-01 11:36 UTC (permalink / raw) To: Andrzej Pietrasiewicz, linux-pm, linux-acpi, netdev, linux-wireless, platform-driver-x86, linux-arm-kernel, linux-renesas-soc, linux-rockchip Cc: Emmanuel Grumbach, Heiko Stuebner, Vishal Kulkarni, Luca Coelho, Miquel Raynal, kernel, Fabio Estevam, Amit Kucheria, Chunyan Zhang, Daniel Lezcano, Allison Randal, NXP Linux Team, Darren Hart, Zhang Rui, Gayatri Kammela, Len Brown, Johannes Berg, Intel Linux Wireless, Sascha Hauer, Ido Schimmel, Baolin Wang, Jiri Pirko, Orson Zhai, Thomas Gleixner, Kalle Valo, Support Opensource, Enrico Weigelt, Rafael J . Wysocki, Sebastian Reichel, Bartlomiej Zolnierkiewicz, Pengutronix Kernel Team, Niklas Söderlund, Shawn Guo, David S . Miller, Andy Shevchenko 28. Mai 2020 21:21, "Andrzej Pietrasiewicz" <andrzej.p@collabora.com> schrieb: > Prepare for storing mode in struct thermal_zone_device. > > Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> > --- [...] > drivers/platform/x86/acerhdf.c | 8 ++++-- Acked-by: Peter Kaestle <peter@piie.net> _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC v3 1/2] thermal: core: Let thermal zone device's mode be stored in its struct @ 2020-05-27 13:30 Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 8+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2020-05-27 13:30 UTC (permalink / raw) To: Daniel Lezcano Cc: Rafael J . Wysocki, platform-driver-x86, kernel, Fabio Estevam, Amit Kucheria, linux-acpi, NXP Linux Team, Darren Hart, Zhang Rui, Gayatri Kammela, Len Brown, linux-pm, Sascha Hauer, Ido Schimmel, Jiri Pirko, Thomas Gleixner, Allison Randal, linux-arm-kernel, Support Opensource, Shawn Guo, Peter Kaestle, Andrzej Pietrasiewicz, Pengutronix Kernel Team, netdev, Enrico Weigelt, David S . Miller, Andy Shevchenko Hi Daniel, On 5/23/20 11:24 PM, Daniel Lezcano wrote: > Hi Andrzej, > > On 17/04/2020 18:20, Andrzej Pietrasiewicz wrote: >> Thermal zone devices' mode is stored in individual drivers. This patch >> changes it so that mode is stored in struct thermal_zone_device instead. >> >> As a result all driver-specific variables storing the mode are not needed >> and are removed. Consequently, the get_mode() implementations have nothing >> to operate on and need to be removed, too. >> >> Some thermal framework specific functions are introduced: >> >> thermal_zone_device_get_mode() >> thermal_zone_device_set_mode() >> thermal_zone_device_enable() >> thermal_zone_device_disable() >> >> thermal_zone_device_get_mode() and its "set" counterpart take tzd's lock >> and the "set" calls driver's set_mode() if provided, so the latter must >> not take this lock again. At the end of the "set" >> thermal_zone_device_update() is called so drivers don't need to repeat this >> invocation in their specific set_mode() implementations. >> >> The scope of the above 4 functions is purposedly limited to the thermal >> framework and drivers are not supposed to call them. This encapsulation >> does not fully work at the moment for some drivers, though: >> >> - platform/x86/acerhdf.c >> - drivers/thermal/imx_thermal.c >> - drivers/thermal/intel/intel_quark_dts_thermal.c >> - drivers/thermal/of-thermal.c >> >> and they manipulate struct thermal_zone_device's members directly. >> >> struct thermal_zone_params gains a new member called initial_mode, which >> is used to set tzd's mode at registration time. >> >> The sysfs "mode" attribute is always exposed from now on, because all >> thermal zone devices now have their get_mode() implemented at the generic >> level and it is always available. Exposing "mode" doesn't hurt the drivers >> which don't provide their own set_mode(), because writing to "mode" will >> result in -EPERM, as expected. > > The result is great, that is a nice cleanup of the thermal framework. > > After review it appears there are still problems IMO, especially with > the suspend / resume path. The patch is big, it is a bit complex to > comment. I suggest to re-org the changes as following: There are still issues with the related existing thermal code but this patch seems to be a step in the right direction. For the latest version posted ("v3" one, your mail was replied to the older "RFC v3" one): https://lore.kernel.org/linux-pm/20200423165705.13585-2-andrzej.p@collabora.com/ I couldn't find the problems with the patch itself (no new issues being introduced, all changes seem to be improvements over the current situation). Also the patch is not small but it also not that big and it mostly removes the code: 17 files changed, 105 insertions(+), 244 deletions(-) I worry that since the original code is intertwined in the interesting ways the cost of work on splitting the patch on smaller changes may be higher than its benefits. > - patch 1 : Add the four functions: > > * thermal_zone_device_set_mode() > * thermal_zone_device_enable() > * thermal_zone_device_disable() > * thermal_zone_device_is_enabled() > > *but* do not export thermal_zone_device_set_mode(), it must stay private > to the thermal framework ATM. > > - patch 2 : Add the mode THERMAL_DEVICE_SUSPENDED > > In the thermal_pm_notify() in the: > > - PM_SUSPEND_PREPARE case, set the mode to THERMAL_DEVICE_SUSPENDED if > the mode is THERMAL_DEVICE_ENABLED > > - PM_POST_SUSPEND case, set the mode to THERMAL_DEVICE_ENABLED, if the > mode is THERMAL_DEVICE_SUSPENDED > > - patch 3 : Change the monitor function > > Change monitor_thermal_zone() function to set the polling to zero if the > mode is THERMAL_DEVICE_DISABLED > > - patch 4 : Do the changes to remove get_mode() ops > > Make sure there is no access to tz->mode from the drivers anymore but > use of the functions of patch 1. IMO, this is the tricky part because a > part of the drivers are not calling the update after setting the mode > while the function thermal_zone_device_enable()/disable() call update > via the thermal_zone_device_set_mode(), so we must be sure to not break > anything. > > - patch 5 : Do the changes to remove set_mode() ops users > > As the patch 3 sets the polling to zero, the routine in the driver > setting the polling to zero is no longer needed (eg. in the mellanox > driver). I expect int300 to be the last user of this ops, hopefully we > can find a way to get rid of the specific call done inside and then > remove the ops. > > The initial_mode approach looks hackish, I suggest to make the default > the thermal zone disabled after creating and then explicitly enable it. > Note that is what do a lot of drivers already. > > Hopefully, these changes are git-bisect safe. > > Does it make sense ? Besides the requirement to split the patch it seems that the above list contains a lot of problematic areas with the existing thermal code yet to be addressed.. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-06-24 9:40 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20200529150549.GA154196@roeck-us.net>
2020-05-29 15:08 ` [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum Andrzej Pietrasiewicz
2020-05-29 15:30 ` Guenter Roeck
[not found] <Message-ID: <4493c0e4-51aa-3907-810c-74949ff27ca4@samsung.com>
2020-05-28 19:20 ` [PATCH v4 00/11] Stop monitoring disabled devices Andrzej Pietrasiewicz
2020-05-28 19:20 ` [PATCH v4 02/11] thermal: Store thermal mode in a dedicated enum Andrzej Pietrasiewicz
2020-05-29 14:48 ` Guenter Roeck
2020-05-29 15:13 ` Andrzej Pietrasiewicz
2020-05-29 15:34 ` Guenter Roeck
2020-06-24 9:38 ` Bartlomiej Zolnierkiewicz
2020-06-01 11:36 ` Peter Kästle
2020-05-27 13:30 [RFC v3 1/2] thermal: core: Let thermal zone device's mode be stored in its struct Bartlomiej Zolnierkiewicz
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).