On Tue, Sep 09, 2014 at 02:35:02PM +0800, arei.gong...@huawei.com wrote: > From: Gonglei <arei.gong...@huawei.com> > > 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.gong...@huawei.com> > --- > hw/s390x/s390-virtio-bus.c | 3 +-- > hw/s390x/virtio-ccw.c | 3 +-- > hw/virtio/virtio-pci.c | 3 +-- > 3 files changed, 3 insertions(+), 6 deletions(-) > > diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c > index 6b6fb61..5b5d595 100644 > --- a/hw/s390x/s390-virtio-bus.c > +++ b/hw/s390x/s390-virtio-bus.c > @@ -161,6 +161,7 @@ static void s390_virtio_net_instance_init(Object *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); > + qdev_alias_all_properties(DEVICE(&dev->vdev), obj); > } > > 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 *******************/ > > static Property s390_virtio_net_properties[] = { > - DEFINE_NIC_PROPERTIES(VirtIONetS390, vdev.nic_conf), > DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device, host_features), > DEFINE_VIRTIO_NET_FEATURES(VirtIOS390Device, host_features), > - DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetS390, vdev.net_conf), > DEFINE_PROP_END_OF_LIST(), > }; > > diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c > index 33a1d86..7d67577 100644 > --- a/hw/s390x/virtio-ccw.c > +++ b/hw/s390x/virtio-ccw.c > @@ -794,6 +794,7 @@ static void virtio_ccw_net_instance_init(Object *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); > + qdev_alias_all_properties(DEVICE(&dev->vdev), obj); > } > > 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[] = { > DEFINE_PROP_STRING("devno", VirtioCcwDevice, bus_id), > 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, > VIRTIO_CCW_FLAG_USE_IOEVENTFD_BIT, true), > DEFINE_PROP_END_OF_LIST(), > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index ddb5da1..6722156 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -1414,8 +1414,6 @@ static Property virtio_net_properties[] = { > VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false), > DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), > 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(), > }; > > @@ -1456,6 +1454,7 @@ static void virtio_net_pci_instance_init(Object *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); > + qdev_alias_all_properties(DEVICE(&dev->vdev), obj); > } > > static const TypeInfo virtio_net_pci_info = {
Does -device virtio-net-pci,? still list e.g. the mac property with this patch? > -- > 1.7.12.4 >