HID: wiimote: replace spinlock pairs with scoped_guard

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 <rafael@rcpassos.me>
Reviewed-by: David Rheinsberg <david@readahead.eu>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
Rafael Passos 2026-10-08 23:28:00 -03:00 committed by Jiri Kosina
parent 890f45ed65
commit 4a487cd0ed
3 changed files with 130 additions and 165 deletions

View File

@ -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,12 @@ static void wiimote_modules_load(struct wiimote_data *wdata,
goto error;
}
spin_lock_irq(&wdata->state.lock);
wdata->state.devtype = devtype;
/* after loading modules, set the Player ID LED cycling the available LEDs*/
wiiproto_req_leds(wdata, player_leds[(wdata->player_id - 1U) % ARRAY_SIZE(player_leds)]);
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 the available LEDs*/
wiiproto_req_leds(wdata,
player_leds[(wdata->player_id - 1U) % ARRAY_SIZE(player_leds)]);
}
return;
@ -700,13 +699,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)
@ -733,7 +730,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;
@ -745,22 +741,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);
@ -768,7 +762,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;
@ -780,14 +773,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)
@ -795,10 +786,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);
@ -882,19 +873,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;
@ -907,11 +898,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);
}
}
/*
@ -959,9 +950,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);
@ -977,11 +967,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");
@ -1002,10 +992,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");
@ -1028,11 +1018,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");
@ -1058,11 +1048,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");
@ -1117,16 +1107,14 @@ 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);
@ -1149,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]);
@ -1189,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);
}
@ -1241,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)
@ -1635,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;
@ -1643,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;
}
}
@ -1663,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:
@ -1716,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:
@ -1775,17 +1751,14 @@ static DEFINE_IDA(wiimote_ida);
static void wiimote_destroy(struct wiimote_data *wdata)
{
unsigned long flags;
wiidebug_deinit(wdata);
if (wdata->player_id > 0)
ida_free(&wiimote_ida, wdata->player_id);
/* 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);

View File

@ -7,12 +7,13 @@
/*
*/
#include <linux/debugfs.h>
#include <linux/module.h>
#include <linux/seq_file.h>
#include <linux/spinlock.h>
#include <linux/uaccess.h>
#include "hid-wiimote.h"
#include <linux/cleanup.h>
#include <linux/debugfs.h>
#include <linux/module.h>
#include <linux/seq_file.h>
#include <linux/spinlock.h>
#include <linux/uaccess.h>
#include "hid-wiimote.h"
struct wiimote_debug {
struct wiimote_data *wdata;
@ -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)
@ -189,9 +184,8 @@ int wiidebug_init(struct wiimote_data *wdata)
debugfs_create_u8("player_id", S_IRUSR,
dbg->wdata->hdev->debug_dir, &wdata->player_id);
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;
}
@ -199,14 +193,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);

View File

@ -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;