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

Reply via email to