octcf(4/octeon): switch disksort() to bufqs

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

octcf(4/octeon): switch disksort() to bufqs

David Gwynne-5
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);
  }

Reply | Threaded
Open this post in threaded view
|

Re: octcf(4/octeon): switch disksort() to bufqs

Brian Callahan-3
On 10/31/2013 2:33 AM, David Gwynne wrote:
> jmatthew@ tells me this compiles, but we dont have hardware to test
> with.
>
> tests? oks? go for its?
>

I'll run a test on my CAM-0100 later today.

> 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);
>   }
>

Reply | Threaded
Open this post in threaded view
|

Re: octcf(4/octeon): switch disksort() to bufqs

Brian Callahan-3
On 10/31/2013 10:49 AM, Brian Callahan wrote:
> On 10/31/2013 2:33 AM, David Gwynne wrote:
>> jmatthew@ tells me this compiles, but we dont have hardware to test
>> with.
>>
>> tests? oks? go for its?
>>
>
> I'll run a test on my CAM-0100 later today.
>

tests good. ok.

>> 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);
>>       }
>>
>