From nobody Mon Apr 6 09:10:01 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 819333D88E3 for ; Fri, 20 Mar 2026 23:56:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050983; cv=none; b=l4XhD3sCVOzb2YhqQLvV+thcyGk9LuLExvq4HsreUYAUu9Qift/CahHu8XacOKTCpLP94nL9CuD+ECNG313p3CrweaUJBjGcNRqjywknT9+iN21FRYnInEz3mE9oteKtnq6V8MGYDbDvRYiWq1eba2CIqx2Q6sH52LH0SggFmTk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050983; c=relaxed/simple; bh=a65n9qrxIlLmhNIbEN4ovVg4f46IUX7I1DiASQ8NWOg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J51pbc6SCwqsjGeRmHgfF8hJeBWUBLfpFEdo2tXtb3kAttoiHRjvCn0/HDcyVm+O11eltw/kt5OQQPqTCI4cxeux8qPyko26/feCJn02k6bgfzeeTVBWmU0/hrk8EC9kERmqpFMkiBdvCJdCPsN8yZZhbped9tDfsH9UilpxhR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mM4ZjzFS; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mM4ZjzFS" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-439b83ed536so146345f8f.0 for ; Fri, 20 Mar 2026 16:56:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774050967; x=1774655767; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=P9+vTI8xL38TJIAAcKMuD2MJ4WOoS3U7UcRhiuvjKaM=; b=mM4ZjzFS5MA8vPT1ZcrWfeRqQKK+vbWd/VTn2dkGdGlL0LDaGc0Qf1dZyzwyNObyB5 VoxaJIB3//MhQwdd5ouacVZBbMJJz13iwNKvvEnV5f/aCrQ4a2p65v3fgya/iXE59TNP nhvV2yf9D+5NtXapvKXIpM+0wHaG4zYHl7t4giWsYmqF+p+KiOdpOeHhIKFJqtfJorNX 0s/7nRuMMgp3beR/zH1WcZMtZYitoqi8mFph6dgcUV7MwIyBZYtEw8pfBkp2KPII1e+U T5A11z0WaF4ahwFXwds7o40OXHpOC+eU3atIfmfGNiv6lJjz24oCd2gEG6vBXMAxpe13 jHsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774050967; x=1774655767; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=P9+vTI8xL38TJIAAcKMuD2MJ4WOoS3U7UcRhiuvjKaM=; b=HKrTRgnNr5yg0D7sfY/B/mNlRPnKiI9q6BcINar34s7BoEWuOQTsIlH0UFFC3pt4Zt ZZlo/P6TNwSEySlPeifhLse/CrjrabvfqvepKt3GP50ZPLHxOlg1h/MHuE32BHRlU+nO 99gRsw+JZfwwoDJganggX0DTESUvAUElIJtNB0mdN3Pw+VR65y7yzWgpzCSasAN3dHQl Q++5qI/6FlC+wGykYtpsj0KlPwgyfFr7b93IUHYO2tGLQmvwpxF5qZ7cdrBIKAATVj44 F9vEn7jfUfpIEzmiXyjIZa5iT3RO19El3Zb/CaJu3IA6TXMzXlJ+iOuhKcoFu4L2uSZj jhKg== X-Forwarded-Encrypted: i=1; AJvYcCX7HUWV3wmTOjzhzkKoCI0x3SbOheoHUlEQAZzm+UYYBt/g8pbrOUJzmt2Lc5VLkMb96uPnGMs102NvWuI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3c7FxH6BP/qFxo2TI+RT9yO3lro+G99J/7aCEl8IVr6DFynK7 YfL4+3Qh8pAxGtjtoYHlIg4o6N4kROFo+G8Z3bWqC9yyJIxCT4q5Vvff X-Gm-Gg: ATEYQzyVlEbpXt+5+Zz53JZwgWYaEjMxzNLKK14dn/JyHEUBgA+zJDxXVCd3JGvvxzA ey8t3yiizd1zqcbc1Zdt2fxbIkgPWQpYUqKWQAtIXUk0H4gSWb26vj3wYgdSIHIcLbI/ca5vxlb UC9ZG/AO5jesnCA+bvBsOobJhYNOouiryi+yD/R8IslJIsyO+M+3F7jAPntKrfRS6s+JybLz1dO xJqKnMuALRTkfBlyw+f7HRBzjA6uXgt7mzmxpcsd+24fi0NBM6wIV/eaFoS2Aad3nZPWt5BW9VQ /mB1Ca+7lGzXWK8XwRX5dfqsQ90kTpbmGwOAXr06sWsNPiWqE/CVPIh14C97uh5g5M8RfnneuMa jaBusTSYiORA72MzMf+IS/PqT1BPE2lWIjiuKJTazZCWfAInLGxhDA0ByG+VxzyLsTome34T4e7 qsjFD47TTU374ykEg72qn+cTvI/29HRrwcmHww4AjonZdofiS17TPZsmTL X-Received: by 2002:a05:6000:43c5:10b0:43b:433f:4898 with SMTP id ffacd0b85a97d-43b642331fbmr3187205f8f.1.1774050967301; Fri, 20 Mar 2026 16:56:07 -0700 (PDT) Received: from fridge ([195.174.58.89]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43b6470c239sm9663418f8f.27.2026.03.20.16.56.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 16:56:06 -0700 (PDT) From: Emre Cecanpunar To: platform-driver-x86@vger.kernel.org Cc: hansg@kernel.org, ilpo.jarvinen@linux.intel.com, krishna.chomal108@gmail.com, linux-kernel@vger.kernel.org, Emre Cecanpunar Subject: [PATCH 1/5] platform/x86: hp-wmi: fix ignored return values in fan settings Date: Sat, 21 Mar 2026 02:55:53 +0300 Message-ID: <20260320235557.56298-2-emreleno@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260320235557.56298-1-emreleno@gmail.com> References: <20260320235557.56298-1-emreleno@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" hp_wmi_get_fan_count_userdefine_trigger() can fail, but its return value was silently discarded in the PWM_MODE_MAX and PWM_MODE_AUTO cases of hp_wmi_apply_fan_settings(). The same function's return value is already checked in hp_wmi_fan_speed_set(). Propagate errors consistently. hp_wmi_apply_fan_settings() itself returned an error code in all paths, but its callers hp_wmi_hwmon_keep_alive_handler() and hp_wmi_hwmon_init() both discarded the return value. Log failures via pr_warn_ratelimited() in the keep-alive handler (rate-limited because it fires every 90 seconds) and dev_warn() in init (non-fatal: the hwmon device is already registered). Also remove the unreachable "return 0" after the switch statement in hp_wmi_apply_fan_settings(): every case branch already returns explicitly. Signed-off-by: Emre Cecanpunar --- drivers/platform/x86/hp/hp-wmi.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-= wmi.c index 68ede7e5757a..0cb2a2b31998 100644 --- a/drivers/platform/x86/hp/hp-wmi.c +++ b/drivers/platform/x86/hp/hp-wmi.c @@ -2334,8 +2334,11 @@ static int hp_wmi_apply_fan_settings(struct hp_wmi_h= wmon_priv *priv) =20 switch (priv->mode) { case PWM_MODE_MAX: - if (is_victus_s_thermal_profile()) - hp_wmi_get_fan_count_userdefine_trigger(); + if (is_victus_s_thermal_profile()) { + ret =3D hp_wmi_get_fan_count_userdefine_trigger(); + if (ret < 0) + return ret; + } ret =3D hp_wmi_fan_speed_max_set(1); if (ret < 0) return ret; @@ -2353,7 +2356,9 @@ static int hp_wmi_apply_fan_settings(struct hp_wmi_hw= mon_priv *priv) return 0; case PWM_MODE_AUTO: if (is_victus_s_thermal_profile()) { - hp_wmi_get_fan_count_userdefine_trigger(); + ret =3D hp_wmi_get_fan_count_userdefine_trigger(); + if (ret < 0) + return ret; ret =3D hp_wmi_fan_speed_max_reset(priv); } else { ret =3D hp_wmi_fan_speed_max_set(0); @@ -2366,8 +2371,6 @@ static int hp_wmi_apply_fan_settings(struct hp_wmi_hw= mon_priv *priv) /* shouldn't happen */ return -EINVAL; } - - return 0; } =20 static umode_t hp_wmi_hwmon_is_visible(const void *data, @@ -2509,6 +2512,7 @@ static void hp_wmi_hwmon_keep_alive_handler(struct wo= rk_struct *work) { struct delayed_work *dwork; struct hp_wmi_hwmon_priv *priv; + int ret; =20 dwork =3D to_delayed_work(work); priv =3D container_of(dwork, struct hp_wmi_hwmon_priv, keep_alive_dwork); @@ -2516,7 +2520,10 @@ static void hp_wmi_hwmon_keep_alive_handler(struct w= ork_struct *work) * Re-apply the current hwmon context settings. * NOTE: hp_wmi_apply_fan_settings will handle the re-scheduling. */ - hp_wmi_apply_fan_settings(priv); + ret =3D hp_wmi_apply_fan_settings(priv); + if (ret) + pr_warn_ratelimited("keep-alive failed to refresh fan settings: %d\n", + ret); } =20 static int hp_wmi_setup_fan_settings(struct hp_wmi_hwmon_priv *priv) @@ -2578,7 +2585,9 @@ static int hp_wmi_hwmon_init(void) =20 INIT_DELAYED_WORK(&priv->keep_alive_dwork, hp_wmi_hwmon_keep_alive_handle= r); platform_set_drvdata(hp_wmi_platform_dev, priv); - hp_wmi_apply_fan_settings(priv); + ret =3D hp_wmi_apply_fan_settings(priv); + if (ret) + dev_warn(dev, "Failed to apply initial fan settings: %d\n", ret); =20 return 0; } --=20 2.53.0 From nobody Mon Apr 6 09:10:01 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C080D3612D5 for ; Fri, 20 Mar 2026 23:56:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050986; cv=none; b=nuYqQPdM6hail27SyudqAqTwim0E2kCWZiKYJAfw3olfjv7n3y6G2W+nO2xug7Fm8wTdBcImP3H2wKW4P0YHThD9aWc8sSynrW+JQ4QBKEuSsrF3u6IjI9lqxl+eLhsbjtFlQW6ntgPLJZIWWfpqJSQJzO+7xV8GMzIUCZGYMYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050986; c=relaxed/simple; bh=cUQdFgJp+vRzURST+mEj40buJgJjr19u5nHUQ/zSxsE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t/ZHrMNqsqbdp61tpab4Xr5lksEnglSSRP0bYA5z+2ELdiiyT4Mc/1qXRftHPDxFBrt47cBkjG5VxwG+EIFj7d7x1fIIoz/Q2YItns/A8BAU59hUwYeigcxNDECxdMicpudx8XGjX/li/Rt2S+/FmdDgnETU3VJlsANjwpl5gW0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gfIszpX1; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gfIszpX1" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-485358f43e7so3009485e9.2 for ; Fri, 20 Mar 2026 16:56:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774050970; x=1774655770; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SMegNoYPQ15g9bb1XM2RAfuMgiTFEwFZRaFEUS/laHQ=; b=gfIszpX1THsfW7/L0pT8qtX/636+zxwq7Ne6oduRu2N9F5YlmG0Rztk7O77kowwoiv NG1i6eA5aCJJkFtRWXJFKr/SZO0YbknBtnYO4uRzVF5TpZkdBeu/SOOXpi4ps0wiTwW6 A+qbkYoLd0HjCTxiCljaMFB/hdo9PCubY6JKtViL80Df2TQprq4VguxF4Mn/8KScfWLf XA0vA9NAydB6U6LZcVoQzDGTVfJ9UMNiBYPtm93SfwcyvIYovhjGjzNUNA2Pw1swf8fX Z5ZT5x+hgy0reJQQMfSdesK1Ouy3sE72ULNzqPFtf4nUHQgKlskLOmjsHdE8p0qrOCBU zY4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774050970; x=1774655770; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=SMegNoYPQ15g9bb1XM2RAfuMgiTFEwFZRaFEUS/laHQ=; b=bcY/LhHn9++mwavJYvqtX4kcKMZNq7EpnUzgz7R/LgVx5bIXN6qiQhgkfHZNsIogYp 8mRhOqoUB0o546bS6Kxcb3uUkzQA1ly36EUDepzn1WebAipvFSEhrYJv0RV+Sp7UIf9a rEs9som4OeVvB8F56n9Fgde7wFKtEJaCigIHhynLWVJiOD092RuDUpDzC1A1usoUIAKB 3d9t4KeR4M6FpNdgb71WHYiD2dgm8huDVqlLgQW7kcFOVPm5cY2uZCyGKP6jIpU0hMSc X8lJXwWKJN24Re/cNf+S2OT8knXRVN0uEFdTqGvxln6YqkYtGR5TfjVntX46BEWc8dGf 67cQ== X-Forwarded-Encrypted: i=1; AJvYcCV7K2/x9tQ/MaGZesAJqXOoYB0K4bgcHvkAv8ilC827e2OaZ2wSEvbVDMMGrELUfqs48iIGMeAyx8laI1I=@vger.kernel.org X-Gm-Message-State: AOJu0YzI9XNx0XII8dCNqRpjzfdq/ahQ1ZnNazt6CE5g1miXx3TkNDZv muEpIbgJdW3NGmpYzj/Lcl2julAT9IwiagTe5Btznw5T/iR54vgkHMGi X-Gm-Gg: ATEYQzwhaluLDVHA0I+7TlolOzaX7GtQSA7oeWAWtsA02aSMLLowIoya9tWqw7cXFpi o/dYJtKHqum3v+rptXX+XXiQqZ8Z8mByHiEMbsJGiikg/EM8NqO/R92SG0XDP+mC4Kp+see7Olb H17g0eW+4Zqq/2fOzGi0vO3lgXut4Bwjn8WubGD83Mf+LFx+3JK7ErKnN/l0Mh7dPZkyVsA8XWV VkK7Xdm9zqfP0exPOajS/VY/DloNFZ+XXwHXHRfqVKaY7X2ijNyQgq2Rw4k8zmf35sIiHKT6EIj Auv+Q5zQnav9UEUQZorBCiA+v+fSMRzpwORC2XY4wnlrQtc8dqRIC5OAtL/+lMWw8ylMa3JEVE7 PleeoIYAdgXpasUSNZ8Z54zUG0fBt8+wCHNfilAIf3hxwtGffWG0N2Sn2TZwl42X/WUlPKFKHjU YB/JKHPoTWjIS2/efSnBWstEgUdgL0+0SVuWTnhtRFbFjuWA== X-Received: by 2002:a05:600c:138a:b0:485:3177:d805 with SMTP id 5b1f17b1804b1-486fee29279mr39897345e9.7.1774050969662; Fri, 20 Mar 2026 16:56:09 -0700 (PDT) Received: from fridge ([195.174.58.89]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43b6470c239sm9663418f8f.27.2026.03.20.16.56.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 16:56:09 -0700 (PDT) From: Emre Cecanpunar To: platform-driver-x86@vger.kernel.org Cc: hansg@kernel.org, ilpo.jarvinen@linux.intel.com, krishna.chomal108@gmail.com, linux-kernel@vger.kernel.org, Emre Cecanpunar Subject: [PATCH 2/5] platform/x86: hp-wmi: avoid cancel_delayed_work_sync from work handler Date: Sat, 21 Mar 2026 02:55:54 +0300 Message-ID: <20260320235557.56298-3-emreleno@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260320235557.56298-1-emreleno@gmail.com> References: <20260320235557.56298-1-emreleno@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" hp_wmi_apply_fan_settings() calls cancel_delayed_work_sync() in the PWM_MODE_AUTO case to stop the keep-alive timer. This function is also called from hp_wmi_hwmon_keep_alive_handler(), which is itself a delayed work handler. If the keep-alive work is executing and the fan mode happens to be AUTO (e.g. a concurrent sysfs write changed it just before the handler read priv->mode), cancel_delayed_work_sync() tries to flush the work item it is already running inside, causing a deadlock. The workqueue documentation explicitly requires callers to ensure this self-flush situation does not arise. Replace cancel_delayed_work_sync() with cancel_delayed_work() in hp_wmi_apply_fan_settings(). The non-synchronous variant cancels pending work without waiting for a running instance to complete, avoiding the deadlock. The synchronous cancel in hp_wmi_bios_remove() is unaffected and still provides the final cleanup guarantee at driver removal time. Signed-off-by: Emre Cecanpunar --- drivers/platform/x86/hp/hp-wmi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-= wmi.c index 0cb2a2b31998..41769c0861e5 100644 --- a/drivers/platform/x86/hp/hp-wmi.c +++ b/drivers/platform/x86/hp/hp-wmi.c @@ -2365,7 +2365,7 @@ static int hp_wmi_apply_fan_settings(struct hp_wmi_hw= mon_priv *priv) } if (ret < 0) return ret; - cancel_delayed_work_sync(&priv->keep_alive_dwork); + cancel_delayed_work(&priv->keep_alive_dwork); return 0; default: /* shouldn't happen */ --=20 2.53.0 From nobody Mon Apr 6 09:10:01 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 052BC3F54BA for ; Fri, 20 Mar 2026 23:56:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050990; cv=none; b=fmQAEjJEvwvLkD5ogr/G/dbj5aLJtWDXv4/dmyELmIvXAE1OjNWNGx8J2i35ScAZBjLyW7uT3OFanOuVc1wVLo3JmL7Ysx5oCr9wgBfJb6O7hvytYPCdlg7auV1Opl6om/sNt7G+5iVnNRZaVrMgWrPaAaifVk4sQIwfDZShVKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050990; c=relaxed/simple; bh=oLKGlkhw2FIIbPnQj7+BVbg/ng9EcldtKCH1eAUAjOY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QfFzoIW9vMYhTIJ2MBmHg9dYbRFIRb2yJkWRYw0G/lepTSPGy7Gb74vj1AeDfTMaxNWE+ubvM/Mu/ps8+95HPzl/gHHQSPZ5B68sk2urlTT60N4A+fe8WxOjoxTB7o2m+fX3e4toXvEYd4PxP91AUHmqZ/xqp0S083otVvNZMzE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gnqQw7Rl; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gnqQw7Rl" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4836cd6e0d4so3050365e9.3 for ; Fri, 20 Mar 2026 16:56:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774050971; x=1774655771; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yHNkiyRvuF9AQ8guLO6hV3hpVtlWV/mWDZ+jV3RDgbg=; b=gnqQw7RlCkHfep/q0tlEo4epoADnRob3nUACRDSd7beNuRq78smRzVriWb16Cii7dz hmAkQKoxuIWxUjhMpLsWOiNAZB0kF6wDxbwym1U7y+v2R/I51XNBYfTQG4xnV9BsAqSA 8s5EKWqcAg3oLNE0LNpVKDRnOpqaccg0kERpzBT3WSJ+5uTteUFFzxKxFOmlwt1B5+oy hbUoT3zWxXUeEH4dTaxF/3j1N4J9Gs0KmXzGQZFqM191Mu2RtwVnsC8qYa7639TdQn3Y H5pWCX1Bg5ytvDBvg8deKeAz4451UAU44yycHfx7HUH4GKyP+UhrvCKjkf2/D/yBuKAA 8NuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774050971; x=1774655771; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yHNkiyRvuF9AQ8guLO6hV3hpVtlWV/mWDZ+jV3RDgbg=; b=Gm4WG0GNrKsOGrS5qBd3C71l80y1+PV60UWewQtIFvoUP68fmiWQ8gWvTlYPXizGot IRSh5QDjWHWQfHDYe6GPQPU3ALdK3s4dmIq4VfvLWcIB4MlXjzAMXnTpP87p6HMbLYI7 fhsWuHAylh7GQ2Nm9jyFS7pMW4ysDfR1U+/wTZ6A1lCfw0pPgXZaSwjKcrDv8vwHwlhK 0imwD0eQcZdna01IQer0AP3BRf+A/FaNyjhfaAGfYq0U+e/9thL6fobHZXRWPYlf3pwK 0j/cgJCvdqjmIg6kvRfMEXkgYZKREqzdcMOKGNVkCUfmJ64n0vCV+24R1e5j6qwGdG+q s8OQ== X-Forwarded-Encrypted: i=1; AJvYcCV2V1AHL93WDJqrYu1wGF+xYqkH7vENTbEF6YaLWzG4piC7aO+eUN9xzJshwxJ8FJLTQDttDOkyDVSfh9E=@vger.kernel.org X-Gm-Message-State: AOJu0YzyrH+zlSHEzJiTwT398MfltEZKotbhsO3Dh+paj6UuqEZtmsd+ amfFKut0Oc/0JiaYkSBAXMjoXcVFPkIWxK+NivtXfRjvhQSWQzS1FKc++OFGyx+d2cc= X-Gm-Gg: ATEYQzz76z4+cJGdaJ+yzHYOIERE5c2GGNVVxd0XyU2E5I/UDp68fCWXvVbqLsRU/OU 4Gg66TQpQ7zg0ckAJ8kQW+PIv2/tQV0/oqltD3h+x4Nk9j7VH0nLV9VvN9Z+HjYeC/WXGTEpib4 r7k+lJZ72gKctVXUagpihMrCNCoK8CtvCd20xcR/W3OBf26kiY9RbHH7egeu5lvE7MLvjUhmFho 8kSFq4+EwHDngaPhwFD0oKftKHMtg7rdMjvEF9Qz7YulM3521H25WwZi96jHEkyPjN0U++R+uUg jUroEH0cDexNppIIq5NSMdEhHXP3VoZ0dK7E050IAY6MDUjNDZdX9gPtweR3nfaPshjpSHpQxpZ zFOsdVwCjjUuDKEXtPVZ2hZxzhTrWk2NGJ1fCmrwVeavDeHK1Px2w+Qeyk+1SzgEBA8MaY701an ieMNXoifi+UeIv65kPO3ej8nsPdmyWPZuD9C8GBU+y54Y1bQ== X-Received: by 2002:a05:600c:630d:b0:485:385f:674d with SMTP id 5b1f17b1804b1-486ff0230d9mr45474065e9.8.1774050971412; Fri, 20 Mar 2026 16:56:11 -0700 (PDT) Received: from fridge ([195.174.58.89]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43b6470c239sm9663418f8f.27.2026.03.20.16.56.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 16:56:11 -0700 (PDT) From: Emre Cecanpunar To: platform-driver-x86@vger.kernel.org Cc: hansg@kernel.org, ilpo.jarvinen@linux.intel.com, krishna.chomal108@gmail.com, linux-kernel@vger.kernel.org, Emre Cecanpunar Subject: [PATCH 3/5] platform/x86: hp-wmi: use mod_delayed_work to reset keep-alive timer Date: Sat, 21 Mar 2026 02:55:55 +0300 Message-ID: <20260320235557.56298-4-emreleno@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260320235557.56298-1-emreleno@gmail.com> References: <20260320235557.56298-1-emreleno@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The keep-alive mechanism re-applies fan settings every 90 seconds to prevent the firmware from reverting to automatic mode after its 120 s timeout. Fan settings are also applied immediately when the user writes to the hwmon sysfs interface. schedule_delayed_work() is a no-op when the work item is already pending. If the user updates fan settings at T=3D85s, the keep-alive still fires at T=3D90s (5 s after the update) instead of 90 s later. This shortens the effective keep-alive window and may allow the firmware timeout to expire between cycles. Replace schedule_delayed_work() with mod_delayed_work() in both the PWM_MODE_MAX and PWM_MODE_MANUAL cases. mod_delayed_work() resets the delay to KEEP_ALIVE_DELAY_SECS from the time of each call, whether or not the work is already pending, ensuring each user action and each keep-alive expiry restarts the full 90 s window. Signed-off-by: Emre Cecanpunar --- drivers/platform/x86/hp/hp-wmi.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-= wmi.c index 41769c0861e5..a29f34588055 100644 --- a/drivers/platform/x86/hp/hp-wmi.c +++ b/drivers/platform/x86/hp/hp-wmi.c @@ -2342,8 +2342,8 @@ static int hp_wmi_apply_fan_settings(struct hp_wmi_hw= mon_priv *priv) ret =3D hp_wmi_fan_speed_max_set(1); if (ret < 0) return ret; - schedule_delayed_work(&priv->keep_alive_dwork, - secs_to_jiffies(KEEP_ALIVE_DELAY_SECS)); + mod_delayed_work(system_wq, &priv->keep_alive_dwork, + secs_to_jiffies(KEEP_ALIVE_DELAY_SECS)); return 0; case PWM_MODE_MANUAL: if (!is_victus_s_thermal_profile()) @@ -2351,8 +2351,8 @@ static int hp_wmi_apply_fan_settings(struct hp_wmi_hw= mon_priv *priv) ret =3D hp_wmi_fan_speed_set(priv, pwm_to_rpm(priv->pwm, priv)); if (ret < 0) return ret; - schedule_delayed_work(&priv->keep_alive_dwork, - secs_to_jiffies(KEEP_ALIVE_DELAY_SECS)); + mod_delayed_work(system_wq, &priv->keep_alive_dwork, + secs_to_jiffies(KEEP_ALIVE_DELAY_SECS)); return 0; case PWM_MODE_AUTO: if (is_victus_s_thermal_profile()) { --=20 2.53.0 From nobody Mon Apr 6 09:10:01 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 724EC3F880D for ; Fri, 20 Mar 2026 23:56:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050992; cv=none; b=Gr/pCHbwRMEMROKgPGR1ZY2nFoMaGbfyhkGMLlg/+wTYO3oe8NcNQj+sXowJmhD0uUQecBQBDOW90TJ979dRgJt5Jq/8eq5R8UtMTbz8soC6PjRTJwMYnzpzkLhkfmyweX4BLAxVZ4bR9X4VeJ3xz1oVKOZul9zJeg6olVyKOW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050992; c=relaxed/simple; bh=/ayxj6Iq3ZtFC4pNNAHwYAhIzJBpO1wGwBIQTtXpUYY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tSZwfdfAHf7Rct0pWS/CGxEW+2Sl/K696XESM6fRlMZaZ9/cfLjqulML3y5DG8FiL50/ayE10gtsaCmuSaUW2OyDcYRA7EJJG+bL8rb1iI/OVYiQL8/X0seApqct3sUvlNZbO/WWm5VQUiF68K8TGp7A2b1nS2+R1rUb4z173io= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nOSp18OB; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nOSp18OB" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-486fd5c4891so1339045e9.2 for ; Fri, 20 Mar 2026 16:56:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774050973; x=1774655773; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wlLxB5XuF7wDeRYUxBFcZ01DQMhckho1l6xRy+06+vo=; b=nOSp18OBTXIBSFHceC6RGD+lmeql2n+Iqj/UzOUHkkI95t1i11dBX86sF6xWbGJGaQ YvJipr+OD+Jectp/bCRWUQJqvZKrFGCxlUkFKI3sHadDK+bt0EbBzXXx6v2PdYCHVRNa J/hDCMZPEVjRBTWbTF6/1gYGl2a2S9QNGZzZfV1OX4jEe9cFw6Z92wivMYv8g+IewUZd Tlw22VK6puIuphmjyIMhNif8MbSBNZsQu7qXKpAsxnNzMMMOmBHUWBuC0NshhfDWKPYK huphq7IM9tiapmYkSsXwYajc8Kkzhztpi2Hs7ZTOk8xsqISucFcJvAGaD4tGLLJkNgmw rg1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774050973; x=1774655773; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wlLxB5XuF7wDeRYUxBFcZ01DQMhckho1l6xRy+06+vo=; b=igBJfA2xJNo9UcKKg01pZAuOM5/TIcjL8KaTrPz5G9E1xPXlI21J63nEtwBunp5PgE L8wjDIe4PR0yMr9Skicete7nj5fhtIKS2osFfvwoQLiZ3Y4dJWl3MeBgVY9vVf2InKi+ /UB1p+iRSzR0U8CMq8qhrCRm3kQ2Dl+Swst6sMQ6hR3n9RMnXVyOZx9BeXci4dxKHmco d8Fa66RZP1pqdAzW79spcbMI1cQULhEkXUt1jeT6oz2K99lsX8ccJM8g4Wyen3FzhCTU QJAH2RBM/3VQIUYrDQAT/rhdMY2eGNDWlTJRmNWe4iDrGCiXa3E5uqDPE2Vxeld8SJjQ Pbqw== X-Forwarded-Encrypted: i=1; AJvYcCWXwAHDEykP3GuKdtkCDRsycKN/HPl3+LyQZrSh0wzeA7m0YAn4FForKl8hhvcu9SevamyNO4Vc1q27dKs=@vger.kernel.org X-Gm-Message-State: AOJu0YzzFKFDYvej9f03B3ocL5Kn1WLqr+Km1fwF3Hp6ba2ClL+QKt8Z fLwWbvb+gQqCfd8KZORT3+Xk+KgyiePYOKgdd8ztTL0HKkiiwRqk2OAj X-Gm-Gg: ATEYQzz8P7Zux/FUyse2GqScf4CmA4CqFtVhTh/MZVhBBt8BIZuMtH4qdpZU8OE5dXd +xNtkt+0vafz+hLhiNZEyVJxg+0dNrAN2+Ou7Hfkd/Bvvvbn1uQLo0EZIrS9KCI+NyKs6xXifUV 7aZMyd2i96u0F0mlpKkSRXzbO1uk5cuzApbL7YaAx0SOIaREuJA0uS0998upz+1y53Rp10iD8JD Cv2fFl1aSGEepkJ6+upH8exbiIRRLSCWp+Op7dUB4Gmd61f5/nRsUWwBfDtS/Uvz7h1brVIFwNu 1CLV/alulgeFxTl5eisrfl5VOzKigj7GuGqHva++19jlvg70GAlifp5edEjH79rHvlrZEAX3G2k KvfDZTq1evCNMBKSjKKu04b6PP8734j4YV2NKboBm2WUx1DMDmiObkoFk0ONlfQ9JaRBqy10U4W HddWz0O71Ih0O9TEfg56VSI7VaiBECXSq8DHt4kkfcTbIivJVYBQ3OQrqi X-Received: by 2002:a05:600c:1d29:b0:483:887:6e32 with SMTP id 5b1f17b1804b1-486ff02fb18mr50977025e9.8.1774050973143; Fri, 20 Mar 2026 16:56:13 -0700 (PDT) Received: from fridge ([195.174.58.89]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43b6470c239sm9663418f8f.27.2026.03.20.16.56.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 16:56:12 -0700 (PDT) From: Emre Cecanpunar To: platform-driver-x86@vger.kernel.org Cc: hansg@kernel.org, ilpo.jarvinen@linux.intel.com, krishna.chomal108@gmail.com, linux-kernel@vger.kernel.org, Emre Cecanpunar Subject: [PATCH 4/5] platform/x86: hp-wmi: fix u8 underflow in gpu_delta calculation Date: Sat, 21 Mar 2026 02:55:56 +0300 Message-ID: <20260320235557.56298-5-emreleno@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260320235557.56298-1-emreleno@gmail.com> References: <20260320235557.56298-1-emreleno@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" gpu_delta was declared as u8 and computed as the difference of two u8 fan RPM values from the firmware fan table. If gpu_rpm < cpu_rpm, the subtraction wraps around modulo 256, producing a large positive value (e.g. 10 - 20 =3D 246 as u8). This value is then added to every requested fan speed in hp_wmi_fan_speed_set(), causing the GPU fan to be clamped to U8_MAX on almost every write. The fan table originates from an undocumented WMI interface; a firmware bug or unexpected layout could produce this condition. Change gpu_delta to int and perform the subtraction in signed arithmetic. On underflow, emit a warning and treat the delta as zero so the GPU fan tracks the CPU fan directly rather than saturating. Signed-off-by: Emre Cecanpunar --- drivers/platform/x86/hp/hp-wmi.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-= wmi.c index a29f34588055..b8f22d70e996 100644 --- a/drivers/platform/x86/hp/hp-wmi.c +++ b/drivers/platform/x86/hp/hp-wmi.c @@ -2530,8 +2530,8 @@ static int hp_wmi_setup_fan_settings(struct hp_wmi_hw= mon_priv *priv) { u8 fan_data[128] =3D { 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; =20 /* Default behaviour on hwmon init is automatic mode */ priv->mode =3D PWM_MODE_AUTO; @@ -2553,10 +2553,15 @@ static int hp_wmi_setup_fan_settings(struct hp_wmi_= hwmon_priv *priv) =20 min_rpm =3D fan_table->entries[0].cpu_rpm; max_rpm =3D fan_table->entries[fan_table->header.num_entries - 1].cpu_rpm; - gpu_delta =3D fan_table->entries[0].gpu_rpm - fan_table->entries[0].cpu_r= pm; + gpu_delta =3D (int)fan_table->entries[0].gpu_rpm - + (int)fan_table->entries[0].cpu_rpm; + if (gpu_delta < 0) { + pr_warn("fan table has gpu_rpm < cpu_rpm, ignoring gpu delta\n"); + gpu_delta =3D 0; + } priv->min_rpm =3D min_rpm; priv->max_rpm =3D max_rpm; - priv->gpu_delta =3D gpu_delta; + priv->gpu_delta =3D (u8)gpu_delta; =20 return 0; } --=20 2.53.0 From nobody Mon Apr 6 09:10:01 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6D66378D7E for ; Fri, 20 Mar 2026 23:56:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050996; cv=none; b=qrDqvFzTGtBRJhmlPIl/NTU0O9MPFD3IVm6MNAsLUoap/0n6d7uKH+WU4WHNS/OTHApcJtevCyTAiAPadks5o9+GZ4QuueNwTr1A88lx7CDDEoYM0ByJjB3gaUG+ygIQsknmSMe1tpYIdlOtb4lFb+q6rmjDtOJAybBofeNXYrY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050996; c=relaxed/simple; bh=N0+TgX/rArUJD3hQne/JBBia//Bzgxpbz+kEB8NVbI4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sTK/ZM8BQ72ow8Ug9YX3s+r8K5C8mSy+dBxQ6f2JPMiwoLBYKE+MDdH77YvNfYvpk32d4tfE4UT05Nb8ZBNOJ3A1xjhcU5ekqFDbpAWipLpSw9watA4+b++qommD35esqK5+ji9gqz6kVKPsg97Xvv1NWAYZjo0yzKiW0PeVqlM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YUBo22s9; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YUBo22s9" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-48371104ffdso3035715e9.1 for ; Fri, 20 Mar 2026 16:56:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774050975; x=1774655775; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t6i2pacmWXPZlRin0kPUg4dFhoX7+Br8EHyM4nKfejw=; b=YUBo22s9/oD8QZW30GhoYL2fPf2QOCjwQIAelykHHlcCagNOVK28rz/cXSJW0JLh/u F0LEZ3atZYIUcX8MMEcFS2v6w9aVVQeVHvmJ+LqciA5JmQNFFW4LsZX2piy7A9ZevqXJ y3mTErVXP9AHJOmKbCEPnbDpHyp+elVFqetfe/h+7EMEp0w9Dl3pYHJGYXBepWmMx4lQ qQlhHiv/R1KHI70YQUbd5LFlTRDMuLbkuvEymPshl5vops6e/y8sKntmVzspMs5+tQh/ pGL/BiU8tZ/zsl++djh9luk4qCCoDV+9oYzZjOMbjt/tt7cxs2HVL8XRPjLTRvcKic+r gl5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774050975; x=1774655775; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=t6i2pacmWXPZlRin0kPUg4dFhoX7+Br8EHyM4nKfejw=; b=IA+hdGwmkk53czZgSZ0KSBPzwp2tBmMxr0QVA1rB45GpuDdeLygERFoWU/vdI3ypYF qB5m2GwyZDYmNm731QrYjVgW9ZWsqCbceyqe6u9M/b4eMG2LD0EBq5bfZ9xiNBIDCeEf DsJgFB77/XziQOAdOWJMJl0BKXzmqa+nwmY7pPmRE1j/IMkUhxZouZLJFgtvQIFbS778 qyVpUdzskKZiOLkpSiHDFXwC1xB6n10NQ3gOeUHnkqufg+c/ccUlLtlY5wZg8UR0vHSz 4C4KS4UEZNdqcgZUh6r1PcH1YXHvCDVIoNW0CaViZqTV8YPfVFz5FfYFAMc4sS5hl5oO YBWA== X-Forwarded-Encrypted: i=1; AJvYcCXyht3d31mQmt6B/tMsBILSVEyInvr+lexuaXY+IsoOgDQuQFGkbZlfteEmCfNnPdNHKsmxGoXo1bDfy7Y=@vger.kernel.org X-Gm-Message-State: AOJu0YwxF4BjaxJQkUrdcUWBkZ6M49Hgc+Nrsu/brk1FARYMNDUy/uaZ fLjmTbqqaTBA9S9Cja56w+AAXn6TP5qTFknNdIY0zbSHHfcX01Sm6cJ+GV4CxYtnGzc= X-Gm-Gg: ATEYQzzRZUr61W+oG3vCRIruhJ1rOxYx72vKJNe/J2dW8OH3mZ8ogFA2KrAF5zBQQ/Z rBXXsf089mphYj3DaLeff59YpdA37c4Lf4opLeliFGJg4SW7YVOoeldebBSgK8rNL1xAK1mim/s Riy2sMlG8zJzzAsV8/5ohmNlKNgRp8gepf/6WR4I43y+XYj1WBdNeSsp/DkvMcdGcphotCwODw+ +LhppkJH9ExhSGPyr3ou2MXSSurE55ynmC7sb3q0voAvCl0PdOrYt7IVRfCgpd4pEf2KVTtM+o5 n7ASsFsRUpx4E7KXEGqUP8G24PJ5B/Norq3ZxCN3ojXdU0oFVzxAyNKeEqVJVaqCSpbmxkvKCib X1RM8dq/8x5E41YHCHsmvlBjn9K43N4yNb549boXOkcZ9fowqxX6ZnouMw382Y8YMleUjWunlK8 mKbSMtpUXoGhQ5JXTk6h/InzjjLeaUoRllgBEJmR9ZJhe8uQ== X-Received: by 2002:a05:600c:1f0e:b0:471:ab1:18f5 with SMTP id 5b1f17b1804b1-486fee2dcfdmr39588675e9.7.1774050974792; Fri, 20 Mar 2026 16:56:14 -0700 (PDT) Received: from fridge ([195.174.58.89]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43b6470c239sm9663418f8f.27.2026.03.20.16.56.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 16:56:14 -0700 (PDT) From: Emre Cecanpunar To: platform-driver-x86@vger.kernel.org Cc: hansg@kernel.org, ilpo.jarvinen@linux.intel.com, krishna.chomal108@gmail.com, linux-kernel@vger.kernel.org, Emre Cecanpunar Subject: [PATCH 5/5] platform/x86: hp-wmi: add locking for concurrent hwmon access Date: Sat, 21 Mar 2026 02:55:57 +0300 Message-ID: <20260320235557.56298-6-emreleno@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260320235557.56298-1-emreleno@gmail.com> References: <20260320235557.56298-1-emreleno@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" hp_wmi_hwmon_priv.mode and .pwm are written by hp_wmi_hwmon_write() in sysfs context and read by hp_wmi_hwmon_keep_alive_handler() running in a workqueue. There is no synchronisation between them, so a concurrent sysfs write and keep-alive expiry can observe an inconsistent combination of mode and pwm (e.g. mode=3DMANUAL with an stale pwm value from the previous mode). Add a mutex to hp_wmi_hwmon_priv that protects mode and pwm. Acquire it in hp_wmi_hwmon_write() for the full write operation (field update plus hp_wmi_apply_fan_settings() call), and in hp_wmi_hwmon_keep_alive_handler() before calling hp_wmi_apply_fan_settings(). In hp_wmi_hwmon_read(), only the pwm_enable attribute reads priv->mode and requires the lock. Use scoped_guard() to hold the mutex only for the mode read, avoiding holding it across unrelated WMI hardware calls. Signed-off-by: Emre Cecanpunar --- drivers/platform/x86/hp/hp-wmi.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-= wmi.c index b8f22d70e996..cfb207f09e7b 100644 --- a/drivers/platform/x86/hp/hp-wmi.c +++ b/drivers/platform/x86/hp/hp-wmi.c @@ -434,6 +434,7 @@ enum pwm_modes { }; =20 struct hp_wmi_hwmon_priv { + struct mutex lock; /* protects mode, pwm */ u8 min_rpm; u8 max_rpm; u8 gpu_delta; @@ -2403,6 +2404,7 @@ static int hp_wmi_hwmon_read(struct device *dev, enum= hwmon_sensor_types type, { struct hp_wmi_hwmon_priv *priv; int rpm, ret; + u8 mode; =20 priv =3D dev_get_drvdata(dev); switch (type) { @@ -2426,11 +2428,13 @@ static int hp_wmi_hwmon_read(struct device *dev, en= um hwmon_sensor_types type, *val =3D rpm_to_pwm(rpm / 100, priv); return 0; } - switch (priv->mode) { + scoped_guard(mutex, &priv->lock) + mode =3D priv->mode; + switch (mode) { case PWM_MODE_MAX: case PWM_MODE_MANUAL: case PWM_MODE_AUTO: - *val =3D priv->mode; + *val =3D mode; return 0; default: /* shouldn't happen */ @@ -2448,6 +2452,7 @@ static int hp_wmi_hwmon_write(struct device *dev, enu= m hwmon_sensor_types type, int rpm; =20 priv =3D dev_get_drvdata(dev); + guard(mutex)(&priv->lock); switch (type) { case hwmon_pwm: if (attr =3D=3D hwmon_pwm_input) { @@ -2516,6 +2521,8 @@ static void hp_wmi_hwmon_keep_alive_handler(struct wo= rk_struct *work) =20 dwork =3D to_delayed_work(work); priv =3D container_of(dwork, struct hp_wmi_hwmon_priv, keep_alive_dwork); + + guard(mutex)(&priv->lock); /* * Re-apply the current hwmon context settings. * NOTE: hp_wmi_apply_fan_settings will handle the re-scheduling. @@ -2577,6 +2584,8 @@ static int hp_wmi_hwmon_init(void) if (!priv) return -ENOMEM; =20 + mutex_init(&priv->lock); + ret =3D hp_wmi_setup_fan_settings(priv); if (ret) return ret; --=20 2.53.0