this one is for xy(4) on sparc. again, i cant test, so if anyone could do that for me it would be appreciated.
does anyone have one of these? Index: xy.c =================================================================== RCS file: /cvs/src/sys/arch/sparc/dev/xy.c,v retrieving revision 1.57 diff -u -p -r1.57 xy.c --- xy.c 1 Nov 2013 17:36:19 -0000 1.57 +++ xy.c 19 Nov 2013 05:54:05 -0000 @@ -508,10 +508,7 @@ xyattach(parent, self, aux) xy->parent = xyc; /* init queue of waiting bufs */ - - xy->xyq.b_active = 0; - xy->xyq.b_actf = 0; - xy->xyq.b_actb = &xy->xyq.b_actf; /* XXX b_actb: not used? */ + bufq_init(&xy->xy_bufq, BUFQ_DEFAULT); xy->xyrq = &xyc->reqs[xa->driveno]; @@ -1003,14 +1000,14 @@ xystrategy(bp) if (bounds_check_with_label(bp, xy->sc_dk.dk_label) == -1) goto done; + bufq_queue(&xy->xy_bufq, bp); + /* * now we know we have a valid buf structure that we need to do I/O * on. */ s = splbio(); /* protect the queues */ - disksort(&xy->xyq, bp); - /* start 'em up */ xyc_start(xy->parent, NULL); @@ -1604,7 +1601,6 @@ xyc_reset(xycsc, quiet, blastmode, error dvma_mapout((vaddr_t)iorq->dbufbase, (vaddr_t)iorq->buf->b_data, iorq->buf->b_bcount); - iorq->xy->xyq.b_actf = iorq->buf->b_actf; disk_unbusy(&xycsc->reqs[lcv].xy->sc_dk, (xycsc->reqs[lcv].buf->b_bcount - xycsc->reqs[lcv].buf->b_resid), @@ -1651,9 +1647,9 @@ xyc_start(xycsc, iorq) if (iorq == NULL) { for (lcv = 0; lcv < XYC_MAXDEV ; lcv++) { if ((xy = xycsc->sc_drives[lcv]) == NULL) continue; - if (xy->xyq.b_actf == NULL) continue; + if (!bufq_peek(&xy->xy_bufq)) continue; if (xy->xyrq->mode != XY_SUB_FREE) continue; - xyc_startbuf(xycsc, xy, xy->xyq.b_actf); + xyc_startbuf(xycsc, xy, bufq_dequeue(&xy->xy_bufq)); } } xyc_submit_iorq(xycsc, iorq, XY_SUB_NOQ); @@ -1783,7 +1779,6 @@ xyc_remove_iorq(xycsc) dvma_mapout((vaddr_t) iorq->dbufbase, (vaddr_t) bp->b_data, bp->b_bcount); - iorq->xy->xyq.b_actf = bp->b_actf; disk_unbusy(&iorq->xy->sc_dk, (bp->b_bcount - bp->b_resid), (bp->b_flags & B_READ)); Index: xyvar.h =================================================================== RCS file: /cvs/src/sys/arch/sparc/dev/xyvar.h,v retrieving revision 1.7 diff -u -p -r1.7 xyvar.h --- xyvar.h 5 Jun 2011 18:40:33 -0000 1.7 +++ xyvar.h 19 Nov 2013 05:54:05 -0000 @@ -115,7 +115,7 @@ struct xy_softc { u_char nsect; /* number of sectors per track */ u_char hw_spt; /* as above, but includes spare sectors */ struct xy_iorq *xyrq; /* this disk's ioreq structure */ - struct buf xyq; /* queue'd I/O requests */ + struct bufq xy_bufq; /* queue'd I/O requests */ struct dkbad dkb; /* bad144 sectors */ };