From owner-cvs-sys Sun Feb 2 18:16:21 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.5/8.8.5) id SAA01231 for cvs-sys-outgoing; Sun, 2 Feb 1997 18:16:21 -0800 (PST) Received: (from gibbs@localhost) by freefall.freebsd.org (8.8.5/8.8.5) id SAA01223; Sun, 2 Feb 1997 18:16:18 -0800 (PST) Date: Sun, 2 Feb 1997 18:16:18 -0800 (PST) From: "Justin T. Gibbs" Message-Id: <199702030216.SAA01223@freefall.freebsd.org> To: CVS-committers, cvs-all, cvs-sys Subject: cvs commit: src/sys/dev/aic7xxx aic7xxx.seq src/sys/i386/scsi aic7xxx.c aic7xxx.h Sender: owner-cvs-sys@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk gibbs 97/02/02 18:16:17 Modified: sys/dev/aic7xxx aic7xxx.seq Log: In dma_finish, don't disturb the direction bit in DFCNTRL when turning off host DMAs. The additional test to ensure that the DMA has stopped is also unnecessary since we've already waited for the DMA to complete. Update my copyright for the new year. Revision Changes Path 1.57 +3 -6 src/sys/dev/aic7xxx/aic7xxx.seq Modified: sys/i386/scsi aic7xxx.c aic7xxx.h Log: White space cleanup and other cosmetic style changes. Fix a few panics during error recovery: 1) Stupid mistake in the "no SCB match handler" where I was using the wrong variable (busy_scbid instead of scb_index). 2) Unbusy the target of an abort request if the command we are trying to abort is an untagged transaction. If we don't, we get a fatal NO_MATCH_BUSY condition which "should never happen". 3) When an abort completes, turn off ahc->in_timeout or else the next timeout will hit the protective "scb timesout again" panic. 4) Fix a typo that caused the requeued "abort" SCB to have its TAG_ENB and disconnect bits to be cleared (missing ~) so that devices would complain about overlapped commands. Be sure to turn off the unexpected busfree interrupt after we do a bus reset since we are expecting the bus to go free in that case. Return XS_TIMEOUT instead of XS_DRIVERSTUFFUP in certain scenarios. XS_TIMEOUT allows for retries, XS_DRIVERSTUFFUP does not. Allow commands with SDTR and WDTR negotiation to be tagged. The SCSI II spec says that you probably should not do this for fear of hitting bogus devices. The driver did this in the past for almost two years without any problem, and not doing it causes problems during error recovery to a tag capable device as the number of openings is higher than two and we'll start sending it tagged commands causing "overlapped commands attempted" type errors. The real fix needs to happen in the generic SCSI layer which can limit the number and type of transactions to a device during error recovery efficiently. Give ourselves at least 100ms to perform a request sense instead of relying on the original timeout to be long enough to complete this new command as well as the one that generated the condition. Removed some redundant code. Revision Changes Path 1.93 +49 -24 src/sys/i386/scsi/aic7xxx.c 1.36 +13 -1 src/sys/i386/scsi/aic7xxx.h