Re: [PATCH 1/3] platform/x86: thinkpad_acpi: convert mutex_lock() to guard(mutex)
"Mark Pearson" <[email protected]>
| Newsgroups | org.kernel.vger.platform-driver-x86,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Thanks Dmitry, On Thu, Aug 6, 2026, at 2:19 AM, Dmitry Torokhov wrote: > Convert straightforward mutex_lock() and mutex_unlock() usages for > hotkey_mutex, tpacpi_inputdev_send_mutex, kbdlight_mutex, lcdshadow_dev > lock, and dytc_mutex to guard(mutex) and scoped_guard(mutex) helpers > from linux/cleanup.h. > > This improves code readability and ensures that mutexes are > automatically released when exiting their respective scopes. > > Assisted-by: Antigravity:gemini-3.6-flash > Signed-off-by: Dmitry Torokhov <[email protected]> > --- > drivers/platform/x86/lenovo/thinkpad_acpi.c | 139 ++++++++------------ > 1 file changed, 57 insertions(+), 82 deletions(-) > > diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c > b/drivers/platform/x86/lenovo/thinkpad_acpi.c > index f8e116e8a65d..beb85ea1103b 100644 > --- a/drivers/platform/x86/lenovo/thinkpad_acpi.c > +++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c > @@ -2164,7 +2164,7 @@ static int tpacpi_hotkey_driver_mask_set(const > u32 mask) > return 0; > } > > - mutex_lock(&hotkey_mutex); > + guard(mutex)(&hotkey_mutex); > > HOTKEY_CONFIG_CRITICAL_START > hotkey_driver_mask = mask; > @@ -2177,8 +2177,6 @@ static int tpacpi_hotkey_driver_mask_set(const u32 mask) > ~hotkey_source_mask); > hotkey_poll_setup(true); > > - mutex_unlock(&hotkey_mutex); > - > return rc; > } > > @@ -2202,15 +2200,12 @@ static void tpacpi_input_send_tabletsw(void) > { > int state; > > - if (tp_features.hotkey_tablet && > - !hotkey_get_tablet_mode(&state)) { > - mutex_lock(&tpacpi_inputdev_send_mutex); > + if (tp_features.hotkey_tablet && !hotkey_get_tablet_mode(&state)) { > + guard(mutex)(&tpacpi_inputdev_send_mutex); > > input_report_switch(tpacpi_inputdev, > SW_TABLET_MODE, !!state); > input_sync(tpacpi_inputdev); > - > - mutex_unlock(&tpacpi_inputdev_send_mutex); > } > } > > @@ -2235,7 +2230,6 @@ static int get_camera_shutter(void) > > static bool tpacpi_input_send_key(const u32 hkey, bool *send_acpi_ev) > { > - bool known_ev; > u32 scancode; > > if (tpacpi_driver_event(hkey)) > @@ -2278,11 +2272,8 @@ static bool tpacpi_input_send_key(const u32 > hkey, bool *send_acpi_ev) > scancode = hkey; > } > > - mutex_lock(&tpacpi_inputdev_send_mutex); > - known_ev = sparse_keymap_report_event(tpacpi_inputdev, scancode, 1, true); > - mutex_unlock(&tpacpi_inputdev_send_mutex); > - > - return known_ev; > + guard(mutex)(&tpacpi_inputdev_send_mutex); > + return sparse_keymap_report_event(tpacpi_inputdev, scancode, 1, true); > } > > #ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL > @@ -2572,9 +2563,8 @@ static void hotkey_poll_setup(const bool may_warn) > > static void hotkey_poll_setup_safe(const bool may_warn) > { > - mutex_lock(&hotkey_mutex); > + guard(mutex)(&hotkey_mutex); > hotkey_poll_setup(may_warn); > - mutex_unlock(&hotkey_mutex); > } > > static void hotkey_poll_set_freq(unsigned int freq) > @@ -3077,13 +3067,11 @@ static void tpacpi_send_radiosw_update(void) > > /* Issue rfkill input event for WLSW switch */ > if (!(wlsw < 0)) { > - mutex_lock(&tpacpi_inputdev_send_mutex); > + guard(mutex)(&tpacpi_inputdev_send_mutex); > > input_report_switch(tpacpi_inputdev, > SW_RFKILL_ALL, (wlsw > 0)); > input_sync(tpacpi_inputdev); > - > - mutex_unlock(&tpacpi_inputdev_send_mutex); > } > > /* > @@ -3095,7 +3083,7 @@ static void tpacpi_send_radiosw_update(void) > > static void hotkey_exit(void) > { > - mutex_lock(&hotkey_mutex); > + guard(mutex)(&hotkey_mutex); > hotkey_poll_stop_sync(); > dbg_printk(TPACPI_DBG_EXIT | TPACPI_DBG_HKEY, > "restoring original HKEY status and mask\n"); > @@ -3105,8 +3093,6 @@ static void hotkey_exit(void) > hotkey_mask_set(hotkey_orig_mask)) | > hotkey_status_set(false)) != 0) > pr_err("failed to restore hot key mask to BIOS defaults\n"); > - > - mutex_unlock(&hotkey_mutex); > } > > /* > @@ -3423,11 +3409,11 @@ static int __init hotkey_init(struct > ibm_init_struct *iibm) > if (tp_features.hotkey_mask) { > /* hotkey_source_mask *must* be zero for > * the first hotkey_mask_get to return hotkey_orig_mask */ > - mutex_lock(&hotkey_mutex); > - res = hotkey_mask_get(); > - mutex_unlock(&hotkey_mutex); > - if (res) > - return res; > + scoped_guard(mutex, &hotkey_mutex) { > + res = hotkey_mask_get(); > + if (res) > + return res; > + } > > hotkey_orig_mask = hotkey_acpi_mask; > } else { > @@ -3526,11 +3512,11 @@ static int __init hotkey_init(struct > ibm_init_struct *iibm) > hotkey_exit(); > return res; > } > - mutex_lock(&hotkey_mutex); > - res = hotkey_mask_set(((hotkey_all_mask & ~hotkey_reserved_mask) > - | hotkey_driver_mask) > - & ~hotkey_source_mask); > - mutex_unlock(&hotkey_mutex); > + scoped_guard(mutex, &hotkey_mutex) { > + res = hotkey_mask_set(((hotkey_all_mask & ~hotkey_reserved_mask) > + | hotkey_driver_mask) > + & ~hotkey_source_mask); > + } > if (res < 0 && res != -ENXIO) { > hotkey_exit(); > return res; > @@ -3977,11 +3963,11 @@ static void hotkey_resume(void) > { > tpacpi_disable_brightness_delay(); > > - mutex_lock(&hotkey_mutex); > - if (hotkey_status_set(true) < 0 || > - hotkey_mask_set(hotkey_acpi_mask) < 0) > - pr_err("error while attempting to reset the event firmware interface\n"); > - mutex_unlock(&hotkey_mutex); > + scoped_guard(mutex, &hotkey_mutex) { > + if (hotkey_status_set(true) < 0 || > + hotkey_mask_set(hotkey_acpi_mask) < 0) > + pr_err("error while attempting to reset the event firmware interface\n"); > + } > > tpacpi_send_radiosw_update(); > tpacpi_input_send_tabletsw(); > @@ -5034,21 +5020,16 @@ static DEFINE_MUTEX(kbdlight_mutex); > > static int kbdlight_set_level(int level) > { > - int ret = 0; > - > if (!hkey_handle) > return -ENXIO; > > - mutex_lock(&kbdlight_mutex); > + guard(mutex)(&kbdlight_mutex); > > if (!acpi_evalf(hkey_handle, NULL, "MLCS", "dd", level)) > - ret = -EIO; > - else > - kbdlight_brightness = level; > - > - mutex_unlock(&kbdlight_mutex); > + return -EIO; > > - return ret; > + kbdlight_brightness = level; > + return 0; > } > > static int kbdlight_get_level(void) > @@ -10103,9 +10084,8 @@ static void lcdshadow_resume(void) > if (!lcdshadow_dev) > return; > > - mutex_lock(&lcdshadow_dev->lock); > + guard(mutex)(&lcdshadow_dev->lock); > lcdshadow_set_sw_state(lcdshadow_dev, lcdshadow_dev->sw_state); > - mutex_unlock(&lcdshadow_dev->lock); > } > > static int lcdshadow_read(struct seq_file *m) > @@ -10137,9 +10117,8 @@ static int lcdshadow_write(char *buf) > if (state >= 2 || state < 0) > return -EINVAL; > > - mutex_lock(&lcdshadow_dev->lock); > - res = lcdshadow_set_sw_state(lcdshadow_dev, state); > - mutex_unlock(&lcdshadow_dev->lock); > + scoped_guard(mutex, &lcdshadow_dev->lock) > + res = lcdshadow_set_sw_state(lcdshadow_dev, state); > > drm_privacy_screen_call_notifier_chain(lcdshadow_dev); > > @@ -10603,26 +10582,26 @@ static const struct platform_profile_ops > dytc_profile_ops = { > static void dytc_profile_refresh(void) > { > enum platform_profile_option profile; > - int output = 0, err = 0; > + int output = 0, err; > int perfmode, funcmode = 0; > > - mutex_lock(&dytc_mutex); > - if (dytc_capabilities & BIT(DYTC_FC_MMC)) { > - if (dytc_mmc_get_available) > - err = dytc_command(DYTC_CMD_MMC_GET, &output); > - else > - err = dytc_cql_command(DYTC_CMD_GET, &output); > - funcmode = DYTC_FUNCTION_MMC; > - } else if (dytc_capabilities & BIT(DYTC_FC_PSC)) { > - err = dytc_command(DYTC_CMD_GET, &output); > - /* Check if we are PSC mode, or have AMT enabled */ > - funcmode = (output >> DYTC_GET_FUNCTION_BIT) & 0xF; > - } else { /* Unknown profile mode */ > - err = -ENODEV; > + scoped_guard(mutex, &dytc_mutex) { > + if (dytc_capabilities & BIT(DYTC_FC_MMC)) { > + if (dytc_mmc_get_available) > + err = dytc_command(DYTC_CMD_MMC_GET, &output); > + else > + err = dytc_cql_command(DYTC_CMD_GET, &output); > + funcmode = DYTC_FUNCTION_MMC; > + } else if (dytc_capabilities & BIT(DYTC_FC_PSC)) { > + err = dytc_command(DYTC_CMD_GET, &output); > + /* Check if we are PSC mode, or have AMT enabled */ > + funcmode = (output >> DYTC_GET_FUNCTION_BIT) & 0xF; > + } else { /* Unknown profile mode */ > + err = -ENODEV; > + } > + if (err) > + return; > } > - mutex_unlock(&dytc_mutex); > - if (err) > - return; > > perfmode = (output >> DYTC_GET_MODE_BIT) & 0xF; > err = convert_dytc_to_profile(funcmode, perfmode, &profile); > @@ -11425,7 +11404,7 @@ static bool tpacpi_driver_event(const unsigned > int hkey_event) > if (tp_features.kbdlight) { > enum led_brightness brightness; > > - mutex_lock(&kbdlight_mutex); > + guard(mutex)(&kbdlight_mutex); > > /* > * Check the brightness actually changed, setting the brightness > @@ -11437,8 +11416,6 @@ static bool tpacpi_driver_event(const unsigned > int hkey_event) > led_classdev_notify_brightness_hw_changed( > &tpacpi_led_kbdlight.led_classdev, brightness); > } > - > - mutex_unlock(&kbdlight_mutex); > } > /* Key events are suppressed by default hotkey_user_mask */ > return false; > @@ -11460,11 +11437,11 @@ static bool tpacpi_driver_event(const > unsigned int hkey_event) > enum drm_privacy_screen_status old_hw_state; > bool changed; > > - mutex_lock(&lcdshadow_dev->lock); > - old_hw_state = lcdshadow_dev->hw_state; > - lcdshadow_get_hw_state(lcdshadow_dev); > - changed = lcdshadow_dev->hw_state != old_hw_state; > - mutex_unlock(&lcdshadow_dev->lock); > + scoped_guard(mutex, &lcdshadow_dev->lock) { > + old_hw_state = lcdshadow_dev->hw_state; > + lcdshadow_get_hw_state(lcdshadow_dev); > + changed = lcdshadow_dev->hw_state != old_hw_state; > + } > > if (changed) > drm_privacy_screen_call_notifier_chain(lcdshadow_dev); > @@ -11485,12 +11462,10 @@ static bool tpacpi_driver_event(const > unsigned int hkey_event) > pr_err("Error retrieving camera shutter state after shutter > event\n"); > return true; > } > - mutex_lock(&tpacpi_inputdev_send_mutex); > - > - input_report_switch(tpacpi_inputdev, SW_CAMERA_LENS_COVER, > camera_shutter_state); > - input_sync(tpacpi_inputdev); > - > - mutex_unlock(&tpacpi_inputdev_send_mutex); > + scoped_guard(mutex, &tpacpi_inputdev_send_mutex) { > + input_report_switch(tpacpi_inputdev, SW_CAMERA_LENS_COVER, > camera_shutter_state); > + input_sync(tpacpi_inputdev); > + } > return true; > case TP_HKEY_EV_DOUBLETAP_TOGGLE: > /* Toggle kernel-level doubletap event filtering */ > -- > 2.55.0.679.g6767b8d81c-goog Sorry, took me a while to get to this one. Changes look good, nice cleanup. Reviewed-by: Mark Pearson <[email protected]> Mark