[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH master/0.14 1/2] virtio-serial: Use a struct to
From: |
Alex Williamson |
Subject: |
[Qemu-devel] Re: [PATCH master/0.14 1/2] virtio-serial: Use a struct to pass config information from proxy |
Date: |
Mon, 07 Feb 2011 08:46:36 -0700 |
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 <address@hidden>
> ---
> 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 <address@hidden>
> 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);