Date: Thu, 28 Aug 2003 13:51:03 -0600 From: "Justin T. Gibbs" <gibbs@scsiguy.com> To: Don Bowman <don@sandvine.com>, "'freebsd-scsi@freebsd.org'" <freebsd-scsi@freebsd.org>, "'aic7xxx@freebsd.org'" <aic7xxx@freebsd.org> Subject: Re: Infinite interrupt loop, INTSTAT = 0 in ahd driver? Message-ID: <1509578112.1062100263@aslan.btc.adaptec.com> In-Reply-To: <FE045D4D9F7AED4CBFF1B3B813C85337027425C5@mail.sandvine.com> References: <FE045D4D9F7AED4CBFF1B3B813C85337027425C5@mail.sandvine.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> In aic79xx.c, in ahd_pause_and_flushwork() there > is a heuristic to prevent looping more than 1000 times. > If this happens a message like > "Infinite interrupt loop, INTSTAT = 0" is emitted. > > I am hitting this case. > System has a aic7902. If i set the clock to 20MHz, > disable wide negotiation, disable packetisation and > qas, the system will come up. There appears to > be no trouble for the bios to access the drive, it > is only the driver that hits this case. The BIOS does not operate in packetized mode. It also only sends one trasaction at a time. This roughly equivalent to the behavior you've setup for the driver with your settings in SCSI-Select. The ahd_pause_and_flushwork() routine is only called from timeouts. While there may be a bug in this routine, it is not the root cause of your failure. What drives are you using? Is the controller operating in PCI or PCI-X mode? Are there any other busmasters on the same PCI(-X) segment? What chipset is on your MB (include revision numbers if your system is using the P64H2 PCI-X hub)? You might avoid the loop problem with this change: do { struct scb *waiting_scb; + /* + * Give the sequencer some time to service + * any active selections. + */ ahd_unpause(ahd); + ahd_delay(200); + ahd_intr(ahd); ahd_pause(ahd); But you should continue to look into the root cause of your failure. -- Justin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1509578112.1062100263>