On Thu, 2011-02-03 at 11:47 +0530, Amit Shah wrote: > Instead of using a single variable to pass to the virtio_serial_init > function, use a struct so that expanding the number of variables to be > passed on later is easier. > > Signed-off-by: Amit Shah <amit.s...@redhat.com> > --- > hw/virtio-pci.c | 12 ++++++------ > hw/virtio-serial-bus.c | 16 ++++++++-------- > hw/virtio-serial.h | 5 +++++ > hw/virtio.h | 3 ++- > 4 files changed, 21 insertions(+), 15 deletions(-)
Acked-by: Alex Williamson <alex.william...@redhat.com> > diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c > index 3911b09..952b5d2 100644 > --- a/hw/virtio-pci.c > +++ b/hw/virtio-pci.c > @@ -18,6 +18,7 @@ > #include "virtio.h" > #include "virtio-blk.h" > #include "virtio-net.h" > +#include "virtio-serial.h" > #include "pci.h" > #include "qemu-error.h" > #include "msix.h" > @@ -109,8 +110,7 @@ typedef struct { > #ifdef CONFIG_LINUX > V9fsConf fsconf; > #endif > - /* Max. number of ports we can have for a the virtio-serial device */ > - uint32_t max_virtserial_ports; > + virtio_serial_conf serial; > virtio_net_conf net; > bool ioeventfd_disabled; > bool ioeventfd_started; > @@ -770,12 +770,12 @@ static int virtio_serial_init_pci(PCIDevice *pci_dev) > proxy->class_code != PCI_CLASS_OTHERS) /* qemu-kvm */ > proxy->class_code = PCI_CLASS_COMMUNICATION_OTHER; > > - vdev = virtio_serial_init(&pci_dev->qdev, proxy->max_virtserial_ports); > + vdev = virtio_serial_init(&pci_dev->qdev, &proxy->serial); > if (!vdev) { > return -1; > } > vdev->nvectors = proxy->nvectors == DEV_NVECTORS_UNSPECIFIED > - ? proxy->max_virtserial_ports + 1 > + ? proxy->serial.max_virtserial_ports > + 1 > : proxy->nvectors; > virtio_init_pci(proxy, vdev, > PCI_VENDOR_ID_REDHAT_QUMRANET, > @@ -902,8 +902,8 @@ static PCIDeviceInfo virtio_info[] = { > DEV_NVECTORS_UNSPECIFIED), > DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0), > DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features), > - DEFINE_PROP_UINT32("max_ports", VirtIOPCIProxy, > max_virtserial_ports, > - 31), > + DEFINE_PROP_UINT32("max_ports", VirtIOPCIProxy, > + serial.max_virtserial_ports, 31), > DEFINE_PROP_END_OF_LIST(), > }, > .qdev.reset = virtio_pci_reset, > diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c > index 09e22aa..1753785 100644 > --- a/hw/virtio-serial-bus.c > +++ b/hw/virtio-serial-bus.c > @@ -811,19 +811,19 @@ void > virtio_serial_port_qdev_register(VirtIOSerialPortInfo *info) > qdev_register(&info->qdev); > } > > -VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports) > +VirtIODevice *virtio_serial_init(DeviceState *dev, virtio_serial_conf *conf) > { > VirtIOSerial *vser; > VirtIODevice *vdev; > uint32_t i, max_supported_ports; > > - if (!max_nr_ports) > + if (!conf->max_virtserial_ports) > return NULL; > > /* Each port takes 2 queues, and one pair is for the control queue */ > max_supported_ports = VIRTIO_PCI_QUEUE_MAX / 2 - 1; > > - if (max_nr_ports > max_supported_ports) { > + if (conf->max_virtserial_ports > max_supported_ports) { > error_report("maximum ports supported: %u", max_supported_ports); > return NULL; > } > @@ -839,9 +839,9 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, > uint32_t max_nr_ports) > vser->bus->vser = vser; > QTAILQ_INIT(&vser->ports); > > - vser->bus->max_nr_ports = max_nr_ports; > - vser->ivqs = qemu_malloc(max_nr_ports * sizeof(VirtQueue *)); > - vser->ovqs = qemu_malloc(max_nr_ports * sizeof(VirtQueue *)); > + vser->bus->max_nr_ports = conf->max_virtserial_ports; > + vser->ivqs = qemu_malloc(conf->max_virtserial_ports * sizeof(VirtQueue > *)); > + vser->ovqs = qemu_malloc(conf->max_virtserial_ports * sizeof(VirtQueue > *)); > > /* Add a queue for host to guest transfers for port 0 (backward compat) > */ > vser->ivqs[0] = virtio_add_queue(vdev, 128, handle_input); > @@ -866,8 +866,8 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, > uint32_t max_nr_ports) > vser->ovqs[i] = virtio_add_queue(vdev, 128, handle_output); > } > > - vser->config.max_nr_ports = max_nr_ports; > - vser->ports_map = qemu_mallocz(((max_nr_ports + 31) / 32) > + vser->config.max_nr_ports = conf->max_virtserial_ports; > + vser->ports_map = qemu_mallocz(((conf->max_virtserial_ports + 31) / 32) > * sizeof(vser->ports_map[0])); > /* > * Reserve location 0 for a console port for backward compat > diff --git a/hw/virtio-serial.h b/hw/virtio-serial.h > index a308196..de624c3 100644 > --- a/hw/virtio-serial.h > +++ b/hw/virtio-serial.h > @@ -45,6 +45,11 @@ struct virtio_console_control { > uint16_t value; /* Extra information for the key */ > }; > > +struct virtio_serial_conf { > + /* Max. number of ports we can have for a the virtio-serial device */ > + uint32_t max_virtserial_ports; > +}; > + > /* Some events for the internal messages (control packets) */ > #define VIRTIO_CONSOLE_DEVICE_READY 0 > #define VIRTIO_CONSOLE_PORT_ADD 1 > diff --git a/hw/virtio.h b/hw/virtio.h > index 31d16e1..d0920a8 100644 > --- a/hw/virtio.h > +++ b/hw/virtio.h > @@ -195,7 +195,8 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, BlockConf > *conf); > struct virtio_net_conf; > VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf, > struct virtio_net_conf *net); > -VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports); > +typedef struct virtio_serial_conf virtio_serial_conf; > +VirtIODevice *virtio_serial_init(DeviceState *dev, virtio_serial_conf > *serial); > VirtIODevice *virtio_balloon_init(DeviceState *dev); > #ifdef CONFIG_LINUX > VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf *conf);