summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>2001-01-23 22:17:03 +0000
committergibbs <gibbs@FreeBSD.org>2001-01-23 22:17:03 +0000
commitf2a437953472eba0c50e52939c039f5c1088ccfe (patch)
treec0f4278c11cfbd981ae76c0507eb53896458e09f /sys/dev
parent2207837a494a376169fe86fef764d357ed794621 (diff)
downloadFreeBSD-src-f2a437953472eba0c50e52939c039f5c1088ccfe.zip
FreeBSD-src-f2a437953472eba0c50e52939c039f5c1088ccfe.tar.gz
When flipping the first entry in the qinfifo with the "next queued SCB",
we must also inform the card of this change. Otherwise the sequencer will traverse a corrupt list of SCBS. The side effects of this problem were unknown SCBs completing in the qoutfifo or worse yet, panics due to sequencer interrupts that referenced what, to the kernel, were invalid SCB ids.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/aic7xxx/aic7xxx.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/dev/aic7xxx/aic7xxx.c b/sys/dev/aic7xxx/aic7xxx.c
index 35511f3..2117aff 100644
--- a/sys/dev/aic7xxx/aic7xxx.c
+++ b/sys/dev/aic7xxx/aic7xxx.c
@@ -28,7 +28,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: //depot/src/aic7xxx/aic7xxx.c#24 $
+ * $Id: //depot/src/aic7xxx/aic7xxx.c#26 $
*
* $FreeBSD$
*/
@@ -4879,6 +4879,9 @@ ahc_search_qinfifo(struct ahc_softc *ahc, int target, char channel,
scb->hscb->next = next;
ahc->qinfifo[qinstart] = scb->hscb->tag;
+ /* Tell the card about the new head of the qinfifo. */
+ ahc_outb(ahc, NEXT_QUEUED_SCB, scb->hscb->tag);
+
/* Fixup the tail "next" pointer. */
qintail = ahc->qinfifonext - 1;
scb = ahc_lookup_scb(ahc, ahc->qinfifo[qintail]);
OpenPOWER on IntegriCloud