Re: [Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug

2013-10-15 Thread Michael S. Tsirkin
On Tue, Oct 08, 2013 at 07:02:44PM +0200, Paolo Bonzini wrote:
 Il 20/09/2013 16:57, Paolo Bonzini ha scritto:
  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.
 
 Michael, I prepared a rebase of
 http://permalink.gmane.org/gmane.comp.emulators.qemu/225985 on top of
 these patches and sent it to Andreas.  My understanding is that he will
 send them to qemu-devel.
 
 Let me know if you want to handle these patches yourself, or I can send
 a pull request for both directly with your Acked-bys.
 
 As to review, I think it can be usefully split as follows:
 
 - 4-10 for Andreas
 
 - 3 for Alex
 
 - 2 11 for you
 
 - 1 for either you or Andreas
 
 Paolo

OK so I can merge this but need Acks from Alex and Andreas, right?

  
  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(-)
  



Re: [Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug

2013-10-08 Thread Paolo Bonzini
Il 22/09/2013 10:08, Paolo Bonzini ha scritto:
 Il 21/09/2013 21:17, Michael S. Tsirkin ha scritto:
 On Fri, Sep 20, 2013 at 04:57:49PM +0200, Paolo Bonzini wrote:
 This series fixes hot-unplug of virtio devices, which can crash due to
 dangling pointer accesses.

 Could you please describe the sequence of steps that makes
 qemu crash?
 
 See patch 11.  I didn't find out why it fails with PCIe but not PCI,
 probably a difference in how malloc reuses freed blocks.

Ping?

Paolo




Re: [Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug

2013-10-08 Thread Paolo Bonzini
Il 20/09/2013 16:57, Paolo Bonzini ha scritto:
 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.

Michael, I prepared a rebase of
http://permalink.gmane.org/gmane.comp.emulators.qemu/225985 on top of
these patches and sent it to Andreas.  My understanding is that he will
send them to qemu-devel.

Let me know if you want to handle these patches yourself, or I can send
a pull request for both directly with your Acked-bys.

As to review, I think it can be usefully split as follows:

- 4-10 for Andreas

- 3 for Alex

- 2 11 for you

- 1 for either you or Andreas

Paolo

 
 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(-)
 




Re: [Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug

2013-09-22 Thread Paolo Bonzini
Il 21/09/2013 21:17, Michael S. Tsirkin ha scritto:
 On Fri, Sep 20, 2013 at 04:57:49PM +0200, Paolo Bonzini wrote:
 This series fixes hot-unplug of virtio devices, which can crash due to
 dangling pointer accesses.
 
 Could you please describe the sequence of steps that makes
 qemu crash?

See patch 11.  I didn't find out why it fails with PCIe but not PCI,
probably a difference in how malloc reuses freed blocks.

Paolo




Re: [Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug

2013-09-21 Thread Michael S. Tsirkin
On Fri, Sep 20, 2013 at 04:57:49PM +0200, Paolo Bonzini wrote:
 This series fixes hot-unplug of virtio devices, which can crash due to
 dangling pointer accesses.

Could you please describe the sequence of steps that makes
qemu crash?

 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



[Qemu-devel] [PATCH 00/11] virtio: cleanup and fix hot-unplug

2013-09-20 Thread Paolo Bonzini
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