diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2013-09-20 13:59:08 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-12-09 21:46:48 +0100 |
commit | 5e96f5d2f8d2696ef7d2d8d7282c18fa6023470b (patch) | |
tree | e90b205656defa4bd7f36a22e37730ff060b2afd /hw/virtio/virtio.c | |
parent | a3fc66d9fd37acbfcee013692246a8ae42bd93bb (diff) |
virtio-bus: cleanup plug/unplug interface
Right now we have these pairs:
- virtio_bus_plug_device/virtio_bus_destroy_device. The first
takes a VirtIODevice, the second takes a VirtioBusState
- device_plugged/device_unplug callbacks in the VirtioBusClass
(here it's just the naming that is inconsistent)
- virtio_bus_destroy_device is not called by anyone (and since
it calls qdev_free, it would be called by the proxies---but
then the callback is useless since the proxies can do whatever
they want before calling virtio_bus_destroy_device)
And there is a k->init but no k->exit, hence virtio_device_exit is
overwritten by subclasses (except virtio-9p). This cleans it up by:
- renaming the device_unplug callback to device_unplugged
- renaming virtio_bus_plug_device to virtio_bus_device_plugged,
matching the callback name
- renaming virtio_bus_destroy_device to virtio_bus_device_unplugged,
removing the qdev_free, making it take a VirtIODevice and calling it
from virtio_device_exit
- adding a k->exit callback
virtio_device_exit is still overwritten, the next patches will fix that.
Cc: qemu-stable@nongnu.org
Acked-by: Andreas Faerber <afaerber@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'hw/virtio/virtio.c')
-rw-r--r-- | hw/virtio/virtio.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 2f1e73bc75..965b2c0233 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -1158,14 +1158,19 @@ static int virtio_device_init(DeviceState *qdev) if (k->init(vdev) < 0) { return -1; } - virtio_bus_plug_device(vdev); + virtio_bus_device_plugged(vdev); return 0; } static int virtio_device_exit(DeviceState *qdev) { VirtIODevice *vdev = VIRTIO_DEVICE(qdev); + VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(qdev); + virtio_bus_device_unplugged(vdev); + if (k->exit) { + k->exit(vdev); + } if (vdev->bus_name) { g_free(vdev->bus_name); vdev->bus_name = NULL; |