Description of Problem:
From: Chris Pascoe [mailto:email@example.com]
Sent: Tuesday, January 22, 2002 6:58 AM
The problem with millions of interrupts being generated by the aacraid
driver on some hardware is caused by reversed arguments to time_before in
rx_sync_cmd. This causes every synchronous command sent to the controller
to miss acknowledgement, including our one to start the adapter. When
interrupts are subsequently re-enabled, we get a continuous stream of
interrupts as the command has actually completed, and there is no path in
aac_rx_intr to acknowledge the command.
The following patch corrects the described problem.
--- linux/drivers/scsi/aacraid/rx.c.orig Tue Jan 22 22:40:58 2002
+++ linux/drivers/scsi/aacraid/rx.c Tue Jan 22 22:41:19 2002
@@ -199,7 +199,7 @@
* Wait up to 30 seconds
- while (time_before(start+30*HZ, jiffies))
+ while (time_before(jiffies, start+30*HZ))
udelay(5); /* Delay 5 microseconds to let Mon960 get info.
Version-Release number of selected component (if applicable):
~ 2.4.9-20 kernel, stock kernel 2.4.17 through 2.4.18-pre4 at least.
Always on systems with i960 embedded RAID and aacraid driver.
Steps to Reproduce:
1. start aacraid driver
150,000 interrupts/second or more, even with no disk activity.
a very very small number of interrupts per second
added to the relevant trees a while ago.