Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 May 2002 14:19:13 -0600
From:      "Justin T. Gibbs" <gibbs@scsiguy.com>
To:        Martin Kraemer <Martin.Kraemer@Fujitsu-Siemens.com>
Cc:        freebsd-stable@freebsd.org
Subject:   Re: 4.6-RC: indefinite wait buffer / (da0:ahc0:0:0:0): SCB 0x81 - timed out 
Message-ID:  <200205292019.g4TKJD900905@aslan.scsiguy.com>
In-Reply-To: Your message of "Wed, 29 May 2002 15:45:01 %2B0200." <20020529154501.A38504@deejai2.mch.fsc.net> 

next in thread | previous in thread | raw e-mail | index | archive | help
>My aic7880 Ultra SCSI on-board adapter had been working painlessly
>for a long time (after having SCSI time-out problems about a year ago,
>which were fixed at that time by Justin's source code correction in the
>FreeBSD-STABLE sources). Now, with 4.6-RC, the problems re-appear,
>as soon as the machine becomes I/O-loaded (saving to DAT).
>The effect is that the machine freezes for 30 seconds.

The problem has to do the PCI 2.1 retry bug workaround active for your
particular version of the aic7880.  I don't recall if this is the same
issue you had in the past.  The workaround was last changed in August of
2001 due to a problem similar to what you are now reporting.  In your
dump, there is a discrepancy between the amount of data the firmware
believes it has pulled from the fifo and the amount of data the hardware
believes it has placed in the FIFO.  The attached patch adds some diagnostics
that may help me to determine the order of events when the hang occurs
which may allow me to come up with a workaround that works.

--
Justin

==== //depot/aic7xxx/aic7xxx/aic7xxx.seq#43 - /usr/src/sys/dev/aic7xxx/aic7xxx.seq ====
*** /tmp/tmp.8662.0	Wed May 29 14:20:50 2002
--- /usr/src/sys/dev/aic7xxx/aic7xxx.seq	Wed May 29 14:20:26 2002
***************
*** 2218,2226 ****
  			 * available data to force the chip to
  			 * continue the transfer.  This does not
  			 * happen for SCSI transfers as the SCSI module
! 			 * will drain the FIFO as data is made available.
  			 * When the hang occurs, we know that a multiple
! 			 * of 8 bytes are in the FIFO because the PCI
  			 * module has an 8 byte input latch that only
  			 * dumps to the FIFO when HCNT == 0 or the
  			 * latch is full.
--- 2218,2226 ----
  			 * available data to force the chip to
  			 * continue the transfer.  This does not
  			 * happen for SCSI transfers as the SCSI module
! 			 * will drain the FIFO as data are made available.
  			 * When the hang occurs, we know that a multiple
! 			 * of 8 bytes is in the FIFO because the PCI
  			 * module has an 8 byte input latch that only
  			 * dumps to the FIFO when HCNT == 0 or the
  			 * latch is full.
***************
*** 2239,2247 ****
  			 * a PCI transaction.  Drain the fifo.
  			 */
  dma_scb_hang_dma_drain_fifo:
! 			not	A, HCNT;
  			add	A, SCB_DOWNLOAD_SIZE+SCB_BASE+1;
  			and	A, ~0x7;
  			mov	DINDIR,DFDAT;
  			cmp	DINDEX, A jne . - 1;
  			cmp	DINDEX, SCB_DOWNLOAD_SIZE+SCB_BASE
--- 2239,2249 ----
  			 * a PCI transaction.  Drain the fifo.
  			 */
  dma_scb_hang_dma_drain_fifo:
! 			mov	SINDEX, HCNT;
! 			not	A, SINDEX;
  			add	A, SCB_DOWNLOAD_SIZE+SCB_BASE+1;
  			and	A, ~0x7;
+ 			mov	ARG_2, DINDEX;
  			mov	DINDIR,DFDAT;
  			cmp	DINDEX, A jne . - 1;
  			cmp	DINDEX, SCB_DOWNLOAD_SIZE+SCB_BASE

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200205292019.g4TKJD900905>