mirror of https://gitee.com/openkylin/qemu.git
virtio-serial: create a linked list of all active devices
To ensure two virtserialports don't get added to the system with the same 'name' parameter, we need to access all the ports on all the devices added, and compare the names. We currently don't have a list of all VirtIOSerial devices added to the system. This commit adds a simple linked list in which devices are put when they're initialized, and removed when they go away. Signed-off-by: Amit Shah <amit.shah@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
08ab59770d
commit
a1857ad1ac
|
@ -26,6 +26,10 @@
|
|||
#include "hw/virtio/virtio-serial.h"
|
||||
#include "hw/virtio/virtio-access.h"
|
||||
|
||||
struct VirtIOSerialDevices {
|
||||
QLIST_HEAD(, VirtIOSerial) devices;
|
||||
} vserdevices;
|
||||
|
||||
static VirtIOSerialPort *find_port_by_id(VirtIOSerial *vser, uint32_t id)
|
||||
{
|
||||
VirtIOSerialPort *port;
|
||||
|
@ -983,6 +987,8 @@ static void virtio_serial_device_realize(DeviceState *dev, Error **errp)
|
|||
*/
|
||||
register_savevm(dev, "virtio-console", -1, 3, virtio_serial_save,
|
||||
virtio_serial_load, vser);
|
||||
|
||||
QLIST_INSERT_HEAD(&vserdevices.devices, vser, next);
|
||||
}
|
||||
|
||||
static void virtio_serial_port_class_init(ObjectClass *klass, void *data)
|
||||
|
@ -1011,6 +1017,8 @@ static void virtio_serial_device_unrealize(DeviceState *dev, Error **errp)
|
|||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||
VirtIOSerial *vser = VIRTIO_SERIAL(dev);
|
||||
|
||||
QLIST_REMOVE(vser, next);
|
||||
|
||||
unregister_savevm(dev, "virtio-console", vser);
|
||||
|
||||
g_free(vser->ivqs);
|
||||
|
@ -1035,6 +1043,8 @@ static void virtio_serial_class_init(ObjectClass *klass, void *data)
|
|||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
|
||||
|
||||
QLIST_INIT(&vserdevices.devices);
|
||||
|
||||
dc->props = virtio_serial_properties;
|
||||
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
|
||||
vdc->realize = virtio_serial_device_realize;
|
||||
|
|
|
@ -202,6 +202,8 @@ struct VirtIOSerial {
|
|||
|
||||
QTAILQ_HEAD(, VirtIOSerialPort) ports;
|
||||
|
||||
QLIST_ENTRY(VirtIOSerial) next;
|
||||
|
||||
/* bitmap for identifying active ports */
|
||||
uint32_t *ports_map;
|
||||
|
||||
|
|
Loading…
Reference in New Issue