macintosh/via-macii: Remove BUG_ON assertions
authorFinn Thain <fthain@telegraphics.com.au>
Wed, 12 Sep 2018 00:18:44 +0000 (20:18 -0400)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 8 Oct 2018 11:53:10 +0000 (22:53 +1100)
The BUG_ON assertions I added to the via-macii driver over a decade ago
haven't fired AFAIK. Some can never fire (by inspection). One assertion
checks for a NULL pointer, but that would merely substitute a BUG crash
for an Oops crash. Remove the pointless BUG_ON assertions and replace
the others with a WARN_ON and an array bounds check.

Tested-by: Stan Johnson <userm57@yahoo.com>
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/macintosh/via-macii.c

index 36a4f49..7e0e32f 100644 (file)
@@ -120,23 +120,6 @@ static int srq_asserted;     /* have to poll for the device that asserted it */
 static int command_byte;         /* the most recent command byte transmitted */
 static int autopoll_devs;      /* bits set are device addresses to be polled */
 
-/* Sanity check for request queue. Doesn't check for cycles. */
-static int request_is_queued(struct adb_request *req) {
-       struct adb_request *cur;
-       unsigned long flags;
-       local_irq_save(flags);
-       cur = current_req;
-       while (cur) {
-               if (cur == req) {
-                       local_irq_restore(flags);
-                       return 1;
-               }
-               cur = cur->next;
-       }
-       local_irq_restore(flags);
-       return 0;
-}
-
 /* Check for MacII style ADB */
 static int macii_probe(void)
 {
@@ -213,8 +196,6 @@ static void macii_queue_poll(void)
        else
                next_device = ffs(autopoll_devs) - 1;
 
-       BUG_ON(request_is_queued(&req));
-
        adb_request(&req, NULL, ADBREQ_NOSEND, 1,
                    ADB_READREG(next_device, 0));
 
@@ -237,18 +218,13 @@ static int macii_send_request(struct adb_request *req, int sync)
        int err;
        unsigned long flags;
 
-       BUG_ON(request_is_queued(req));
-
        local_irq_save(flags);
        err = macii_write(req);
        local_irq_restore(flags);
 
-       if (!err && sync) {
-               while (!req->complete) {
+       if (!err && sync)
+               while (!req->complete)
                        macii_poll();
-               }
-               BUG_ON(request_is_queued(req));
-       }
 
        return err;
 }
@@ -327,9 +303,6 @@ static int macii_reset_bus(void)
 {
        static struct adb_request req;
        
-       if (request_is_queued(&req))
-               return 0;
-
        /* Command = 0, Address = ignored */
        adb_request(&req, NULL, ADBREQ_NOSEND, 1, ADB_BUSRESET);
        macii_send_request(&req, 1);
@@ -347,10 +320,6 @@ static void macii_start(void)
 
        req = current_req;
 
-       BUG_ON(req == NULL);
-
-       BUG_ON(macii_state != idle);
-
        /* Now send it. Be careful though, that first byte of the request
         * is actually ADB_PACKET; the real data begins at index 1!
         * And req->nbytes is the number of bytes of real data plus one.
@@ -388,7 +357,6 @@ static void macii_start(void)
 static irqreturn_t macii_interrupt(int irq, void *arg)
 {
        int x;
-       static int entered;
        struct adb_request *req;
 
        if (!arg) {
@@ -399,8 +367,6 @@ static irqreturn_t macii_interrupt(int irq, void *arg)
                        return IRQ_NONE;
        }
 
-       BUG_ON(entered++);
-
        last_status = status;
        status = via[B] & (ST_MASK|CTLR_IRQ);
 
@@ -409,7 +375,7 @@ static irqreturn_t macii_interrupt(int irq, void *arg)
                        if (reading_reply) {
                                reply_ptr = current_req->reply;
                        } else {
-                               BUG_ON(current_req != NULL);
+                               WARN_ON(current_req);
                                reply_ptr = reply_buf;
                        }
 
@@ -474,8 +440,8 @@ static irqreturn_t macii_interrupt(int irq, void *arg)
 
                case reading:
                        x = via[SR];
-                       BUG_ON((status & ST_MASK) == ST_CMD ||
-                              (status & ST_MASK) == ST_IDLE);
+                       WARN_ON((status & ST_MASK) == ST_CMD ||
+                               (status & ST_MASK) == ST_IDLE);
 
                        /* Bus timeout with SRQ sequence:
                         *     data is "XX FF"      while CTLR_IRQ is "L L"
@@ -502,8 +468,8 @@ static irqreturn_t macii_interrupt(int irq, void *arg)
                                }
                        }
 
-                       if (macii_state == reading) {
-                               BUG_ON(reply_len > 15);
+                       if (macii_state == reading &&
+                           reply_len < ARRAY_SIZE(reply_buf)) {
                                reply_ptr++;
                                *reply_ptr = x;
                                reply_len++;
@@ -546,6 +512,5 @@ static irqreturn_t macii_interrupt(int irq, void *arg)
                break;
        }
 
-       entered--;
        return IRQ_HANDLED;
 }