static irqreturn_t q40kbd_interrupt(int irq, void *dev_id)
 {
        struct q40kbd *q40kbd = dev_id;
-       unsigned long flags;
 
-       spin_lock_irqsave(&q40kbd->lock, flags);
+       guard(spinlock_irqsave)(&q40kbd->lock);
 
        if (Q40_IRQ_KEYB_MASK & master_inb(INTERRUPT_REG))
                serio_interrupt(q40kbd->port, master_inb(KEYCODE_REG), 0);
 
        master_outb(-1, KEYBOARD_UNLOCK_REG);
 
-       spin_unlock_irqrestore(&q40kbd->lock, flags);
-
        return IRQ_HANDLED;
 }
 
 static void q40kbd_flush(struct q40kbd *q40kbd)
 {
        int maxread = 100;
-       unsigned long flags;
 
-       spin_lock_irqsave(&q40kbd->lock, flags);
+       guard(spinlock_irqsave)(&q40kbd->lock);
 
        while (maxread-- && (Q40_IRQ_KEYB_MASK & master_inb(INTERRUPT_REG)))
                master_inb(KEYCODE_REG);
-
-       spin_unlock_irqrestore(&q40kbd->lock, flags);
 }
 
 static void q40kbd_stop(void)