ping?

On Thu, Jul 27, 2017 at 10:20 AM, Mike Larkin <mlar...@azathoth.net> wrote:
> On Wed, Jul 26, 2017 at 09:37:30PM -0700, Nick Owens wrote:
>> hello tech@,
>>
>> here is a diff that will follow the virtio spec a little closer, and
>> allows 9front's (http://9front.org) virtio-blk driver to correctly find
>> the number of queues. i know that virtio-blk only has one queue, but
>> the virtio probing code is shared between virtio-blk and virtio-scsi.
>>
>> without this change, the size of the first queue is used for all
>> subsequently probed queues.
>>
>> for completeness i've changed rng and net to do the same as blk.
>>
>> some bits from the spec:
>>
>> 4.1.4.3.1 - "The device MUST present a 0 in queue_size if the virtqueue
>> corresponding to the current queue_select is unavailable."
>>
>> 4.1.5.1.3 - "Write the virtqueue index (first queue is 0) to
>> queue_select. Read the virtqueue size from queue_size. This controls
>> how big the virtqueue is (see 2.4 Virtqueues). If this field is 0, the
>> virtqueue does not exist."
>>
>
> vmd diffs are always welcome, thanks. I'll take a look at this later today.
>
> -ml
>
>
>> Index: virtio.c
>> ===================================================================
>> RCS file: /cvs/src/usr.sbin/vmd/virtio.c,v
>> retrieving revision 1.49
>> diff -u -p -u -p -r1.49 virtio.c
>> --- virtio.c  30 May 2017 17:56:47 -0000      1.49
>> +++ virtio.c  27 Jul 2017 04:35:46 -0000
>> @@ -150,8 +150,10 @@ void
>>  viornd_update_qs(void)
>>  {
>>       /* Invalid queue? */
>> -     if (viornd.cfg.queue_select > 0)
>> +     if (viornd.cfg.queue_select > 0) {
>> +             viornd.cfg.queue_size = 0;
>>               return;
>> +     }
>>
>>       /* Update queue address/size based on queue select */
>>       viornd.cfg.queue_address =
>> viornd.vq[viornd.cfg.queue_select].qa; @@ -324,8 +326,10 @@ void
>>  vioblk_update_qs(struct vioblk_dev *dev)
>>  {
>>       /* Invalid queue? */
>> -     if (dev->cfg.queue_select > 0)
>> +     if (dev->cfg.queue_select > 0) {
>> +             dev->cfg.queue_size = 0;
>>               return;
>> +     }
>>
>>       /* Update queue address/size based on queue select */
>>       dev->cfg.queue_address = dev->vq[dev->cfg.queue_select].qa;
>> @@ -1037,8 +1041,10 @@ void
>>  vionet_update_qs(struct vionet_dev *dev)
>>  {
>>       /* Invalid queue? */
>> -     if (dev->cfg.queue_select > 1)
>> +     if (dev->cfg.queue_select > 1) {
>> +             dev->cfg.queue_size = 0;
>>               return;
>> +     }
>>
>>       /* Update queue address/size based on queue select */
>>       dev->cfg.queue_address = dev->vq[dev->cfg.queue_select].qa;
>>

Reply via email to