Skip to content

Commit f7d15dc

Browse files
committed
Input: serport - use guard notation when acquiring spinlock
Using guard notation makes the code more compact and error handling more robust by ensuring that locks are released in all code paths when control leaves critical section. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent d8ea63c commit f7d15dc

File tree

1 file changed

+8
-19
lines changed

1 file changed

+8
-19
lines changed

drivers/input/serio/serport.c

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,9 @@ static int serport_serio_write(struct serio *serio, unsigned char data)
5050
static int serport_serio_open(struct serio *serio)
5151
{
5252
struct serport *serport = serio->port_data;
53-
unsigned long flags;
5453

55-
spin_lock_irqsave(&serport->lock, flags);
54+
guard(spinlock_irqsave)(&serport->lock);
5655
set_bit(SERPORT_ACTIVE, &serport->flags);
57-
spin_unlock_irqrestore(&serport->lock, flags);
5856

5957
return 0;
6058
}
@@ -63,11 +61,9 @@ static int serport_serio_open(struct serio *serio)
6361
static void serport_serio_close(struct serio *serio)
6462
{
6563
struct serport *serport = serio->port_data;
66-
unsigned long flags;
6764

68-
spin_lock_irqsave(&serport->lock, flags);
65+
guard(spinlock_irqsave)(&serport->lock);
6966
clear_bit(SERPORT_ACTIVE, &serport->flags);
70-
spin_unlock_irqrestore(&serport->lock, flags);
7167
}
7268

7369
/*
@@ -118,14 +114,13 @@ static void serport_ldisc_receive(struct tty_struct *tty, const u8 *cp,
118114
const u8 *fp, size_t count)
119115
{
120116
struct serport *serport = tty->disc_data;
121-
unsigned long flags;
122117
unsigned int ch_flags = 0;
123118
int i;
124119

125-
spin_lock_irqsave(&serport->lock, flags);
120+
guard(spinlock_irqsave)(&serport->lock);
126121

127122
if (!test_bit(SERPORT_ACTIVE, &serport->flags))
128-
goto out;
123+
return;
129124

130125
for (i = 0; i < count; i++) {
131126
if (fp) {
@@ -146,9 +141,6 @@ static void serport_ldisc_receive(struct tty_struct *tty, const u8 *cp,
146141

147142
serio_interrupt(serport->serio, cp[i], ch_flags);
148143
}
149-
150-
out:
151-
spin_unlock_irqrestore(&serport->lock, flags);
152144
}
153145

154146
/*
@@ -246,24 +238,21 @@ static int serport_ldisc_compat_ioctl(struct tty_struct *tty,
246238
static void serport_ldisc_hangup(struct tty_struct *tty)
247239
{
248240
struct serport *serport = tty->disc_data;
249-
unsigned long flags;
250241

251-
spin_lock_irqsave(&serport->lock, flags);
252-
set_bit(SERPORT_DEAD, &serport->flags);
253-
spin_unlock_irqrestore(&serport->lock, flags);
242+
scoped_guard(spinlock_irqsave, &serport->lock)
243+
set_bit(SERPORT_DEAD, &serport->flags);
254244

255245
wake_up_interruptible(&serport->wait);
256246
}
257247

258248
static void serport_ldisc_write_wakeup(struct tty_struct * tty)
259249
{
260250
struct serport *serport = tty->disc_data;
261-
unsigned long flags;
262251

263-
spin_lock_irqsave(&serport->lock, flags);
252+
guard(spinlock_irqsave)(&serport->lock);
253+
264254
if (test_bit(SERPORT_ACTIVE, &serport->flags))
265255
serio_drv_write_wakeup(serport->serio);
266-
spin_unlock_irqrestore(&serport->lock, flags);
267256
}
268257

269258
/*

0 commit comments

Comments
 (0)