On Thu, Aug 03, 2017 at 04:18:54PM -0700, Nick Owens wrote: > ping? >
Sorry this got buried. Should have time later today (yes, really) :) -ml > 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; > >>