From owner-freebsd-commit Thu Apr 27 10:47:35 1995 Return-Path: commit-owner Received: (from majordom@localhost) by freefall.cdrom.com (8.6.10/8.6.6) id KAA25918 for commit-outgoing; Thu, 27 Apr 1995 10:47:35 -0700 Received: (from majordom@localhost) by freefall.cdrom.com (8.6.10/8.6.6) id KAA25893 for cvs-sys-outgoing; Thu, 27 Apr 1995 10:47:28 -0700 Received: (from gibbs@localhost) by freefall.cdrom.com (8.6.10/8.6.6) id KAA25865 ; Thu, 27 Apr 1995 10:47:20 -0700 Date: Thu, 27 Apr 1995 10:47:20 -0700 From: "Justin T. Gibbs" Message-Id: <199504271747.KAA25865@freefall.cdrom.com> To: CVS-commiters, cvs-sys Subject: cvs commit: src/sys/i386/scsi aic7xxx.c aic7xxx.h Sender: commit-owner@FreeBSD.org Precedence: bulk gibbs 95/04/27 10:47:19 Modified: sys/dev/aic7xxx aic7xxx.seq Log: Restructure the arbitration loop to allow for reselections that win out over the adapter's selections. Many fast periferals were getting upset when the sequencer decided to rearbitrate after the device had already won arbitration. This also forced the creation of a list threaded through the SCBs (since we don't have enough space anywhere else) of commands that are awaiting reselection. This list is run down before any new transactions from the input queue are allowed. The list is appened to whenever we begin a selection (simple case since the selecting device is always at the head) and by the kernel driver whenever a request sense occurs. In the common case, the list is only one element long, but when a reselection wins out over a selection and that reselection generates a request sense, the outstanding selection required for the retreval of the sense code grows the list. On machines with many targets, this might cause the list to grow large, so this solution, which will allow up to the maximum number of I/O requests capible of the card elements in the list, was chosen. The list manipulation is trivial and adds three sequencer instructions of overhead to the selection phase. This fixes the "target busy" errors from micropolis drives and the bursty I/O problem when performing I/O between a Quantum Grand Prix and any other device. I anticipate that this will correct many of the problems that have been reported with this driver. Reviewed by: Wcarchive and David Greenman Modified: sys/i386/scsi aic7xxx.c aic7xxx.h Log: Additions to support the WAITING_SCB list that the sequencer maintains. It is the kernel driver's responsibility to do the list manipulation whenever a selection timeout or a request sense occurs. Print out the interrupt type that the device has been set to. It seems that one of the Asus motherboards botches this and David thought a diagnostic would be nice. Fix a bug in my diagnostic code that David found. Reviewed by: Wcarchive and David Greenman