virtio-net: use aliases instead of duplicate qdev properties
virtio-net-pci, virtio-net-s390, and virtio-net-ccw all duplicate the qdev properties of their VirtIONet child. This approach does not work well with string or pointer properties since we must be careful about leaking or double-freeing them. Use the QOM alias property to forward property accesses to the VirtIONet child. This way no duplication is necessary. Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
20e6dca1df
commit
7779edfeb1
@ -161,6 +161,7 @@ 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_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
|
||||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||||
|
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)
|
||||||
@ -493,10 +494,8 @@ static unsigned virtio_s390_get_features(DeviceState *d)
|
|||||||
/**************** S390 Virtio Bus Device Descriptions *******************/
|
/**************** S390 Virtio Bus Device Descriptions *******************/
|
||||||
|
|
||||||
static Property s390_virtio_net_properties[] = {
|
static Property s390_virtio_net_properties[] = {
|
||||||
DEFINE_NIC_PROPERTIES(VirtIONetS390, vdev.nic_conf),
|
|
||||||
DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device, host_features),
|
DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device, host_features),
|
||||||
DEFINE_VIRTIO_NET_FEATURES(VirtIOS390Device, host_features),
|
DEFINE_VIRTIO_NET_FEATURES(VirtIOS390Device, host_features),
|
||||||
DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetS390, vdev.net_conf),
|
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -794,6 +794,7 @@ 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_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
|
||||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||||
|
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)
|
||||||
@ -1374,8 +1375,6 @@ static int virtio_ccw_load_config(DeviceState *d, QEMUFile *f)
|
|||||||
static Property virtio_ccw_net_properties[] = {
|
static Property virtio_ccw_net_properties[] = {
|
||||||
DEFINE_PROP_STRING("devno", VirtioCcwDevice, bus_id),
|
DEFINE_PROP_STRING("devno", VirtioCcwDevice, bus_id),
|
||||||
DEFINE_VIRTIO_NET_FEATURES(VirtioCcwDevice, host_features[0]),
|
DEFINE_VIRTIO_NET_FEATURES(VirtioCcwDevice, host_features[0]),
|
||||||
DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetCcw, vdev.net_conf),
|
|
||||||
DEFINE_NIC_PROPERTIES(VirtIONetCcw, vdev.nic_conf),
|
|
||||||
DEFINE_PROP_BIT("ioeventfd", VirtioCcwDevice, flags,
|
DEFINE_PROP_BIT("ioeventfd", VirtioCcwDevice, flags,
|
||||||
VIRTIO_CCW_FLAG_USE_IOEVENTFD_BIT, true),
|
VIRTIO_CCW_FLAG_USE_IOEVENTFD_BIT, true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
|
@ -1425,8 +1425,6 @@ static Property virtio_net_properties[] = {
|
|||||||
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false),
|
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false),
|
||||||
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
|
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
|
||||||
DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features),
|
DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features),
|
||||||
DEFINE_NIC_PROPERTIES(VirtIONetPCI, vdev.nic_conf),
|
|
||||||
DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetPCI, vdev.net_conf),
|
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1467,6 +1465,7 @@ 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_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
|
||||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||||
|
qdev_alias_all_properties(DEVICE(&dev->vdev), obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo virtio_net_pci_info = {
|
static const TypeInfo virtio_net_pci_info = {
|
||||||
|
Loading…
Reference in New Issue
Block a user