Commit 5f93d708 authored by Finn Thain's avatar Finn Thain Committed by Michael Ellerman

macintosh/via-macii: Remove BUG_ON assertions

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: default avatarStan Johnson <userm57@yahoo.com>
Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent b52dce87
......@@ -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;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment