On Tue, Jan 11, 2011 at 09:47:44PM +0530, Amit Shah wrote: > The current default of 16 buffers for the control vq is too small for > the default max_nr_ports of 32. We can get more entries in there, > example when asking the guest to add max. allowed ports. > > Default to using the minimum required (next power of 2) of the > max_nr_ports in use. > > Signed-off-by: Amit Shah <amit.s...@redhat.com> > ---
So looking at this more closely, this reduces but does not eliminate the chance of notification event drops. I think I liked v1 better. > hw/virtio-serial-bus.c | 13 ++++++++++--- > 1 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c > index 74ba5ec..eb7b362 100644 > --- a/hw/virtio-serial-bus.c > +++ b/hw/virtio-serial-bus.c > @@ -736,7 +736,7 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, > uint32_t max_nr_ports) > { > VirtIOSerial *vser; > VirtIODevice *vdev; > - uint32_t i, max_supported_ports; > + uint32_t i, max_supported_ports, cvq_len; > > if (!max_nr_ports) > return NULL; > @@ -769,10 +769,17 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, > uint32_t max_nr_ports) > /* Add a queue for guest to host transfers for port 0 (backward compat) > */ > vser->ovqs[0] = virtio_add_queue(vdev, 128, handle_output); > > + /* > + * The number of descriptors to use should always be a power of > + * two. Use the next power of 2 of max_nr_ports to keep the > + * entries to a minimum. > + */ > + cvq_len = 1 << qemu_fls(max_nr_ports - 1); > + > /* control queue: host to guest */ > - vser->c_ivq = virtio_add_queue(vdev, 16, control_in); > + vser->c_ivq = virtio_add_queue(vdev, cvq_len, control_in); > /* control queue: guest to host */ > - vser->c_ovq = virtio_add_queue(vdev, 16, control_out); > + vser->c_ovq = virtio_add_queue(vdev, cvq_len, control_out); > > for (i = 1; i < vser->bus->max_nr_ports; i++) { > /* Add a per-port queue for host to guest transfers */ > -- > 1.7.3.4 >