]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
platform/x86: hp-wmi: avoid cancel_delayed_work_sync from work handler
authorEmre Cecanpunar <emreleno@gmail.com>
Tue, 7 Apr 2026 14:25:11 +0000 (17:25 +0300)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Thu, 9 Apr 2026 11:46:31 +0000 (14:46 +0300)
hp_wmi_apply_fan_settings() uses cancel_delayed_work_sync() to stop
the keep-alive timer in AUTO mode. However, since
hp_wmi_apply_fan_settings() is also called from the keep-alive
handler, a race condition with a sysfs write can cause the handler to
wait on itself, leading to a deadlock.

Replace cancel_delayed_work_sync() with cancel_delayed_work() in
hp_wmi_apply_fan_settings() to avoid the self-flush deadlock.

Fixes: c203c59fb5de ("platform/x86: hp-wmi: implement fan keep-alive")
Signed-off-by: Emre Cecanpunar <emreleno@gmail.com>
Link: https://patch.msgid.link/20260407142515.20683-3-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 eac39f68d762c547814ea44224e255079af4fed5..79d6bc3cd223ad3abd0a7348825e9bdce36538e7 100644 (file)
@@ -2384,7 +2384,7 @@ static int hp_wmi_apply_fan_settings(struct hp_wmi_hwmon_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 */