Description of Problem: From: Chris Pascoe [c.pascoe.edu.au] Sent: Tuesday, January 22, 2002 6:58 AM Hi Alan, 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. */ /* Regards, Chris 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. How Reproducible: Always on systems with i960 embedded RAID and aacraid driver. Steps to Reproduce: 1. start aacraid driver 2. 3. Actual Results: 150,000 interrupts/second or more, even with no disk activity. Expected Results: a very very small number of interrupts per second Additional Information:
added to the relevant trees a while ago.