diff options
author | gibbs <gibbs@FreeBSD.org> | 2001-01-23 22:17:03 +0000 |
---|---|---|
committer | gibbs <gibbs@FreeBSD.org> | 2001-01-23 22:17:03 +0000 |
commit | f2a437953472eba0c50e52939c039f5c1088ccfe (patch) | |
tree | c0f4278c11cfbd981ae76c0507eb53896458e09f /sys/dev/aic7xxx | |
parent | 2207837a494a376169fe86fef764d357ed794621 (diff) | |
download | FreeBSD-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/aic7xxx')
-rw-r--r-- | sys/dev/aic7xxx/aic7xxx.c | 5 |
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]); |