Hello, This series converts virtio devices to QOM realize/unrealize. It is intended as base for fixing virtio-net initialization order issues, as reported by Jesse. Only partially tested though.
Note that while VirtioDevice was setting a DeviceClass::exit callback for cleaning up the bus name, this was overwritten by most derived classes. That is fixed as part of this conversion. Similarly, virtio_scsi_common_{init,exit} can be moved to VirtIOSCSICommon now. This has the side-effect that the two SCSI subclasses now perform some initializations after the common SCSI implementation has invoked virtio_bus_plug_device(). Paolo, waiting on your review; deferred to last patch so we can easily drop it. v2 avoids adding class structs to store parent_* fields by introducing an OBJECT_GET_PARENT_CLASS() macro inspired by Peter C. It does the conversion in multiple steps based on an approach by Hervé and tries to separate out refactorings as requested by mst. Available from: https://github.com/afaerber/qemu-cpu/commits/realize-virtio.v2 git://github.com/afaerber/qemu-cpu.git realize-virtio.v2 Regards, Andreas v1 -> v2: * Prepended patch introducing OBJECT_GET_PARENT_CLASS() macro (Peter C.). * Prepended patch allowing empty VirtioDevice::init (Hervé). * Split VirtioDevice QOM realize conversion per device (mst). * Split out cleanups (mst). * Split out propagating unrealization. * Split out VirtIOSCSICommon QOM conversion. * Dropped klass -> oc cleanup since no new variables are added any more. * Split off VirtConsole QOM conversion (an independent type hierarchy). Cc: Anthony Liguori <anth...@codemonkey.ws> Cc: Michael S. Tsirkin <m...@redhat.com> Cc: Peter Crosthwaite <peter.crosthwa...@xilinx.com> Cc: Hervé Poussineau <hpous...@reactos.org> Cc: Paolo Bonzini <pbonz...@redhat.com> Cc: Jesse Larrew <jlar...@linux.vnet.ibm.com> Cc: Frederic Konrad <fred.kon...@greensocs.com> Cc: Hu Tao <hu...@cn.fujitsu.com> Cc: Alexey Kardashevskiy <a...@ozlabs.ru> Andreas Färber (22): object: Add OBJECT_GET_PARENT_CLASS() macro virtio-console: Use exitfn for virtserialport, too virtio-9p-device: Avoid freeing uninitialized memory virtio-blk-dataplane: Improve error reporting virtio: Allow NULL VirtioDeviceClass::init hook virtio-9p: QOM realize preparations virtio-9p: Convert to QOM realize virtio-blk: QOM realize preparations virtio-blk: Convert to QOM realize virtio-serial: QOM realize preparations virtio-serial: Convert to QOM realize virtio-net: QOM realize preparations virtio-net: Convert to QOM realize virtio-balloon: QOM realize preparations virtio-balloon: Convert to QOM realize virtio-rng: QOM realize preparations virtio-rng: Convert to QOM realize virtio-scsi: QOM realize preparations virtio-scsi: Convert to QOM realize virtio: Convert VirtioDevice to QOM realize virtio: Unrealize parent virtio-scsi: Convert virtio_scsi_common_[un]realize to QOM realize hw/9pfs/virtio-9p-device.c | 49 ++++++++++++++------------- hw/9pfs/virtio-9p.h | 2 ++ hw/block/dataplane/virtio-blk.c | 30 +++++++++-------- hw/block/dataplane/virtio-blk.h | 5 +-- hw/block/virtio-blk.c | 53 +++++++++++++++++++---------- hw/char/virtio-console.c | 1 + hw/char/virtio-serial-bus.c | 39 ++++++++++++--------- hw/net/virtio-net.c | 42 ++++++++++++----------- hw/scsi/vhost-scsi.c | 49 +++++++++++++++------------ hw/scsi/virtio-scsi.c | 69 ++++++++++++++++++++++---------------- hw/virtio/virtio-balloon.c | 40 +++++++++++++--------- hw/virtio/virtio-rng.c | 43 +++++++++++++----------- hw/virtio/virtio.c | 20 ++++------- include/hw/virtio/vhost-scsi.h | 2 ++ include/hw/virtio/virtio-balloon.h | 2 ++ include/hw/virtio/virtio-blk.h | 2 ++ include/hw/virtio/virtio-net.h | 2 ++ include/hw/virtio/virtio-rng.h | 2 ++ include/hw/virtio/virtio-scsi.h | 7 ++-- include/hw/virtio/virtio-serial.h | 2 ++ include/hw/virtio/virtio.h | 6 ++-- include/qom/object.h | 10 ++++++ 22 files changed, 282 insertions(+), 195 deletions(-) -- 1.8.1.4