qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug
@ 2013-09-20 14:57 Paolo Bonzini
  2013-09-20 14:57 ` [Qemu-devel] [PATCH 01/11] virtio-bus: remove vdev field Paolo Bonzini
                   ` (12 more replies)
  0 siblings, 13 replies; 33+ messages in thread
From: Paolo Bonzini @ 2013-09-20 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: fred.konrad, mst

This series fixes hot-unplug of virtio devices, which can crash due to
dangling pointer accesses.

The current implementation supports guest-initiated hot-unplug via the
virtio_bus_destroy_device function, but not hot-unplugging the virtio
device by virtue of unplugging its parent container device.

The problem is that the callback for the bus implementation to cleanup
is placed in the wrong place; it is in virtio_bus_destroy_device, which
should be called by the bus, instead of being somewhere in device code.
We need to have the callback in device code (for example in dc->exit),
so that we invoke it on every unplug action, no matter who starts it.

Thus, the series cleans up plugging and unplugging of virtio devices
so that it does not need any help from the bus (patches 1-4).  It then
stops the virtio devices' overriding of dc->exit, moving their cleanup
code to the new exit callback in VirtioDeviceClass (patches 5-10).
Finally, patch 11 can make virtio-pci implement the device_unplugged
callback.

Something similar is probably needed in virtio-ccw too.  However,
virtio-ccw needs more surgery because it does not include a device_plugged
callback either, so I did not touch it.

Paolo Bonzini (11):
  virtio-bus: remove vdev field
  virtio-pci: remove vdev field
  virtio-ccw: remove vdev field
  virtio-bus: cleanup plug/unplug interface
  virtio-blk: switch exit callback to VirtioDeviceClass
  virtio-serial: switch exit callback to VirtioDeviceClass
  virtio-net: switch exit callback to VirtioDeviceClass
  virtio-scsi: switch exit callback to VirtioDeviceClass
  virtio-balloon: switch exit callback to VirtioDeviceClass
  virtio-rng: switch exit callback to VirtioDeviceClass
  virtio-pci: add device_unplugged callback

 hw/block/virtio-blk.c           |  10 ++--
 hw/char/virtio-serial-bus.c     |  10 ++--
 hw/net/virtio-net.c             |  11 ++--
 hw/s390x/virtio-ccw.c           |  80 +++++++++++++++------------
 hw/s390x/virtio-ccw.h           |   1 -
 hw/scsi/vhost-scsi.c            |  11 ++--
 hw/scsi/virtio-scsi.c           |  15 +++--
 hw/virtio/virtio-balloon.c      |  10 ++--
 hw/virtio/virtio-bus.c          |  81 +++++++++++++++------------
 hw/virtio/virtio-mmio.c         |   9 +--
 hw/virtio/virtio-pci.c          | 119 ++++++++++++++++++++++++----------------
 hw/virtio/virtio-pci.h          |   1 -
 hw/virtio/virtio-rng.c          |  10 ++--
 hw/virtio/virtio.c              |   7 ++-
 include/hw/virtio/virtio-bus.h  |  22 +++++---
 include/hw/virtio/virtio-scsi.h |   2 +-
 include/hw/virtio/virtio.h      |   1 +
 17 files changed, 223 insertions(+), 177 deletions(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2013-10-15 16:47 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-20 14:57 [Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 01/11] virtio-bus: remove vdev field Paolo Bonzini
2013-10-14 16:23   ` [Qemu-devel] [PATCH 12/11] virtio-pci: avoid extra pointer dereferences on fast path Paolo Bonzini
2013-10-15 12:13     ` Frederic Konrad
2013-10-15 12:16       ` Paolo Bonzini
2013-10-15 16:46   ` [Qemu-devel] [PATCH v3 00/12] virtio: cleanup and fix hot-unplug Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 01/12] virtio-ccw: move virtio_ccw_stop_ioeventfd to virtio_ccw_busdev_unplug Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 02/12] virtio-bus: remove vdev field Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 03/12] virtio-ccw: " Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 04/12] virtio-pci: " Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 05/12] virtio-bus: cleanup plug/unplug interface Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 06/12] virtio-blk: switch exit callback to VirtioDeviceClass Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 07/12] virtio-serial: " Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 08/12] virtio-net: " Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 09/12] virtio-scsi: " Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 10/12] virtio-balloon: " Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 11/12] virtio-rng: " Paolo Bonzini
2013-10-15 16:46     ` [Qemu-devel] [PATCH v3 12/12] virtio-pci: add device_unplugged callback Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 02/11] virtio-pci: remove vdev field Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 03/11] virtio-ccw: " Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 04/11] virtio-bus: cleanup plug/unplug interface Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 05/11] virtio-blk: switch exit callback to VirtioDeviceClass Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 06/11] virtio-serial: " Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 07/11] virtio-net: " Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 08/11] virtio-scsi: " Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 09/11] virtio-balloon: " Paolo Bonzini
2013-09-20 14:57 ` [Qemu-devel] [PATCH 10/11] virtio-rng: " Paolo Bonzini
2013-09-20 14:58 ` [Qemu-devel] [PATCH 11/11] virtio-pci: add device_unplugged callback Paolo Bonzini
2013-09-21 19:17 ` [Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug Michael S. Tsirkin
2013-09-22  8:08   ` Paolo Bonzini
2013-10-08 15:45     ` Paolo Bonzini
2013-10-08 17:02 ` Paolo Bonzini
2013-10-15 12:32   ` Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).