From: surirajat@gmail.com
To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com
Cc: platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org,
ibm-acpi-devel@lists.sourceforge.net, markpearson@lenovo.com,
hdegoede@redhat.com, rajat.suri@dell.com
Subject: [PATCH] platform/x86: lenovo: convert mutex_init() users to devm_mutex_init()
Date: Fri, 30 Oct 2026 19:24:35 +0530 [thread overview]
Message-ID: <20261030135435.308058-1-surirajat@gmail.com> (raw)
From: Rajat Suri <rajat.suri@dell.com>
Convert the mutex_init() calls under drivers/platform/x86/lenovo/
to devm_mutex_init() so that the mutex lifecycle is managed by devres.
This removes the need for manual mutex_destroy() calls in wmi-camera and
ideapad-laptop, and fixes thinkpad_acpi, which never destroyed the
hotkey, brightness, volume and fan mutexes on its teardown path.
Details per driver:
- wmi-camera: bind notify_lock to the WMI device and drop the
mutex_destroy() from remove().
- ideapad-laptop: allocate the DYTC private data with devm_kzalloc() and
bind its mutex to the platform device. Calling mutex_destroy() on a
manually freed object is not possible with devres, so the kfree() and
ideapad_dytc_profile_exit() helper are removed as well. The memory now
outlives the platform profile registration, which is also devm managed
and therefore released in reverse order.
- thinkpad_acpi: bind the hotkey, hotkey thread data, brightness, volume
and fan mutexes to tpacpi_pdev, which is registered before any
subdriver init runs, and propagate a possible failure from
devm_mutex_init().
No functional change intended.
Signed-off-by: Rajat Suri <rajat.suri@dell.com>
---
drivers/platform/x86/lenovo/ideapad-laptop.c | 23 ++++----------------
drivers/platform/x86/lenovo/thinkpad_acpi.c | 21 +++++++++++++-----
drivers/platform/x86/lenovo/wmi-camera.c | 6 +----
3 files changed, 21 insertions(+), 29 deletions(-)
diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c
index fcb5ed7035f5..ee8e00bdaf6b 100644
--- a/drivers/platform/x86/lenovo/ideapad-laptop.c
+++ b/drivers/platform/x86/lenovo/ideapad-laptop.c
@@ -1172,11 +1172,13 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
return -ENODEV;
}
- priv->dytc = kzalloc_obj(*priv->dytc);
+ priv->dytc = devm_kzalloc(&priv->platform_device->dev, sizeof(*priv->dytc), GFP_KERNEL);
if (!priv->dytc)
return -ENOMEM;
- mutex_init(&priv->dytc->mutex);
+ err = devm_mutex_init(&priv->platform_device->dev, &priv->dytc->mutex);
+ if (err)
+ goto pp_reg_failed;
priv->dytc->priv = priv;
@@ -1195,24 +1197,11 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
return 0;
pp_reg_failed:
- mutex_destroy(&priv->dytc->mutex);
- kfree(priv->dytc);
priv->dytc = NULL;
return err;
}
-static void ideapad_dytc_profile_exit(struct ideapad_private *priv)
-{
- if (!priv->dytc)
- return;
-
- mutex_destroy(&priv->dytc->mutex);
- kfree(priv->dytc);
-
- priv->dytc = NULL;
-}
-
/*
* Rfkill
*/
@@ -2487,8 +2476,6 @@ static int ideapad_acpi_add(struct platform_device *pdev)
ideapad_backlight_exit(priv);
backlight_failed:
- ideapad_dytc_profile_exit(priv);
-
for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++)
ideapad_unregister_rfkill(priv, i);
@@ -2516,8 +2503,6 @@ static void ideapad_acpi_remove(struct platform_device *pdev)
ideapad_acpi_notify);
ideapad_backlight_exit(priv);
- ideapad_dytc_profile_exit(priv);
-
for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++)
ideapad_unregister_rfkill(priv, i);
diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c
index 4f81855ad721..8c7d6f281ae3 100644
--- a/drivers/platform/x86/lenovo/thinkpad_acpi.c
+++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c
@@ -3381,10 +3381,14 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
tpacpi_inputdev->close != NULL);
TPACPI_ACPIHANDLE_INIT(hkey);
- mutex_init(&hotkey_mutex);
+ res = devm_mutex_init(&tpacpi_pdev->dev, &hotkey_mutex);
+ if (res)
+ return res;
#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL
- mutex_init(&hotkey_thread_data_mutex);
+ res = devm_mutex_init(&tpacpi_pdev->dev, &hotkey_thread_data_mutex);
+ if (res)
+ return res;
#endif
/* hotkey not supported on 570 */
@@ -6834,7 +6838,9 @@ static int __init brightness_init(struct ibm_init_struct *iibm)
vdbg_printk(TPACPI_DBG_INIT, "initializing brightness subdriver\n");
- mutex_init(&brightness_mutex);
+ b = devm_mutex_init(&tpacpi_pdev->dev, &brightness_mutex);
+ if (b)
+ return b;
quirks = tpacpi_check_quirks(brightness_quirk_table,
ARRAY_SIZE(brightness_quirk_table));
@@ -7575,7 +7581,9 @@ static int __init volume_init(struct ibm_init_struct *iibm)
vdbg_printk(TPACPI_DBG_INIT, "initializing volume subdriver\n");
- mutex_init(&volume_mutex);
+ rc = devm_mutex_init(&tpacpi_pdev->dev, &volume_mutex);
+ if (rc)
+ return rc;
/*
* Check for module parameter bogosity, note that we
@@ -8913,11 +8921,14 @@ static const struct tpacpi_quirk fan_quirk_table[] __initconst = {
static int __init fan_init(struct ibm_init_struct *iibm)
{
unsigned long quirks;
+ int rc;
vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_FAN,
"initializing fan subdriver\n");
- mutex_init(&fan_mutex);
+ rc = devm_mutex_init(&tpacpi_pdev->dev, &fan_mutex);
+ if (rc)
+ return rc;
fan_status_access_mode = TPACPI_FAN_NONE;
fan_control_access_mode = TPACPI_FAN_WR_NONE;
fan_control_commands = 0;
diff --git a/drivers/platform/x86/lenovo/wmi-camera.c b/drivers/platform/x86/lenovo/wmi-camera.c
index 89ecbce60bf4..de4596686d2a 100644
--- a/drivers/platform/x86/lenovo/wmi-camera.c
+++ b/drivers/platform/x86/lenovo/wmi-camera.c
@@ -107,9 +107,7 @@ static int lenovo_wmi_probe(struct wmi_device *wdev, const void *context)
dev_set_drvdata(&wdev->dev, priv);
- mutex_init(&priv->notify_lock);
-
- return 0;
+ return devm_mutex_init(&wdev->dev, &priv->notify_lock);
}
static void lenovo_wmi_remove(struct wmi_device *wdev)
@@ -118,8 +116,6 @@ static void lenovo_wmi_remove(struct wmi_device *wdev)
if (priv->idev)
input_unregister_device(priv->idev);
-
- mutex_destroy(&priv->notify_lock);
}
static const struct wmi_device_id lenovo_wmi_id_table[] = {
--
2.43.0
next reply other threads:[~2026-10-30 13:55 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-30 13:54 surirajat [this message]
2026-10-30 14:03 ` Ilpo Järvinen
2026-10-31 1:04 ` Mark Pearson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261030135435.308058-1-surirajat@gmail.com \
--to=surirajat@gmail.com \
--cc=hansg@kernel.org \
--cc=hdegoede@redhat.com \
--cc=ibm-acpi-devel@lists.sourceforge.net \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=markpearson@lenovo.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rajat.suri@dell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®