diff options
author | chuck <chuck@cvs.openbsd.org> | 1996-02-08 04:43:48 +0000 |
---|---|---|
committer | chuck <chuck@cvs.openbsd.org> | 1996-02-08 04:43:48 +0000 |
commit | 70547726269f3d2b562f68912a0ca13d9ddf03a6 (patch) | |
tree | 8f591ab2cffc77da1ab86c4e856211830a37f3b0 /sys | |
parent | d6c3f4efc8b31ad490dabaa8ab86e39364fd932c (diff) |
- moved disk_busy() call from xdstrategy() to xdc_startbuf()
[prevents disk_unbusy panic when disk is loaded (if no
free IOPBs, xdstrategy() would queue the buffer for pickup
by xdcintr() but xdcintr() would never call disk_busy().
xdc_startbuf() is a better place since all bufs are routed
through here] problem detected by girish@dworkin.wustl.edu,
diagnosed and corrected by me.
- move disk_unbusy() call in xdc_remove_iorq() before the call to
XDC_FREE() [don't want to access a data structure that was just put
on a free list]
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/sparc/dev/xd.c | 10 | ||||
-rw-r--r-- | sys/arch/sun3/dev/xd.c | 10 |
2 files changed, 10 insertions, 10 deletions
diff --git a/sys/arch/sparc/dev/xd.c b/sys/arch/sparc/dev/xd.c index 7c649161b24..04d21f71d2a 100644 --- a/sys/arch/sparc/dev/xd.c +++ b/sys/arch/sparc/dev/xd.c @@ -36,7 +36,7 @@ * x d . c x y l o g i c s 7 5 3 / 7 0 5 3 v m e / s m d d r i v e r * * author: Chuck Cranor <chuck@ccrc.wustl.edu> - * id: $Id: xd.c,v 1.5 1996/01/13 03:45:01 chuck Exp $ + * id: $Id: xd.c,v 1.6 1996/02/08 04:43:45 chuck Exp $ * started: 27-Feb-95 * references: [1] Xylogics Model 753 User's Manual * part number: 166-753-001, Revision B, May 21, 1988. @@ -1094,9 +1094,6 @@ xdstrategy(bp) return; } - /* Instrumentation. */ - disk_busy(&xd->sc_dk); - /* done! */ splx(s); @@ -1441,6 +1438,9 @@ xdc_startbuf(xdcsc, xdsc, bp) xdc_rqtopb(iorq, iopb, (bp->b_flags & B_READ) ? XDCMD_RD : XDCMD_WR, 0); + /* Instrumentation. */ + disk_busy(&xdsc->sc_dk); + /* now submit [note that xdc_submit_iorq can never fail on NORM reqs] */ xdc_submit_iorq(xdcsc, rqno, XD_SUB_NORM); @@ -1928,9 +1928,9 @@ xdc_remove_iorq(xdcsc) dvma_mapout((vm_offset_t) iorq->dbufbase, (vm_offset_t) bp->b_un.b_addr, bp->b_bcount); - XDC_FREE(xdcsc, rqno); disk_unbusy(&iorq->xd->sc_dk, (bp->b_bcount - bp->b_resid)); + XDC_FREE(xdcsc, rqno); biodone(bp); break; case XD_SUB_WAIT: diff --git a/sys/arch/sun3/dev/xd.c b/sys/arch/sun3/dev/xd.c index 3543a7c2d7e..3352fd1bfe8 100644 --- a/sys/arch/sun3/dev/xd.c +++ b/sys/arch/sun3/dev/xd.c @@ -36,7 +36,7 @@ * x d . c x y l o g i c s 7 5 3 / 7 0 5 3 v m e / s m d d r i v e r * * author: Chuck Cranor <chuck@ccrc.wustl.edu> - * id: $Id: xd.c,v 1.3 1996/01/13 03:52:44 chuck Exp $ + * id: $Id: xd.c,v 1.4 1996/02/08 04:43:47 chuck Exp $ * started: 27-Feb-95 * references: [1] Xylogics Model 753 User's Manual * part number: 166-753-001, Revision B, May 21, 1988. @@ -1067,9 +1067,6 @@ xdstrategy(bp) return; } - /* Instrumentation. */ - disk_busy(&xd->sc_dk); - /* done! */ splx(s); @@ -1425,6 +1422,9 @@ xdc_startbuf(xdcsc, xdsc, bp) xdc_rqtopb(iorq, iopb, (bp->b_flags & B_READ) ? XDCMD_RD : XDCMD_WR, 0); + /* Instrumentation. */ + disk_busy(&xdsc->sc_dk); + /* now submit [note that xdc_submit_iorq can never fail on NORM reqs] */ xdc_submit_iorq(xdcsc, rqno, XD_SUB_NORM); @@ -1911,9 +1911,9 @@ xdc_remove_iorq(xdcsc) /* Sun3: map/unmap regardless of B_PHYS */ dvma_mapout(iorq->dbufbase, iorq->buf->b_bcount); - XDC_FREE(xdcsc, rqno); disk_unbusy(&iorq->xd->sc_dk, (bp->b_bcount - bp->b_resid)); + XDC_FREE(xdcsc, rqno); biodone(bp); break; case XD_SUB_WAIT: |