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

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
Loading
Loading
Loading
Loading
+7 −42
Original line number Diff line number Diff line
@@ -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,7 +440,7 @@ static irqreturn_t macii_interrupt(int irq, void *arg)

		case reading:
			x = via[SR];
			BUG_ON((status & ST_MASK) == ST_CMD ||
			WARN_ON((status & ST_MASK) == ST_CMD ||
				(status & ST_MASK) == ST_IDLE);

			/* Bus timeout with SRQ sequence:
@@ -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;
}