Input: serport - use guard notation when acquiring spinlock
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 5 Sep 2024 04:17:23 +0000 (21:17 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 4 Oct 2024 07:58:17 +0000 (00:58 -0700)
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/20240905041732.2034348-19-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/serio/serport.c

index 5a2b540..74ac887 100644 (file)
@@ -50,11 +50,9 @@ static int serport_serio_write(struct serio *serio, unsigned char data)
 static int serport_serio_open(struct serio *serio)
 {
        struct serport *serport = serio->port_data;
-       unsigned long flags;
 
-       spin_lock_irqsave(&serport->lock, flags);
+       guard(spinlock_irqsave)(&serport->lock);
        set_bit(SERPORT_ACTIVE, &serport->flags);
-       spin_unlock_irqrestore(&serport->lock, flags);
 
        return 0;
 }
@@ -63,11 +61,9 @@ static int serport_serio_open(struct serio *serio)
 static void serport_serio_close(struct serio *serio)
 {
        struct serport *serport = serio->port_data;
-       unsigned long flags;
 
-       spin_lock_irqsave(&serport->lock, flags);
+       guard(spinlock_irqsave)(&serport->lock);
        clear_bit(SERPORT_ACTIVE, &serport->flags);
-       spin_unlock_irqrestore(&serport->lock, flags);
 }
 
 /*
@@ -118,14 +114,13 @@ static void serport_ldisc_receive(struct tty_struct *tty, const u8 *cp,
                                  const u8 *fp, size_t count)
 {
        struct serport *serport = tty->disc_data;
-       unsigned long flags;
        unsigned int ch_flags = 0;
        int i;
 
-       spin_lock_irqsave(&serport->lock, flags);
+       guard(spinlock_irqsave)(&serport->lock);
 
        if (!test_bit(SERPORT_ACTIVE, &serport->flags))
-               goto out;
+               return;
 
        for (i = 0; i < count; i++) {
                if (fp) {
@@ -146,9 +141,6 @@ static void serport_ldisc_receive(struct tty_struct *tty, const u8 *cp,
 
                serio_interrupt(serport->serio, cp[i], ch_flags);
        }
-
-out:
-       spin_unlock_irqrestore(&serport->lock, flags);
 }
 
 /*
@@ -246,11 +238,9 @@ static int serport_ldisc_compat_ioctl(struct tty_struct *tty,
 static void serport_ldisc_hangup(struct tty_struct *tty)
 {
        struct serport *serport = tty->disc_data;
-       unsigned long flags;
 
-       spin_lock_irqsave(&serport->lock, flags);
-       set_bit(SERPORT_DEAD, &serport->flags);
-       spin_unlock_irqrestore(&serport->lock, flags);
+       scoped_guard(spinlock_irqsave, &serport->lock)
+               set_bit(SERPORT_DEAD, &serport->flags);
 
        wake_up_interruptible(&serport->wait);
 }
@@ -258,12 +248,11 @@ static void serport_ldisc_hangup(struct tty_struct *tty)
 static void serport_ldisc_write_wakeup(struct tty_struct * tty)
 {
        struct serport *serport = tty->disc_data;
-       unsigned long flags;
 
-       spin_lock_irqsave(&serport->lock, flags);
+       guard(spinlock_irqsave)(&serport->lock);
+
        if (test_bit(SERPORT_ACTIVE, &serport->flags))
                serio_drv_write_wakeup(serport->serio);
-       spin_unlock_irqrestore(&serport->lock, flags);
 }
 
 /*