Input: matrix_keypad - use guard notation when acquiring spinlock
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 25 Aug 2024 05:16:15 +0000 (22:16 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 3 Oct 2024 15:58:56 +0000 (08:58 -0700)
This 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/20240825051627.2848495-12-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/matrix_keypad.c

index 3c38bae..a6bccb2 100644 (file)
@@ -158,18 +158,17 @@ static void matrix_keypad_scan(struct work_struct *work)
        activate_all_cols(keypad, true);
 
        /* Enable IRQs again */
-       spin_lock_irq(&keypad->lock);
-       keypad->scan_pending = false;
-       enable_row_irqs(keypad);
-       spin_unlock_irq(&keypad->lock);
+       scoped_guard(spinlock_irq, &keypad->lock) {
+               keypad->scan_pending = false;
+               enable_row_irqs(keypad);
+       }
 }
 
 static irqreturn_t matrix_keypad_interrupt(int irq, void *id)
 {
        struct matrix_keypad *keypad = id;
-       unsigned long flags;
 
-       spin_lock_irqsave(&keypad->lock, flags);
+       guard(spinlock_irqsave)(&keypad->lock);
 
        /*
         * See if another IRQ beaten us to it and scheduled the
@@ -185,7 +184,6 @@ static irqreturn_t matrix_keypad_interrupt(int irq, void *id)
                              msecs_to_jiffies(keypad->debounce_ms));
 
 out:
-       spin_unlock_irqrestore(&keypad->lock, flags);
        return IRQ_HANDLED;
 }
 
@@ -209,9 +207,9 @@ static void matrix_keypad_stop(struct input_dev *dev)
 {
        struct matrix_keypad *keypad = input_get_drvdata(dev);
 
-       spin_lock_irq(&keypad->lock);
-       keypad->stopped = true;
-       spin_unlock_irq(&keypad->lock);
+       scoped_guard(spinlock_irq, &keypad->lock) {
+               keypad->stopped = true;
+       }
 
        flush_delayed_work(&keypad->work);
        /*