virtio: add a wrapper for virtio-backend initialization
For better code sharing, add a helper function that handles reference counting of the virtio backend for virtio proxy devices. Cc: Cornelia Huck <cornelia.huck@de.ibm.com> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Gonglei <arei.gonglei@huawei.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									8f3d60e568
								
							
						
					
					
						commit
						c8075caf19
					
				| 
						 | 
					@ -159,10 +159,9 @@ static int s390_virtio_net_init(VirtIOS390Device *s390_dev)
 | 
				
			||||||
static void s390_virtio_net_instance_init(Object *obj)
 | 
					static void s390_virtio_net_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIONetS390 *dev = VIRTIO_NET_S390(obj);
 | 
					    VirtIONetS390 *dev = VIRTIO_NET_S390(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_NET);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int s390_virtio_blk_init(VirtIOS390Device *s390_dev)
 | 
					static int s390_virtio_blk_init(VirtIOS390Device *s390_dev)
 | 
				
			||||||
| 
						 | 
					@ -179,10 +178,9 @@ static int s390_virtio_blk_init(VirtIOS390Device *s390_dev)
 | 
				
			||||||
static void s390_virtio_blk_instance_init(Object *obj)
 | 
					static void s390_virtio_blk_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOBlkS390 *dev = VIRTIO_BLK_S390(obj);
 | 
					    VirtIOBlkS390 *dev = VIRTIO_BLK_S390(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_BLK);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
    object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev),"iothread",
 | 
					    object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev),"iothread",
 | 
				
			||||||
                              &error_abort);
 | 
					                              &error_abort);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -224,10 +222,9 @@ static int s390_virtio_serial_init(VirtIOS390Device *s390_dev)
 | 
				
			||||||
static void s390_virtio_serial_instance_init(Object *obj)
 | 
					static void s390_virtio_serial_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOSerialS390 *dev = VIRTIO_SERIAL_S390(obj);
 | 
					    VirtIOSerialS390 *dev = VIRTIO_SERIAL_S390(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SERIAL);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					                                TYPE_VIRTIO_SERIAL);
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int s390_virtio_scsi_init(VirtIOS390Device *s390_dev)
 | 
					static int s390_virtio_scsi_init(VirtIOS390Device *s390_dev)
 | 
				
			||||||
| 
						 | 
					@ -258,10 +255,9 @@ static int s390_virtio_scsi_init(VirtIOS390Device *s390_dev)
 | 
				
			||||||
static void s390_virtio_scsi_instance_init(Object *obj)
 | 
					static void s390_virtio_scsi_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOSCSIS390 *dev = VIRTIO_SCSI_S390(obj);
 | 
					    VirtIOSCSIS390 *dev = VIRTIO_SCSI_S390(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_SCSI);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_VHOST_SCSI
 | 
					#ifdef CONFIG_VHOST_SCSI
 | 
				
			||||||
| 
						 | 
					@ -281,10 +277,9 @@ static int s390_vhost_scsi_init(VirtIOS390Device *s390_dev)
 | 
				
			||||||
static void s390_vhost_scsi_instance_init(Object *obj)
 | 
					static void s390_vhost_scsi_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VHostSCSIS390 *dev = VHOST_SCSI_S390(obj);
 | 
					    VHostSCSIS390 *dev = VHOST_SCSI_S390(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VHOST_SCSI);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -309,10 +304,9 @@ static int s390_virtio_rng_init(VirtIOS390Device *s390_dev)
 | 
				
			||||||
static void s390_virtio_rng_instance_init(Object *obj)
 | 
					static void s390_virtio_rng_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIORNGS390 *dev = VIRTIO_RNG_S390(obj);
 | 
					    VirtIORNGS390 *dev = VIRTIO_RNG_S390(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					                                TYPE_VIRTIO_RNG);
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					 | 
				
			||||||
    object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
 | 
					    object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
 | 
				
			||||||
                             (Object **)&dev->vdev.conf.rng,
 | 
					                             (Object **)&dev->vdev.conf.rng,
 | 
				
			||||||
                             qdev_prop_allow_set_link_before_realize,
 | 
					                             qdev_prop_allow_set_link_before_realize,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -792,10 +792,9 @@ static int virtio_ccw_net_init(VirtioCcwDevice *ccw_dev)
 | 
				
			||||||
static void virtio_ccw_net_instance_init(Object *obj)
 | 
					static void virtio_ccw_net_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIONetCcw *dev = VIRTIO_NET_CCW(obj);
 | 
					    VirtIONetCcw *dev = VIRTIO_NET_CCW(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_NET);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int virtio_ccw_blk_init(VirtioCcwDevice *ccw_dev)
 | 
					static int virtio_ccw_blk_init(VirtioCcwDevice *ccw_dev)
 | 
				
			||||||
| 
						 | 
					@ -813,10 +812,9 @@ static int virtio_ccw_blk_init(VirtioCcwDevice *ccw_dev)
 | 
				
			||||||
static void virtio_ccw_blk_instance_init(Object *obj)
 | 
					static void virtio_ccw_blk_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOBlkCcw *dev = VIRTIO_BLK_CCW(obj);
 | 
					    VirtIOBlkCcw *dev = VIRTIO_BLK_CCW(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_BLK);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
    object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev),"iothread",
 | 
					    object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev),"iothread",
 | 
				
			||||||
                              &error_abort);
 | 
					                              &error_abort);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -850,10 +848,9 @@ static int virtio_ccw_serial_init(VirtioCcwDevice *ccw_dev)
 | 
				
			||||||
static void virtio_ccw_serial_instance_init(Object *obj)
 | 
					static void virtio_ccw_serial_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtioSerialCcw *dev = VIRTIO_SERIAL_CCW(obj);
 | 
					    VirtioSerialCcw *dev = VIRTIO_SERIAL_CCW(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SERIAL);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					                                TYPE_VIRTIO_SERIAL);
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int virtio_ccw_balloon_init(VirtioCcwDevice *ccw_dev)
 | 
					static int virtio_ccw_balloon_init(VirtioCcwDevice *ccw_dev)
 | 
				
			||||||
| 
						 | 
					@ -938,10 +935,9 @@ static int virtio_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
 | 
				
			||||||
static void virtio_ccw_scsi_instance_init(Object *obj)
 | 
					static void virtio_ccw_scsi_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOSCSICcw *dev = VIRTIO_SCSI_CCW(obj);
 | 
					    VirtIOSCSICcw *dev = VIRTIO_SCSI_CCW(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_SCSI);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_VHOST_SCSI
 | 
					#ifdef CONFIG_VHOST_SCSI
 | 
				
			||||||
| 
						 | 
					@ -961,10 +957,9 @@ static int vhost_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
 | 
				
			||||||
static void vhost_ccw_scsi_instance_init(Object *obj)
 | 
					static void vhost_ccw_scsi_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VHostSCSICcw *dev = VHOST_SCSI_CCW(obj);
 | 
					    VHostSCSICcw *dev = VHOST_SCSI_CCW(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VHOST_SCSI);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1540,10 +1535,9 @@ static const TypeInfo vhost_ccw_scsi = {
 | 
				
			||||||
static void virtio_ccw_rng_instance_init(Object *obj)
 | 
					static void virtio_ccw_rng_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIORNGCcw *dev = VIRTIO_RNG_CCW(obj);
 | 
					    VirtIORNGCcw *dev = VIRTIO_RNG_CCW(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					                                TYPE_VIRTIO_RNG);
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					 | 
				
			||||||
    object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
 | 
					    object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
 | 
				
			||||||
                             (Object **)&dev->vdev.conf.rng,
 | 
					                             (Object **)&dev->vdev.conf.rng,
 | 
				
			||||||
                             qdev_prop_allow_set_link_before_realize,
 | 
					                             qdev_prop_allow_set_link_before_realize,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -947,10 +947,9 @@ static void virtio_9p_pci_class_init(ObjectClass *klass, void *data)
 | 
				
			||||||
static void virtio_9p_pci_instance_init(Object *obj)
 | 
					static void virtio_9p_pci_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    V9fsPCIState *dev = VIRTIO_9P_PCI(obj);
 | 
					    V9fsPCIState *dev = VIRTIO_9P_PCI(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_9P);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					                                TYPE_VIRTIO_9P);
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const TypeInfo virtio_9p_pci_info = {
 | 
					static const TypeInfo virtio_9p_pci_info = {
 | 
				
			||||||
| 
						 | 
					@ -1112,10 +1111,9 @@ static void virtio_blk_pci_class_init(ObjectClass *klass, void *data)
 | 
				
			||||||
static void virtio_blk_pci_instance_init(Object *obj)
 | 
					static void virtio_blk_pci_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOBlkPCI *dev = VIRTIO_BLK_PCI(obj);
 | 
					    VirtIOBlkPCI *dev = VIRTIO_BLK_PCI(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_BLK);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
    object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev),"iothread",
 | 
					    object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev),"iothread",
 | 
				
			||||||
                              &error_abort);
 | 
					                              &error_abort);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1185,10 +1183,9 @@ static void virtio_scsi_pci_class_init(ObjectClass *klass, void *data)
 | 
				
			||||||
static void virtio_scsi_pci_instance_init(Object *obj)
 | 
					static void virtio_scsi_pci_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOSCSIPCI *dev = VIRTIO_SCSI_PCI(obj);
 | 
					    VirtIOSCSIPCI *dev = VIRTIO_SCSI_PCI(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_SCSI);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const TypeInfo virtio_scsi_pci_info = {
 | 
					static const TypeInfo virtio_scsi_pci_info = {
 | 
				
			||||||
| 
						 | 
					@ -1242,10 +1239,9 @@ static void vhost_scsi_pci_class_init(ObjectClass *klass, void *data)
 | 
				
			||||||
static void vhost_scsi_pci_instance_init(Object *obj)
 | 
					static void vhost_scsi_pci_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VHostSCSIPCI *dev = VHOST_SCSI_PCI(obj);
 | 
					    VHostSCSIPCI *dev = VHOST_SCSI_PCI(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VHOST_SCSI);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const TypeInfo vhost_scsi_pci_info = {
 | 
					static const TypeInfo vhost_scsi_pci_info = {
 | 
				
			||||||
| 
						 | 
					@ -1408,10 +1404,9 @@ static void virtio_serial_pci_class_init(ObjectClass *klass, void *data)
 | 
				
			||||||
static void virtio_serial_pci_instance_init(Object *obj)
 | 
					static void virtio_serial_pci_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOSerialPCI *dev = VIRTIO_SERIAL_PCI(obj);
 | 
					    VirtIOSerialPCI *dev = VIRTIO_SERIAL_PCI(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SERIAL);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					                                TYPE_VIRTIO_SERIAL);
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const TypeInfo virtio_serial_pci_info = {
 | 
					static const TypeInfo virtio_serial_pci_info = {
 | 
				
			||||||
| 
						 | 
					@ -1467,10 +1462,9 @@ static void virtio_net_pci_class_init(ObjectClass *klass, void *data)
 | 
				
			||||||
static void virtio_net_pci_instance_init(Object *obj)
 | 
					static void virtio_net_pci_instance_init(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIONetPCI *dev = VIRTIO_NET_PCI(obj);
 | 
					    VirtIONetPCI *dev = VIRTIO_NET_PCI(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					                                TYPE_VIRTIO_NET);
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const TypeInfo virtio_net_pci_info = {
 | 
					static const TypeInfo virtio_net_pci_info = {
 | 
				
			||||||
| 
						 | 
					@ -1523,10 +1517,9 @@ static void virtio_rng_pci_class_init(ObjectClass *klass, void *data)
 | 
				
			||||||
static void virtio_rng_initfn(Object *obj)
 | 
					static void virtio_rng_initfn(Object *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIORngPCI *dev = VIRTIO_RNG_PCI(obj);
 | 
					    VirtIORngPCI *dev = VIRTIO_RNG_PCI(obj);
 | 
				
			||||||
    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
 | 
					
 | 
				
			||||||
    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 | 
					    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
 | 
				
			||||||
    qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
 | 
					                                TYPE_VIRTIO_RNG);
 | 
				
			||||||
    object_unref(OBJECT(&dev->vdev));
 | 
					 | 
				
			||||||
    object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
 | 
					    object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
 | 
				
			||||||
                             (Object **)&dev->vdev.conf.rng,
 | 
					                             (Object **)&dev->vdev.conf.rng,
 | 
				
			||||||
                             qdev_prop_allow_set_link_before_realize,
 | 
					                             qdev_prop_allow_set_link_before_realize,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1123,6 +1123,17 @@ static void virtio_vmstate_change(void *opaque, int running, RunState state)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void virtio_instance_init_common(Object *proxy_obj, void *data,
 | 
				
			||||||
 | 
					                                 size_t vdev_size, const char *vdev_name)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    DeviceState *vdev = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    object_initialize(vdev, vdev_size, vdev_name);
 | 
				
			||||||
 | 
					    object_property_add_child(proxy_obj, "virtio-backend", OBJECT(vdev), NULL);
 | 
				
			||||||
 | 
					    object_unref(OBJECT(vdev));
 | 
				
			||||||
 | 
					    qdev_alias_all_properties(vdev, proxy_obj);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void virtio_init(VirtIODevice *vdev, const char *name,
 | 
					void virtio_init(VirtIODevice *vdev, const char *name,
 | 
				
			||||||
                 uint16_t device_id, size_t config_size)
 | 
					                 uint16_t device_id, size_t config_size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -161,6 +161,9 @@ typedef struct VirtioDeviceClass {
 | 
				
			||||||
    int (*load)(VirtIODevice *vdev, QEMUFile *f, int version_id);
 | 
					    int (*load)(VirtIODevice *vdev, QEMUFile *f, int version_id);
 | 
				
			||||||
} VirtioDeviceClass;
 | 
					} VirtioDeviceClass;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void virtio_instance_init_common(Object *proxy_obj, void *data,
 | 
				
			||||||
 | 
					                                 size_t vdev_size, const char *vdev_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void virtio_init(VirtIODevice *vdev, const char *name,
 | 
					void virtio_init(VirtIODevice *vdev, const char *name,
 | 
				
			||||||
                         uint16_t device_id, size_t config_size);
 | 
					                         uint16_t device_id, size_t config_size);
 | 
				
			||||||
void virtio_cleanup(VirtIODevice *vdev);
 | 
					void virtio_cleanup(VirtIODevice *vdev);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue