jmatthew@ tells me this compiles, but we dont have hardware to test with. tests? oks? go for its?
cheers, dlg Index: octcf.c =================================================================== RCS file: /cvs/src/sys/arch/octeon/dev/octcf.c,v retrieving revision 1.12 diff -u -p -r1.12 octcf.c --- octcf.c 11 Jun 2013 16:42:10 -0000 1.12 +++ octcf.c 31 Oct 2013 06:32:11 -0000 @@ -111,7 +111,7 @@ struct octcf_softc { /* General disk infos */ struct device sc_dev; struct disk sc_dk; - struct buf sc_q; + struct bufq sc_bufq; struct buf *sc_bp; struct ataparams sc_params;/* drive characteristics found */ int sc_flags; @@ -260,6 +260,7 @@ octcfattach(struct device *parent, struc * Initialize disk structures. */ wd->sc_dk.dk_name = wd->sc_dev.dv_xname; + bufq_init(&wd->sc_bufq, BUFQ_DEFAULT); /* Attach disk. */ disk_attach(&wd->sc_dev, &wd->sc_dk); @@ -326,9 +327,11 @@ octcfstrategy(struct buf *bp) goto bad; } + /* Queue the I/O */ + bufq_queue(&wd->sc_bufq, bp); + /* Queue transfer on drive, activate drive and controller if idle. */ s = splbio(); - disksort(&wd->sc_q, bp); octcfstart(wd); splx(s); device_unref(&wd->sc_dev); @@ -352,18 +355,11 @@ void octcfstart(void *arg) { struct octcf_softc *wd = arg; - struct buf *dp, *bp; + struct buf *bp; OCTCFDEBUG_PRINT(("%s %s\n", __func__, wd->sc_dev.dv_xname), DEBUG_XFERS); - while (1) { - /* Remove the next buffer from the queue or stop. */ - dp = &wd->sc_q; - bp = dp->b_actf; - if (bp == NULL) - return; - dp->b_actf = bp->b_actf; - + while ((bp = bufq_dequeue(&wd->sc_bufq)) != NULL) { /* Transfer this buffer now. */ _octcfstart(wd, bp); }