Skip to content

Commit 9d58ae1

Browse files
committed
Input: ps2mult - 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 31b6b9a commit 9d58ae1

File tree

1 file changed

+7
-18
lines changed

1 file changed

+7
-18
lines changed

drivers/input/serio/ps2mult.c

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,8 @@ static int ps2mult_serio_write(struct serio *serio, unsigned char data)
7676
struct ps2mult *psm = serio_get_drvdata(mx_port);
7777
struct ps2mult_port *port = serio->port_data;
7878
bool need_escape;
79-
unsigned long flags;
8079

81-
spin_lock_irqsave(&psm->lock, flags);
80+
guard(spinlock_irqsave)(&psm->lock);
8281

8382
if (psm->out_port != port)
8483
ps2mult_select_port(psm, port);
@@ -93,20 +92,17 @@ static int ps2mult_serio_write(struct serio *serio, unsigned char data)
9392

9493
serio_write(mx_port, data);
9594

96-
spin_unlock_irqrestore(&psm->lock, flags);
97-
9895
return 0;
9996
}
10097

10198
static int ps2mult_serio_start(struct serio *serio)
10299
{
103100
struct ps2mult *psm = serio_get_drvdata(serio->parent);
104101
struct ps2mult_port *port = serio->port_data;
105-
unsigned long flags;
106102

107-
spin_lock_irqsave(&psm->lock, flags);
103+
guard(spinlock_irqsave)(&psm->lock);
104+
108105
port->registered = true;
109-
spin_unlock_irqrestore(&psm->lock, flags);
110106

111107
return 0;
112108
}
@@ -115,11 +111,10 @@ static void ps2mult_serio_stop(struct serio *serio)
115111
{
116112
struct ps2mult *psm = serio_get_drvdata(serio->parent);
117113
struct ps2mult_port *port = serio->port_data;
118-
unsigned long flags;
119114

120-
spin_lock_irqsave(&psm->lock, flags);
115+
guard(spinlock_irqsave)(&psm->lock);
116+
121117
port->registered = false;
122-
spin_unlock_irqrestore(&psm->lock, flags);
123118
}
124119

125120
static int ps2mult_create_port(struct ps2mult *psm, int i)
@@ -148,16 +143,12 @@ static int ps2mult_create_port(struct ps2mult *psm, int i)
148143

149144
static void ps2mult_reset(struct ps2mult *psm)
150145
{
151-
unsigned long flags;
152-
153-
spin_lock_irqsave(&psm->lock, flags);
146+
guard(spinlock_irqsave)(&psm->lock);
154147

155148
serio_write(psm->mx_serio, PS2MULT_SESSION_END);
156149
serio_write(psm->mx_serio, PS2MULT_SESSION_START);
157150

158151
ps2mult_select_port(psm, &psm->ports[PS2MULT_KBD_PORT]);
159-
160-
spin_unlock_irqrestore(&psm->lock, flags);
161152
}
162153

163154
static int ps2mult_connect(struct serio *serio, struct serio_driver *drv)
@@ -234,11 +225,10 @@ static irqreturn_t ps2mult_interrupt(struct serio *serio,
234225
{
235226
struct ps2mult *psm = serio_get_drvdata(serio);
236227
struct ps2mult_port *in_port;
237-
unsigned long flags;
238228

239229
dev_dbg(&serio->dev, "Received %02x flags %02x\n", data, dfl);
240230

241-
spin_lock_irqsave(&psm->lock, flags);
231+
guard(spinlock_irqsave)(&psm->lock);
242232

243233
if (psm->escape) {
244234
psm->escape = false;
@@ -285,7 +275,6 @@ static irqreturn_t ps2mult_interrupt(struct serio *serio,
285275
}
286276

287277
out:
288-
spin_unlock_irqrestore(&psm->lock, flags);
289278
return IRQ_HANDLED;
290279
}
291280

0 commit comments

Comments
 (0)