Re: [PATCH 2/3] platform/x86: thinkpad_acpi: convert conditional mutex locks to ACQUIRE_ERR()
"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 conditional mutex_lock_killable() and mutex_lock_interruptible() > calls to ACQUIRE() and ACQUIRE_ERR() from linux/cleanup.h. > > This eliminates explicit mutex_unlock() calls on return paths and > simplifies error handling across hotkey, brightness, volume, fan, and > dytc functions. > > Assisted-by: Antigravity:gemini-3.6-flash > Signed-off-by: Dmitry Torokhov <[email protected]> > --- > drivers/platform/x86/lenovo/thinkpad_acpi.c | 153 ++++++++++---------- > 1 file changed, 76 insertions(+), 77 deletions(-) > > diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c > b/drivers/platform/x86/lenovo/thinkpad_acpi.c > index beb85ea1103b..0d0d6fe7eecd 100644 > --- a/drivers/platform/x86/lenovo/thinkpad_acpi.c > +++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c > @@ -2671,8 +2671,10 @@ static ssize_t hotkey_mask_store(struct device > *dev, > if (parse_strtoul(buf, 0xffffffffUL, &t)) > return -EINVAL; > > - if (mutex_lock_killable(&hotkey_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&hotkey_mutex); > + res = ACQUIRE_ERR(mutex_kill, &guard); > + if (res) > + return res; > > res = hotkey_user_mask_set(t); > > @@ -2680,8 +2682,6 @@ static ssize_t hotkey_mask_store(struct device *dev, > hotkey_poll_setup(true); > #endif > > - mutex_unlock(&hotkey_mutex); > - > tpacpi_disclose_usertask("hotkey_mask", "set to 0x%08lx\n", t); > > return (res) ? res : count; > @@ -2767,8 +2767,10 @@ static ssize_t hotkey_source_mask_store(struct > device *dev, > ((t & ~TPACPI_HKEY_NVRAM_KNOWN_MASK) != 0)) > return -EINVAL; > > - if (mutex_lock_killable(&hotkey_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&hotkey_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > > HOTKEY_CONFIG_CRITICAL_START > hotkey_source_mask = t; > @@ -2782,8 +2784,6 @@ static ssize_t hotkey_source_mask_store(struct > device *dev, > r_ev = hotkey_driver_mask & ~(hotkey_acpi_mask & hotkey_all_mask) > & ~hotkey_source_mask & TPACPI_HKEY_NVRAM_KNOWN_MASK; > > - mutex_unlock(&hotkey_mutex); > - > if (rc < 0) > pr_err("hotkey_source_mask: failed to update the firmware event mask!\n"); > > @@ -2811,18 +2811,19 @@ static ssize_t hotkey_poll_freq_store(struct > device *dev, > const char *buf, size_t count) > { > unsigned long t; > + int err; > > if (parse_strtoul(buf, 25, &t)) > return -EINVAL; > > - if (mutex_lock_killable(&hotkey_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&hotkey_mutex); > + err = ACQUIRE_ERR(mutex_kill, &guard); > + if (err) > + return err; > > hotkey_poll_set_freq(t); > hotkey_poll_setup(true); > > - mutex_unlock(&hotkey_mutex); > - > tpacpi_disclose_usertask("hotkey_poll_freq", "set to %lu\n", t); > > return count; > @@ -3995,12 +3996,13 @@ static int hotkey_read(struct seq_file *m) > return 0; > } > > - if (mutex_lock_killable(&hotkey_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&hotkey_mutex); > + res = ACQUIRE_ERR(mutex_kill, &guard); > + if (res) > + return res; > res = hotkey_status_get(&status); > if (!res) > res = hotkey_mask_get(); > - mutex_unlock(&hotkey_mutex); > if (res) > return res; > > @@ -4033,8 +4035,10 @@ static int hotkey_write(char *buf) > if (!tp_features.hotkey) > return -ENODEV; > > - if (mutex_lock_killable(&hotkey_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&hotkey_mutex); > + res = ACQUIRE_ERR(mutex_kill, &guard); > + if (res) > + return res; > > mask = hotkey_user_mask; > > @@ -4053,8 +4057,7 @@ static int hotkey_write(char *buf) > } else if (sscanf(cmd, "%x", &mask) == 1) { > /* mask set */ > } else { > - res = -EINVAL; > - goto errexit; > + return -EINVAL; > } > } > > @@ -4064,8 +4067,6 @@ static int hotkey_write(char *buf) > res = hotkey_user_mask_set(mask); > } > > -errexit: > - mutex_unlock(&hotkey_mutex); > return res; > } > > @@ -6460,11 +6461,12 @@ static void tpacpi_brightness_checkpoint_nvram(void) > vdbg_printk(TPACPI_DBG_BRGHT, > "trying to checkpoint backlight level to NVRAM...\n"); > > - if (mutex_lock_killable(&brightness_mutex) < 0) > + ACQUIRE(mutex_kill, guard)(&brightness_mutex); > + if (ACQUIRE_ERR(mutex_kill, &guard)) > return; > > if (unlikely(!acpi_ec_read(TP_EC_BACKLIGHT, &lec))) > - goto unlock; > + return; > lec &= TP_EC_BACKLIGHT_LVLMSK; > b_nvram = nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS); > > @@ -6482,9 +6484,6 @@ static void tpacpi_brightness_checkpoint_nvram(void) > vdbg_printk(TPACPI_DBG_BRGHT, > "NVRAM backlight level already is %u (0x%02x)\n", > (unsigned int) lec, (unsigned int) b_nvram); > - > -unlock: > - mutex_unlock(&brightness_mutex); > } > > > @@ -6562,8 +6561,9 @@ static int brightness_set(unsigned int value) > vdbg_printk(TPACPI_DBG_BRGHT, > "set backlight level to %d\n", value); > > - res = mutex_lock_killable(&brightness_mutex); > - if (res < 0) > + ACQUIRE(mutex_kill, guard)(&brightness_mutex); > + res = ACQUIRE_ERR(mutex_kill, &guard); > + if (res) > return res; > > switch (brightness_mode) { > @@ -6578,7 +6578,6 @@ static int brightness_set(unsigned int value) > res = -ENXIO; > } > > - mutex_unlock(&brightness_mutex); > return res; > } > > @@ -6601,16 +6600,14 @@ static int brightness_get(struct backlight_device *bd) > { > int status, res; > > - res = mutex_lock_killable(&brightness_mutex); > - if (res < 0) > - return 0; > + ACQUIRE(mutex_kill, guard)(&brightness_mutex); > + res = ACQUIRE_ERR(mutex_kill, &guard); > + if (res) > + return res; > > res = tpacpi_brightness_get_raw(&status); > - > - mutex_unlock(&brightness_mutex); > - > if (res < 0) > - return 0; > + return res; > > return status & TP_EC_BACKLIGHT_LVLMSK; > } > @@ -7073,11 +7070,12 @@ static void tpacpi_volume_checkpoint_nvram(void) > else > ec_mask = TP_EC_AUDIO_MUTESW_MSK | TP_EC_AUDIO_LVL_MSK; > > - if (mutex_lock_killable(&volume_mutex) < 0) > + ACQUIRE(mutex_kill, guard)(&volume_mutex); > + if (ACQUIRE_ERR(mutex_kill, &guard)) > return; > > if (unlikely(!acpi_ec_read(TP_EC_AUDIO, &lec))) > - goto unlock; > + return; > lec &= ec_mask; > b_nvram = nvram_read_byte(TP_NVRAM_ADDR_MIXER); > > @@ -7094,9 +7092,6 @@ static void tpacpi_volume_checkpoint_nvram(void) > "NVRAM mixer status already is 0x%02x (0x%02x)\n", > (unsigned int) lec, (unsigned int) b_nvram); > } > - > -unlock: > - mutex_unlock(&volume_mutex); > } > > static int volume_get_status_ec(u8 *status) > @@ -7145,12 +7140,14 @@ static int __volume_set_mute_ec(const bool mute) > int rc; > u8 s, n; > > - if (mutex_lock_killable(&volume_mutex) < 0) > - return -EINTR; > + ACQUIRE(mutex_kill, guard)(&volume_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > > rc = volume_get_status_ec(&s); > if (rc) > - goto unlock; > + return rc; > > n = (mute) ? s | TP_EC_AUDIO_MUTESW_MSK : > s & ~TP_EC_AUDIO_MUTESW_MSK; > @@ -7161,8 +7158,6 @@ static int __volume_set_mute_ec(const bool mute) > rc = 1; > } > > -unlock: > - mutex_unlock(&volume_mutex); > return rc; > } > > @@ -7193,12 +7188,14 @@ static int __volume_set_volume_ec(const u8 vol) > if (vol > TP_EC_VOLUME_MAX) > return -EINVAL; > > - if (mutex_lock_killable(&volume_mutex) < 0) > - return -EINTR; > + ACQUIRE(mutex_kill, guard)(&volume_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > > rc = volume_get_status_ec(&s); > if (rc) > - goto unlock; > + return rc; > > n = (s & ~TP_EC_AUDIO_LVL_MSK) | vol; > > @@ -7208,8 +7205,6 @@ static int __volume_set_volume_ec(const u8 vol) > rc = 1; > } > > -unlock: > - mutex_unlock(&volume_mutex); > return rc; > } > > @@ -8113,13 +8108,14 @@ static int fan_get_status_safe(u8 *status) > int rc; > u8 s; > > - if (mutex_lock_killable(&fan_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&fan_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > rc = fan_get_status(&s); > /* NS EC doesn't have register with level settings */ > if (!rc && !fan_with_ns_addr) > fan_update_desired_level(s); > - mutex_unlock(&fan_mutex); > > if (rc) > return rc; > @@ -8312,8 +8308,10 @@ static int fan_set_level_safe(int level) > if (!fan_control_allowed) > return -EPERM; > > - if (mutex_lock_killable(&fan_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&fan_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > > if (level == TPACPI_FAN_LAST_LEVEL) > level = fan_control_desired_level; > @@ -8322,7 +8320,6 @@ static int fan_set_level_safe(int level) > if (!rc) > fan_update_desired_level(level); > > - mutex_unlock(&fan_mutex); > return rc; > } > > @@ -8334,8 +8331,10 @@ static int fan_set_enable(void) > if (!fan_control_allowed) > return -EPERM; > > - if (mutex_lock_killable(&fan_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&fan_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > > switch (fan_control_access_mode) { > case TPACPI_FAN_WR_ACPI_FANS: > @@ -8391,8 +8390,6 @@ static int fan_set_enable(void) > rc = -ENXIO; > } > > - mutex_unlock(&fan_mutex); > - > if (!rc) > vdbg_printk(TPACPI_DBG_FAN, > "fan control: set fan control register to 0x%02x\n", > @@ -8407,8 +8404,10 @@ static int fan_set_disable(void) > if (!fan_control_allowed) > return -EPERM; > > - if (mutex_lock_killable(&fan_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&fan_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > > rc = 0; > switch (fan_control_access_mode) { > @@ -8453,7 +8452,6 @@ static int fan_set_disable(void) > vdbg_printk(TPACPI_DBG_FAN, > "fan control: set fan control register to 0\n"); > > - mutex_unlock(&fan_mutex); > return rc; > } > > @@ -8464,8 +8462,10 @@ static int fan_set_speed(int speed) > if (!fan_control_allowed) > return -EPERM; > > - if (mutex_lock_killable(&fan_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&fan_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > > rc = 0; > switch (fan_control_access_mode) { > @@ -8499,7 +8499,6 @@ static int fan_set_speed(int speed) > rc = -ENXIO; > } > > - mutex_unlock(&fan_mutex); > return rc; > } > > @@ -8659,8 +8658,10 @@ static ssize_t fan_pwm1_store(struct device *dev, > /* scale down from 0-255 to 0-7 */ > newlevel = (s >> 5) & 0x07; > > - if (mutex_lock_killable(&fan_mutex)) > - return -ERESTARTSYS; > + ACQUIRE(mutex_kill, guard)(&fan_mutex); > + rc = ACQUIRE_ERR(mutex_kill, &guard); > + if (rc) > + return rc; > > rc = fan_get_status(&status); > if (!rc && (status & > @@ -8674,7 +8675,6 @@ static ssize_t fan_pwm1_store(struct device *dev, > } > } > > - mutex_unlock(&fan_mutex); > return (rc) ? rc : count; > } > > @@ -10522,13 +10522,14 @@ static int dytc_profile_set(struct device *dev, > int output; > int err; > > - err = mutex_lock_interruptible(&dytc_mutex); > + ACQUIRE(mutex_intr, guard)(&dytc_mutex); > + err = ACQUIRE_ERR(mutex_intr, &guard); > if (err) > return err; > > err = convert_profile_to_dytc(profile, &perfmode); > if (err) > - goto unlock; > + return err; > > if (dytc_capabilities & BIT(DYTC_FC_MMC)) { > if (profile == PLATFORM_PROFILE_BALANCED) { > @@ -10540,18 +10541,18 @@ static int dytc_profile_set(struct device > *dev, > */ > err = dytc_cql_command(DYTC_CMD_RESET, &output); > if (err) > - goto unlock; > + return err; > } else { > /* Determine if we are in CQL mode. This alters the commands we do > */ > err = dytc_cql_command(DYTC_SET_COMMAND(DYTC_FUNCTION_MMC, > perfmode, 1), > &output); > if (err) > - goto unlock; > + return err; > } > } else if (dytc_capabilities & BIT(DYTC_FC_PSC)) { > err = dytc_command(DYTC_SET_COMMAND(DYTC_FUNCTION_PSC, perfmode, 1), > &output); > if (err) > - goto unlock; > + return err; > > /* system supports AMT, activate it when on balanced */ > if (dytc_capabilities & BIT(DYTC_FC_AMT)) > @@ -10559,8 +10560,6 @@ static int dytc_profile_set(struct device *dev, > } > /* Success - update current profile */ > dytc_current_profile = profile; > -unlock: > - mutex_unlock(&dytc_mutex); > return err; > } > > -- > 2.55.0.679.g6767b8d81c-goog I've not come across ACQUIRE & ACQUIRE_KILL before - so this was all new to me. I went and did some reading and all the above looks good to me, and looks like a valid clean-up. But my reviewed-by tag does come with reduced value.... Reviewed-by: Mark Pearson <[email protected]> Thanks for the learning experience. I will aim to go and try this out (and the other patches in the series) on some HW in the near future. Mark