Re: [PATCH v3 2/4] HID: wiimote: replace spinlock pairs with scoped_guard
"David Rheinsberg" <[email protected]> Fri, 31 Jul 2026 11:08:28 +0200
| Newsgroups | org.kernel.vger.linux-input |
|---|---|
| Message-ID | <[email protected]> |
Hi On Wed, Jul 29, 2026, at 6:49 PM, Rafael Passos wrote: > Cleanup code replacing manual lock/unlock with scoped guards. > This does not change any behavior, but makes it safer to modify. > > The multi line spinlock blocks were replaced by braced scoped_guard, > and one-liners by a scoped_guard without braces nor indentation. > > There are two cases left in this driver using lock/unlock, because > guard would make the code more complex than current implementation. > > Signed-off-by: Rafael Passos <[email protected]> Reviewed-by: David Rheinsberg <[email protected]> This looks good! Thanks a lot! David > --- > drivers/hid/hid-wiimote-core.c | 224 +++++++++++++----------------- > drivers/hid/hid-wiimote-debug.c | 50 +++---- > drivers/hid/hid-wiimote-modules.c | 7 +- > 3 files changed, 121 insertions(+), 160 deletions(-) > > diff --git a/drivers/hid/hid-wiimote-core.c b/drivers/hid/hid-wiimote-core.c > index 48830f2ffcb50..762b3c383194e 100644 > --- a/drivers/hid/hid-wiimote-core.c > +++ b/drivers/hid/hid-wiimote-core.c > @@ -7,6 +7,7 @@ > /* > */ > > +#include <linux/cleanup.h> > #include <linux/completion.h> > #include <linux/device.h> > #include <linux/hid.h> > @@ -362,13 +363,12 @@ void wiiproto_req_rmem(struct wiimote_data > *wdata, bool eeprom, __u32 offset, > int wiimote_cmd_write(struct wiimote_data *wdata, __u32 offset, > const __u8 *wmem, __u8 size) > { > - unsigned long flags; > int ret; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wiimote_cmd_set(wdata, WIIPROTO_REQ_WMEM, 0); > - wiiproto_req_wreg(wdata, offset, wmem, size); > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) { > + wiimote_cmd_set(wdata, WIIPROTO_REQ_WMEM, 0); > + wiiproto_req_wreg(wdata, offset, wmem, size); > + } > > ret = wiimote_cmd_wait(wdata); > if (!ret && wdata->state.cmd_err) > @@ -381,21 +381,19 @@ int wiimote_cmd_write(struct wiimote_data *wdata, > __u32 offset, > ssize_t wiimote_cmd_read(struct wiimote_data *wdata, __u32 offset, > __u8 *rmem, > __u8 size) > { > - unsigned long flags; > ssize_t ret; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.cmd_read_size = size; > - wdata->state.cmd_read_buf = rmem; > - wiimote_cmd_set(wdata, WIIPROTO_REQ_RMEM, offset & 0xffff); > - wiiproto_req_rreg(wdata, offset, size); > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) { > + wdata->state.cmd_read_size = size; > + wdata->state.cmd_read_buf = rmem; > + wiimote_cmd_set(wdata, WIIPROTO_REQ_RMEM, offset & 0xffff); > + wiiproto_req_rreg(wdata, offset, size); > + } > > ret = wiimote_cmd_wait(wdata); > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.cmd_read_buf = NULL; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wdata->state.cmd_read_buf = NULL; > > if (!ret) { > if (wdata->state.cmd_read_size == 0) > @@ -675,11 +673,8 @@ static void wiimote_modules_load(struct > wiimote_data *wdata, > goto error; > } > > - spin_lock_irq(&wdata->state.lock); > - wdata->state.devtype = devtype; > - spin_unlock_irq(&wdata->state.lock); > - > scoped_guard(spinlock_irqsave, &wdata->state.lock) { > + wdata->state.devtype = devtype; > /* after loading modules, set the Player ID LED cycling from 1 to 4*/ > wiiproto_req_leds(wdata, player_leds[(wdata->player_id - 1) % 4]); > } > @@ -703,13 +698,11 @@ static void wiimote_modules_unload(struct > wiimote_data *wdata) > { > const __u8 *mods, *iter; > const struct wiimod_ops *ops; > - unsigned long flags; > > mods = wiimote_devtype_mods[wdata->state.devtype]; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.devtype = WIIMOTE_DEV_UNKNOWN; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wdata->state.devtype = WIIMOTE_DEV_UNKNOWN; > > /* find end of list */ > for (iter = mods; *iter != WIIMOD_NULL; ++iter) > @@ -736,7 +729,6 @@ static void wiimote_modules_unload(struct > wiimote_data *wdata) > > static void wiimote_ext_load(struct wiimote_data *wdata, unsigned int ext) > { > - unsigned long flags; > const struct wiimod_ops *ops; > int ret; > > @@ -748,22 +740,20 @@ static void wiimote_ext_load(struct wiimote_data > *wdata, unsigned int ext) > ext = WIIMOTE_EXT_UNKNOWN; > } > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.exttype = ext; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wdata->state.exttype = ext; > } > > static void wiimote_ext_unload(struct wiimote_data *wdata) > { > - unsigned long flags; > const struct wiimod_ops *ops; > > ops = wiimod_ext_table[wdata->state.exttype]; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.exttype = WIIMOTE_EXT_UNKNOWN; > - wdata->state.flags &= ~WIIPROTO_FLAG_EXT_USED; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) { > + wdata->state.exttype = WIIMOTE_EXT_UNKNOWN; > + wdata->state.flags &= ~WIIPROTO_FLAG_EXT_USED; > + } > > if (ops->remove) > ops->remove(ops, wdata); > @@ -771,7 +761,6 @@ static void wiimote_ext_unload(struct wiimote_data *wdata) > > static void wiimote_mp_load(struct wiimote_data *wdata) > { > - unsigned long flags; > const struct wiimod_ops *ops; > int ret; > __u8 mode = 2; > @@ -783,14 +772,12 @@ static void wiimote_mp_load(struct wiimote_data *wdata) > mode = 1; > } > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.mp = mode; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wdata->state.mp = mode; > } > > static void wiimote_mp_unload(struct wiimote_data *wdata) > { > - unsigned long flags; > const struct wiimod_ops *ops; > > if (wdata->state.mp < 2) > @@ -798,10 +785,10 @@ static void wiimote_mp_unload(struct wiimote_data *wdata) > > ops = &wiimod_mp; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.mp = 0; > - wdata->state.flags &= ~WIIPROTO_FLAG_MP_USED; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) { > + wdata->state.mp = 0; > + wdata->state.flags &= ~WIIPROTO_FLAG_MP_USED; > + } > > if (ops->remove) > ops->remove(ops, wdata); > @@ -885,19 +872,19 @@ static void wiimote_init_detect(struct > wiimote_data *wdata) > > wiimote_cmd_acquire_noint(wdata); > > - spin_lock_irq(&wdata->state.lock); > - wdata->state.devtype = WIIMOTE_DEV_UNKNOWN; > - wiimote_cmd_set(wdata, WIIPROTO_REQ_SREQ, 0); > - wiiproto_req_status(wdata); > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) { > + wdata->state.devtype = WIIMOTE_DEV_UNKNOWN; > + wiimote_cmd_set(wdata, WIIPROTO_REQ_SREQ, 0); > + wiiproto_req_status(wdata); > + } > + > > ret = wiimote_cmd_wait_noint(wdata); > if (ret) > goto out_release; > > - spin_lock_irq(&wdata->state.lock); > - ext = wdata->state.flags & WIIPROTO_FLAG_EXT_PLUGGED; > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) > + ext = wdata->state.flags & WIIPROTO_FLAG_EXT_PLUGGED; > > if (!ext) > goto out_release; > @@ -910,11 +897,11 @@ static void wiimote_init_detect(struct > wiimote_data *wdata) > wiimote_init_set_type(wdata, exttype); > > /* schedule MP timer */ > - spin_lock_irq(&wdata->state.lock); > - if (!(wdata->state.flags & WIIPROTO_FLAG_BUILTIN_MP) && > - !(wdata->state.flags & WIIPROTO_FLAG_NO_MP)) > - mod_timer(&wdata->timer, jiffies + HZ * 4); > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) { > + if (!(wdata->state.flags & WIIPROTO_FLAG_BUILTIN_MP) && > + !(wdata->state.flags & WIIPROTO_FLAG_NO_MP)) > + mod_timer(&wdata->timer, jiffies + HZ * 4); > + } > } > > /* > @@ -962,9 +949,8 @@ static bool wiimote_init_check(struct wiimote_data *wdata) > __u8 type, data[6]; > bool ret, poll_mp; > > - spin_lock_irq(&wdata->state.lock); > - flags = wdata->state.flags; > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) > + flags = wdata->state.flags; > > wiimote_cmd_acquire_noint(wdata); > > @@ -980,11 +966,11 @@ static bool wiimote_init_check(struct wiimote_data *wdata) > type = wiimote_cmd_read_mp_mapped(wdata); > ret = type == WIIMOTE_MP_SINGLE; > > - spin_lock_irq(&wdata->state.lock); > - ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_EXT_ACTIVE); > - ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_MP_PLUGGED); > - ret = ret && (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE); > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) { > + ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_EXT_ACTIVE); > + ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_MP_PLUGGED); > + ret = ret && (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE); > + } > > if (!ret) > hid_dbg(wdata->hdev, "state left: !EXT && MP\n"); > @@ -1005,10 +991,10 @@ static bool wiimote_init_check(struct > wiimote_data *wdata) > type = wiimote_cmd_read_ext(wdata, data); > ret = type == wdata->state.exttype; > > - spin_lock_irq(&wdata->state.lock); > - ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE); > - ret = ret && (wdata->state.flags & WIIPROTO_FLAG_EXT_ACTIVE); > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) { > + ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE); > + ret = ret && (wdata->state.flags & WIIPROTO_FLAG_EXT_ACTIVE); > + } > > if (!ret) > hid_dbg(wdata->hdev, "state left: EXT && !MP\n"); > @@ -1031,11 +1017,11 @@ static bool wiimote_init_check(struct > wiimote_data *wdata) > type = wiimote_cmd_read_ext(wdata, data); > ret = type == wdata->state.exttype; > > - spin_lock_irq(&wdata->state.lock); > - ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_EXT_ACTIVE); > - ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE); > - ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_EXT_PLUGGED); > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) { > + ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_EXT_ACTIVE); > + ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE); > + ret = ret && !(wdata->state.flags & WIIPROTO_FLAG_EXT_PLUGGED); > + } > > if (!ret) > hid_dbg(wdata->hdev, "state left: !EXT && !MP\n"); > @@ -1061,11 +1047,11 @@ static bool wiimote_init_check(struct > wiimote_data *wdata) > ret = ret && type != WIIMOTE_MP_UNKNOWN; > ret = ret && type != WIIMOTE_MP_SINGLE; > > - spin_lock_irq(&wdata->state.lock); > - ret = ret && (wdata->state.flags & WIIPROTO_FLAG_EXT_PLUGGED); > - ret = ret && (wdata->state.flags & WIIPROTO_FLAG_EXT_ACTIVE); > - ret = ret && (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE); > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) { > + ret = ret && (wdata->state.flags & WIIPROTO_FLAG_EXT_PLUGGED); > + ret = ret && (wdata->state.flags & WIIPROTO_FLAG_EXT_ACTIVE); > + ret = ret && (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE); > + } > > if (!ret) > hid_dbg(wdata->hdev, "state left: EXT && MP\n"); > @@ -1120,16 +1106,15 @@ static void wiimote_init_hotplug(struct > wiimote_data *wdata) > > wiimote_cmd_acquire_noint(wdata); > > - spin_lock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) { > > - /* get state snapshot that we will then work on */ > - flags = wdata->state.flags; > + /* get state snapshot that we will then work on */ > + flags = wdata->state.flags; > > - /* disable event forwarding temporarily */ > - wdata->state.flags &= ~WIIPROTO_FLAG_EXT_ACTIVE; > - wdata->state.flags &= ~WIIPROTO_FLAG_MP_ACTIVE; > - > - spin_unlock_irq(&wdata->state.lock); > + /* disable event forwarding temporarily */ > + wdata->state.flags &= ~WIIPROTO_FLAG_EXT_ACTIVE; > + wdata->state.flags &= ~WIIPROTO_FLAG_MP_ACTIVE; > + } > > /* init extension and MP (deactivates current extension or MP) */ > wiimote_cmd_init_ext(wdata); > @@ -1152,9 +1137,8 @@ static void wiimote_init_hotplug(struct > wiimote_data *wdata) > hid_info(wdata->hdev, "cannot detect extension; %6phC\n", > extdata); > } else if (exttype == WIIMOTE_EXT_NONE) { > - spin_lock_irq(&wdata->state.lock); > - wdata->state.exttype = WIIMOTE_EXT_NONE; > - spin_unlock_irq(&wdata->state.lock); > + scoped_guard(spinlock_irq, &wdata->state.lock) > + wdata->state.exttype = WIIMOTE_EXT_NONE; > } else { > hid_info(wdata->hdev, "detected extension: %s\n", > wiimote_exttype_names[exttype]); > @@ -1192,28 +1176,26 @@ static void wiimote_init_hotplug(struct > wiimote_data *wdata) > mod_timer(&wdata->timer, jiffies + HZ * 4); > } > > - spin_lock_irq(&wdata->state.lock); > - > - /* enable data forwarding again and set expected hotplug state */ > - if (mp) { > - wdata->state.flags |= WIIPROTO_FLAG_MP_ACTIVE; > - if (wdata->state.exttype == WIIMOTE_EXT_NONE) { > - wdata->state.flags &= ~WIIPROTO_FLAG_EXT_PLUGGED; > - wdata->state.flags &= ~WIIPROTO_FLAG_MP_PLUGGED; > - } else { > - wdata->state.flags &= ~WIIPROTO_FLAG_EXT_PLUGGED; > - wdata->state.flags |= WIIPROTO_FLAG_MP_PLUGGED; > + scoped_guard(spinlock_irq, &wdata->state.lock) { > + /* enable data forwarding again and set expected hotplug state */ > + if (mp) { > + wdata->state.flags |= WIIPROTO_FLAG_MP_ACTIVE; > + if (wdata->state.exttype == WIIMOTE_EXT_NONE) { > + wdata->state.flags &= ~WIIPROTO_FLAG_EXT_PLUGGED; > + wdata->state.flags &= ~WIIPROTO_FLAG_MP_PLUGGED; > + } else { > + wdata->state.flags &= ~WIIPROTO_FLAG_EXT_PLUGGED; > + wdata->state.flags |= WIIPROTO_FLAG_MP_PLUGGED; > + wdata->state.flags |= WIIPROTO_FLAG_EXT_ACTIVE; > + } > + } else if (wdata->state.exttype != WIIMOTE_EXT_NONE) { > wdata->state.flags |= WIIPROTO_FLAG_EXT_ACTIVE; > } > - } else if (wdata->state.exttype != WIIMOTE_EXT_NONE) { > - wdata->state.flags |= WIIPROTO_FLAG_EXT_ACTIVE; > + > + /* request status report for hotplug state updates */ > + wiiproto_req_status(wdata); > } > > - /* request status report for hotplug state updates */ > - wiiproto_req_status(wdata); > - > - spin_unlock_irq(&wdata->state.lock); > - > hid_dbg(wdata->hdev, "detected extensions: MP: %d EXT: %d\n", > wdata->state.mp, wdata->state.exttype); > } > @@ -1244,11 +1226,8 @@ void __wiimote_schedule(struct wiimote_data *wdata) > > static void wiimote_schedule(struct wiimote_data *wdata) > { > - unsigned long flags; > - > - spin_lock_irqsave(&wdata->state.lock, flags); > - __wiimote_schedule(wdata); > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + __wiimote_schedule(wdata); > } > > static void wiimote_init_timeout(struct timer_list *t) > @@ -1638,7 +1617,6 @@ static int wiimote_hid_event(struct hid_device > *hdev, struct hid_report *report, > struct wiimote_data *wdata = hid_get_drvdata(hdev); > const struct wiiproto_handler *h; > int i; > - unsigned long flags; > > if (size < 1) > return -EINVAL; > @@ -1646,9 +1624,8 @@ static int wiimote_hid_event(struct hid_device > *hdev, struct hid_report *report, > for (i = 0; handlers[i].id; ++i) { > h = &handlers[i]; > if (h->id == raw_data[0] && h->size < size) { > - spin_lock_irqsave(&wdata->state.lock, flags); > - h->func(wdata, &raw_data[1]); > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + h->func(wdata, &raw_data[1]); > break; > } > } > @@ -1666,11 +1643,9 @@ static ssize_t wiimote_ext_show(struct device > *dev, > { > struct wiimote_data *wdata = dev_to_wii(dev); > __u8 type; > - unsigned long flags; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - type = wdata->state.exttype; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + type = wdata->state.exttype; > > switch (type) { > case WIIMOTE_EXT_NONE: > @@ -1719,11 +1694,9 @@ static ssize_t wiimote_dev_show(struct device *dev, > { > struct wiimote_data *wdata = dev_to_wii(dev); > __u8 type; > - unsigned long flags; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - type = wdata->state.devtype; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + type = wdata->state.devtype; > > switch (type) { > case WIIMOTE_DEV_GENERIC: > @@ -1774,14 +1747,11 @@ static struct wiimote_data > *wiimote_create(struct hid_device *hdev) > > static void wiimote_destroy(struct wiimote_data *wdata) > { > - unsigned long flags; > - > wiidebug_deinit(wdata); > > /* prevent init_worker from being scheduled again */ > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.flags |= WIIPROTO_FLAG_EXITING; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wdata->state.flags |= WIIPROTO_FLAG_EXITING; > > cancel_work_sync(&wdata->init_worker); > timer_shutdown_sync(&wdata->timer); > diff --git a/drivers/hid/hid-wiimote-debug.c b/drivers/hid/hid-wiimote-debug.c > index 5f74917781f28..df6f830ee791c 100644 > --- a/drivers/hid/hid-wiimote-debug.c > +++ b/drivers/hid/hid-wiimote-debug.c > @@ -7,6 +7,7 @@ > /* > */ > > +#include <linux/cleanup.h> > #include <linux/debugfs.h> > #include <linux/module.h> > #include <linux/seq_file.h> > @@ -25,7 +26,6 @@ static ssize_t wiidebug_eeprom_read(struct file *f, > char __user *u, size_t s, > { > struct wiimote_debug *dbg = f->private_data; > struct wiimote_data *wdata = dbg->wdata; > - unsigned long flags; > ssize_t ret; > char buf[16]; > __u16 size = 0; > @@ -41,20 +41,19 @@ static ssize_t wiidebug_eeprom_read(struct file *f, > char __user *u, size_t s, > if (ret) > return ret; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.cmd_read_size = s; > - wdata->state.cmd_read_buf = buf; > - wiimote_cmd_set(wdata, WIIPROTO_REQ_RMEM, *off & 0xffff); > - wiiproto_req_reeprom(wdata, *off, s); > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) { > + wdata->state.cmd_read_size = s; > + wdata->state.cmd_read_buf = buf; > + wiimote_cmd_set(wdata, WIIPROTO_REQ_RMEM, *off & 0xffff); > + wiiproto_req_reeprom(wdata, *off, s); > + } > > ret = wiimote_cmd_wait(wdata); > if (!ret) > size = wdata->state.cmd_read_size; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->state.cmd_read_buf = NULL; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wdata->state.cmd_read_buf = NULL; > > wiimote_cmd_release(wdata); > > @@ -99,12 +98,10 @@ static int wiidebug_drm_show(struct seq_file *f, void *p) > { > struct wiimote_debug *dbg = f->private; > const char *str = NULL; > - unsigned long flags; > __u8 drm; > > - spin_lock_irqsave(&dbg->wdata->state.lock, flags); > - drm = dbg->wdata->state.drm; > - spin_unlock_irqrestore(&dbg->wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &dbg->wdata->state.lock) > + drm = dbg->wdata->state.drm; > > if (drm < WIIPROTO_REQ_MAX) > str = wiidebug_drmmap[drm]; > @@ -126,7 +123,6 @@ static ssize_t wiidebug_drm_write(struct file *f, > const char __user *u, > { > struct seq_file *sf = f->private_data; > struct wiimote_debug *dbg = sf->private; > - unsigned long flags; > char buf[16]; > ssize_t len; > int i; > @@ -150,12 +146,12 @@ static ssize_t wiidebug_drm_write(struct file *f, > const char __user *u, > if (i == WIIPROTO_REQ_MAX) > i = simple_strtoul(buf, NULL, 16); > > - spin_lock_irqsave(&dbg->wdata->state.lock, flags); > - dbg->wdata->state.flags &= ~WIIPROTO_FLAG_DRM_LOCKED; > - wiiproto_req_drm(dbg->wdata, (__u8) i); > - if (i != WIIPROTO_REQ_NULL) > - dbg->wdata->state.flags |= WIIPROTO_FLAG_DRM_LOCKED; > - spin_unlock_irqrestore(&dbg->wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &dbg->wdata->state.lock) { > + dbg->wdata->state.flags &= ~WIIPROTO_FLAG_DRM_LOCKED; > + wiiproto_req_drm(dbg->wdata, (__u8) i); > + if (i != WIIPROTO_REQ_NULL) > + dbg->wdata->state.flags |= WIIPROTO_FLAG_DRM_LOCKED; > + } > > return len; > } > @@ -172,7 +168,6 @@ static const struct file_operations wiidebug_drm_fops = { > int wiidebug_init(struct wiimote_data *wdata) > { > struct wiimote_debug *dbg; > - unsigned long flags; > > dbg = kzalloc_obj(*dbg); > if (!dbg) > @@ -186,9 +181,8 @@ int wiidebug_init(struct wiimote_data *wdata) > dbg->drm = debugfs_create_file("drm", S_IRUSR, > dbg->wdata->hdev->debug_dir, dbg, &wiidebug_drm_fops); > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->debug = dbg; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wdata->debug = dbg; > > return 0; > > @@ -197,14 +191,12 @@ int wiidebug_init(struct wiimote_data *wdata) > void wiidebug_deinit(struct wiimote_data *wdata) > { > struct wiimote_debug *dbg = wdata->debug; > - unsigned long flags; > > if (!dbg) > return; > > - spin_lock_irqsave(&wdata->state.lock, flags); > - wdata->debug = NULL; > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wdata->debug = NULL; > > debugfs_remove(dbg->drm); > debugfs_remove(dbg->eeprom); > diff --git a/drivers/hid/hid-wiimote-modules.c > b/drivers/hid/hid-wiimote-modules.c > index dccb78bb3afd6..3cd6144667404 100644 > --- a/drivers/hid/hid-wiimote-modules.c > +++ b/drivers/hid/hid-wiimote-modules.c > @@ -30,6 +30,7 @@ > * input devices. > */ > > +#include <linux/cleanup.h> > #include <linux/device.h> > #include <linux/hid.h> > #include <linux/input.h> > @@ -341,7 +342,6 @@ static int wiimod_led_probe(const struct wiimod_ops *ops, > struct device *dev = &wdata->hdev->dev; > size_t namesz = strlen(dev_name(dev)) + 9; > struct led_classdev *led; > - unsigned long flags; > char *name; > int ret; > > @@ -364,9 +364,8 @@ static int wiimod_led_probe(const struct wiimod_ops *ops, > > /* enable LED1 to stop initial LED-blinking */ > if (ops->arg == 0) { > - spin_lock_irqsave(&wdata->state.lock, flags); > - wiiproto_req_leds(wdata, WIIPROTO_FLAG_LED1); > - spin_unlock_irqrestore(&wdata->state.lock, flags); > + scoped_guard(spinlock_irqsave, &wdata->state.lock) > + wiiproto_req_leds(wdata, WIIPROTO_FLAG_LED1); > } > > return 0; > -- > 2.53.0