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>