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