]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
platform/x86: hp-wmi: fix u8 underflow in gpu_delta calculation
authorEmre Cecanpunar <emreleno@gmail.com>
Tue, 7 Apr 2026 14:25:13 +0000 (17:25 +0300)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Thu, 9 Apr 2026 11:46:34 +0000 (14:46 +0300)
gpu_delta was declared as u8. If the firmware specifies a GPU RPM
lower than the CPU RPM, subtracting them causes an underflow
(e.g. 10 - 20 = 246), which forces the GPU fan to remain clamped at
U8_MAX (100% speed) during operation.

Change gpu_delta to int and use signed arithmetic. Existing signed logic
in hp_wmi_fan_speed_set() correctly handles negative deltas.

Fixes: 46be1453e6e6 ("platform/x86: hp-wmi: add manual fan control for Victus S models")
Suggested-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Emre Cecanpunar <emreleno@gmail.com>
Link: https://patch.msgid.link/20260407142515.20683-5-emreleno@gmail.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/hp/hp-wmi.c

index 2932cab9aa78321d4a22775ac00e3869b6dc1e99..4f49861d3fbe25328e4666ac926bd1844c1b202e 100644 (file)
@@ -455,7 +455,7 @@ enum pwm_modes {
 struct hp_wmi_hwmon_priv {
        u8 min_rpm;
        u8 max_rpm;
-       u8 gpu_delta;
+       int gpu_delta;
        u8 mode;
        u8 pwm;
        struct delayed_work keep_alive_dwork;
@@ -2549,8 +2549,8 @@ static int hp_wmi_setup_fan_settings(struct hp_wmi_hwmon_priv *priv)
 {
        u8 fan_data[128] = { 0 };
        struct victus_s_fan_table *fan_table;
-       u8 min_rpm, max_rpm, gpu_delta;
-       int ret;
+       u8 min_rpm, max_rpm;
+       int gpu_delta, ret;
 
        /* Default behaviour on hwmon init is automatic mode */
        priv->mode = PWM_MODE_AUTO;