mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-06 05:06:29 +00:00
Input: matrix_keypad - use guard notation when acquiring spinlock
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>
This commit is contained in:
parent
e9495ead52
commit
405b1762ae
@ -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);
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user