[PATCH v3 2/4] HID: wiimote: replace spinlock pairs with scoped_guard
From: Rafael Passos <hidden>
Date: 2026-07-29 16:53:19
Subsystem:
hid core layer, the rest, wiimote hid driver · Maintainers:
Jiri Kosina, Benjamin Tissoires, Linus Torvalds, David Rheinsberg
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 <redacted> --- 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