Infinite interrupt loop, INTSTAT = 0 in ahd driver?

Justin T. Gibbs gibbs at scsiguy.com
Thu Aug 28 12:49:20 PDT 2003


> 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



More information about the freebsd-scsi mailing list