{
        int retval;
 
-       serio_pause_rx(ps2dev->serio);
+       guard(serio_pause_rx)(ps2dev->serio);
 
        retval = ps2_do_sendbyte(ps2dev, byte, timeout, 1);
        dev_dbg(&ps2dev->serio->dev, "%02x - %x\n", byte, ps2dev->nak);
 
-       serio_continue_rx(ps2dev->serio);
-
        return retval;
 }
 EXPORT_SYMBOL(ps2_sendbyte);
 
        ps2_begin_command(ps2dev);
 
-       serio_pause_rx(ps2dev->serio);
-       ps2dev->flags = PS2_FLAG_CMD;
-       ps2dev->cmdcnt = maxbytes;
-       serio_continue_rx(ps2dev->serio);
+       scoped_guard(serio_pause_rx, ps2dev->serio) {
+               ps2dev->flags = PS2_FLAG_CMD;
+               ps2dev->cmdcnt = maxbytes;
+       }
 
        wait_event_timeout(ps2dev->wait,
                           !(ps2dev->flags & PS2_FLAG_CMD),
                 * use alternative probe to detect it.
                 */
                if (ps2dev->cmdbuf[1] == 0xaa) {
-                       serio_pause_rx(ps2dev->serio);
-                       ps2dev->flags = 0;
-                       serio_continue_rx(ps2dev->serio);
+                       scoped_guard(serio_pause_rx, ps2dev->serio)
+                               ps2dev->flags = 0;
+
                        timeout = 0;
                }
 
                 * won't be 2nd byte of ID response.
                 */
                if (!ps2_is_keyboard_id(ps2dev->cmdbuf[1])) {
-                       serio_pause_rx(ps2dev->serio);
-                       ps2dev->flags = ps2dev->cmdcnt = 0;
-                       serio_continue_rx(ps2dev->serio);
+                       scoped_guard(serio_pause_rx, ps2dev->serio)
+                               ps2dev->flags = ps2dev->cmdcnt = 0;
+
                        timeout = 0;
                }
                break;
 
        memcpy(send_param, param, send);
 
+       /*
+        * Not using guard notation because we need to break critical
+        * section below while waiting for the response.
+        */
        serio_pause_rx(ps2dev->serio);
 
        ps2dev->cmdcnt = receive;