macintosh/adb-iop: Access current_req and adb_iop_state when inside lock
authorFinn Thain <fthain@telegraphics.com.au>
Sat, 30 May 2020 23:17:03 +0000 (09:17 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 26 Jul 2020 13:34:24 +0000 (23:34 +1000)
Drop the redundant local_irq_save/restore() from adb_iop_start() because
the caller has to do it anyway. This is the pattern used in via-macii.

Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Tested-by: Stan Johnson <userm57@yahoo.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/bbe32b087c7e04d68e2425f6a2df4a414d167c32.1590880623.git.fthain@telegraphics.com.au
drivers/macintosh/adb-iop.c

index c3089da..7ecc41b 100644 (file)
@@ -137,7 +137,6 @@ static void adb_iop_listen(struct iop_msg *msg)
 
 static void adb_iop_start(void)
 {
-       unsigned long flags;
        struct adb_request *req;
        struct adb_iopmsg amsg;
 
@@ -146,8 +145,6 @@ static void adb_iop_start(void)
        if (!req)
                return;
 
-       local_irq_save(flags);
-
        /* The IOP takes MacII-style packets, so strip the initial
         * ADB_PACKET byte.
         */
@@ -161,7 +158,6 @@ static void adb_iop_start(void)
 
        req->sent = 1;
        adb_iop_state = sending;
-       local_irq_restore(flags);
 
        /* Now send it. The IOP manager will call adb_iop_complete
         * when the message has been sent.
@@ -208,13 +204,13 @@ static int adb_iop_write(struct adb_request *req)
                return -EINVAL;
        }
 
-       local_irq_save(flags);
-
        req->next = NULL;
        req->sent = 0;
        req->complete = 0;
        req->reply_len = 0;
 
+       local_irq_save(flags);
+
        if (current_req != 0) {
                last_req->next = req;
                last_req = req;
@@ -223,10 +219,11 @@ static int adb_iop_write(struct adb_request *req)
                last_req = req;
        }
 
-       local_irq_restore(flags);
-
        if (adb_iop_state == idle)
                adb_iop_start();
+
+       local_irq_restore(flags);
+
        return 0;
 }