On 25 July 2013 10:03, Michael S. Tsirkin <m...@redhat.com> wrote: > On Thu, Jul 25, 2013 at 09:50:21AM +0100, Peter Maydell wrote: >> On 25 July 2013 06:38, Michael S. Tsirkin <m...@redhat.com> wrote: >> > On Fri, Jul 12, 2013 at 09:36:57PM +0100, Peter Maydell wrote: >> >> The MMIO virtio transport spec allows the guest to tell the host how >> >> large the queue size is. Add virtio_queue_set_num() function which >> >> implements this in the QEMU common virtio support code. >> >> >> >> Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> >> > >> > Probably needs to go back to default value on reset? >> >> Tricky, since the default value is "whatever was passed to >> virtio_add_queue()" and we don't save that anywhere. >> >> For virtio-mmio it is a guest bug to fail to write to the >> QueueNum register, so the current behaviour is not out of >> specification (and not harmful either AFAICT). > > Best not to leak info across reboots. > Also if guest sets num = 0 it will cause all kind of > harm, no?
Yes, I had the thought on the way into work that we shouldn't allow the guest to switch between 0 and non-zero. >> I guess we could add a vring.defaultnum, which would be >> set by virtio_add_queue/virtio_del_queue, and have reset >> copy defaultnum into num. No migration needed for defaultnum >> because it's always the same for a particular qemu config. > > Sounds good. > >> > Need to migrate? >> >> It's already migrated (though I'm not entirely sure why). >> >> > Is the default value a max legal value? If yes probably a good >> > idea to enforce this. >> >> virtio_add_queue() already enforces this -- it will abort() >> if you try to set up a queue with a default size greater >> than VIRTQUEUE_MAX_SIZE. > > No I mean does default value have some meaning? It's not clear to me -- virtio_add_queue() doesn't document the semantics of its queue_size parameter. > Does host supply a hint of a max value > besides VIRTQUEUE_MAX_SIZE? The spec says there's a QueueNumMax register which returns the maximum for the selected queue. The current implementation of virtio-mmio always returns VIRTQUEUE_MAX_SIZE. We could return the default size as the QueueNumMax instead but that would seem to be limiting the guest unnecessarily. -- PMM