Message ID | 1414538251-11428-1-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
On 2014/10/29 7:17, Paolo Bonzini wrote: > The virtio-rng backend is currently linked twice, once in > virtio-rng-pci/virtio-rng-ccw and once in virtio-rng-device. This > causes a double unref of the backend when the parent device is unplugged. > > To fix this, make virtio-rng-pci/virtio-rng-ccw use an alias, similar > to what is already being done for the iothread link. > I think s390_virtio_rng should also use an alias for rng backend. Best regards, -Gonglei > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > hw/s390x/virtio-ccw.c | 6 ++---- > hw/virtio/virtio-pci.c | 7 ++----- > 2 files changed, 4 insertions(+), 9 deletions(-) > > diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c > index 1c0d913..ea236c9 100644 > --- a/hw/s390x/virtio-ccw.c > +++ b/hw/s390x/virtio-ccw.c > @@ -1544,10 +1544,8 @@ static void virtio_ccw_rng_instance_init(Object *obj) > > virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), > TYPE_VIRTIO_RNG); > - object_property_add_link(obj, "rng", TYPE_RNG_BACKEND, > - (Object **)&dev->vdev.conf.rng, > - qdev_prop_allow_set_link_before_realize, > - OBJ_PROP_LINK_UNREF_ON_RELEASE, NULL); > + object_property_add_alias(obj, "rng", OBJECT(&dev->vdev), > + "rng", &error_abort); > } > > static Property virtio_ccw_rng_properties[] = { > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index 542fb9e..e490ade 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -1525,11 +1525,8 @@ static void virtio_rng_initfn(Object *obj) > > virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), > TYPE_VIRTIO_RNG); > - object_property_add_link(obj, "rng", TYPE_RNG_BACKEND, > - (Object **)&dev->vdev.conf.rng, > - qdev_prop_allow_set_link_before_realize, > - OBJ_PROP_LINK_UNREF_ON_RELEASE, NULL); > - > + object_property_add_alias(obj, "rng", OBJECT(&dev->vdev), "rng", > + &error_abort); > } > > static const TypeInfo virtio_rng_pci_info = {
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index 1c0d913..ea236c9 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -1544,10 +1544,8 @@ static void virtio_ccw_rng_instance_init(Object *obj) virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG); - object_property_add_link(obj, "rng", TYPE_RNG_BACKEND, - (Object **)&dev->vdev.conf.rng, - qdev_prop_allow_set_link_before_realize, - OBJ_PROP_LINK_UNREF_ON_RELEASE, NULL); + object_property_add_alias(obj, "rng", OBJECT(&dev->vdev), + "rng", &error_abort); } static Property virtio_ccw_rng_properties[] = { diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 542fb9e..e490ade 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1525,11 +1525,8 @@ static void virtio_rng_initfn(Object *obj) virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG); - object_property_add_link(obj, "rng", TYPE_RNG_BACKEND, - (Object **)&dev->vdev.conf.rng, - qdev_prop_allow_set_link_before_realize, - OBJ_PROP_LINK_UNREF_ON_RELEASE, NULL); - + object_property_add_alias(obj, "rng", OBJECT(&dev->vdev), "rng", + &error_abort); } static const TypeInfo virtio_rng_pci_info = {
The virtio-rng backend is currently linked twice, once in virtio-rng-pci/virtio-rng-ccw and once in virtio-rng-device. This causes a double unref of the backend when the parent device is unplugged. To fix this, make virtio-rng-pci/virtio-rng-ccw use an alias, similar to what is already being done for the iothread link. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hw/s390x/virtio-ccw.c | 6 ++---- hw/virtio/virtio-pci.c | 7 ++----- 2 files changed, 4 insertions(+), 9 deletions(-)