FW: fix for aacraid-millions-of-interrupts
Matt_Domsch@Dell.com
Matt_Domsch@Dell.com
Tue Jan 22 09:35:01 2002
Once again, Chris Pascoe tracked down our biggest problem, the source of the
interrupt flood. Credit where credit is due. We're testing this here
today, but thought folks on this list may want to see this ASAP. Hopefully
this will also solve the one other failure mode reported - that booting a
degraded RAID container hangs the system. I believe that in such a case,
the adapter tries to send several messages to the driver to print into
syslog, but since the first request to print never completes, the card hangs
waiting for the driver to complete it.
Patch below applies to kernels 2.4.17 through at least 2.4.18-pre4.
Thanks again to Chris for his excellent bug-hunting skills! Please report
success/failure back to this list.
-Matt
--
Matt Domsch
Sr. Software Engineer
Dell Linux Solutions www.dell.com/linux
#1 US Linux Server provider with 24.5% (IDC Dec 2001)
#2 Worldwide Linux Server provider with 18.2% (IDC Dec 2001)
-----Original Message-----
From: Chris Pascoe [mailto:c.pascoe@itee.uq.edu.au]
Sent: Tuesday, January 22, 2002 6:58 AM
Subject: fix for aacraid-millions-of-interrupts
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