On Wed, Mar 19, 2014 at 4:48 PM, Stefan Hajnoczi <stefa...@redhat.com> wrote: > This RFC is just the beginning. The same problem exists for virtio-net and > other devices. I am looking for feedback before I convert all of virtio. > > The virtio transport/device split is broken as follows: > > 1. The virtio-blk device is never finalized because the transport devices > (virtio-blk-pci and friends) leak the refcount. > > 2. If we fix the refcount leak then we double-free the 'serial' string > property > upon hot unplug since its char* is copied into the virtio-blk device which > has an identical 'serial' qdev property. > > This series solves both of these problems as follows: > > 1. Introduce a qdev child alias property that lets the transport device > forward > qdev property accesses into the virtio device (the child). > > 2. Use qdev child alias properties in transport devices, instead of keeping a > duplicate copy of the VirtIOBlkConf struct. > > 3. Fix the virtio-blk device refcount leak. It's now safe to do this since > the > double-free has been resolved. > > Note about the new qdev child alias property type: I haven't made the alias > fully transparent yet. Perhaps we should hide the alias completely? > $ qemu-system-x86_64 -device virtio-blk-pci,\? > ... > virtio-blk-pci.logical_block_size=ChildAlias <--- should be uint64 or similar > > Stefan Hajnoczi (5): > qdev: add child alias properties > virtio: add child alias properties for virtio-blk > virtio: use child aliases for virtio-blk transport properties > virtio-blk: drop virtio_blk_set_conf() > virtio: fix virtio-blk child refcount in transports > > hw/block/virtio-blk.c | 6 ------ > hw/core/qdev-properties.c | 28 ++++++++++++++++++++++++++++ > hw/s390x/s390-virtio-bus.c | 4 ++-- > hw/s390x/s390-virtio-bus.h | 1 - > hw/s390x/virtio-ccw.c | 6 +++--- > hw/s390x/virtio-ccw.h | 1 - > hw/virtio/virtio-pci.c | 6 +++--- > hw/virtio/virtio-pci.h | 1 - > include/hw/block/block.h | 14 ++++++++++++++ > include/hw/qdev-properties.h | 28 ++++++++++++++++++++++++++++ > include/hw/virtio/virtio-blk.h | 17 ++++++++++++++++- > 11 files changed, 94 insertions(+), 18 deletions(-)
Ping? If you agree with this approach I'd like to get this code merged. We still need to fix the other virtio devices. Stefan