On Thu, Jan 23, 2020 at 3:17 PM David Hildenbrand <da...@redhat.com> wrote: > > On 23.01.20 15:08, Julia Suvorova wrote: > > On Thu, Jan 16, 2020 at 1:36 PM David Hildenbrand <da...@redhat.com> wrote: > >> > >> On 15.01.20 23:40, Julia Suvorova wrote: > >>> Hot-unplug takes some time due to communication with the guest. > >>> Do not change the device while freeing up resources. > >>> > >>> Signed-off-by: Julia Suvorova <jus...@redhat.com> > >>> --- > >>> balloon.c | 2 +- > >>> hw/virtio/virtio-balloon.c | 9 ++++++++- > >>> include/sysemu/balloon.h | 2 +- > >>> 3 files changed, 10 insertions(+), 3 deletions(-) > >>> > >>> diff --git a/balloon.c b/balloon.c > >>> index f104b42961..998ec53a0f 100644 > >>> --- a/balloon.c > >>> +++ b/balloon.c > >>> @@ -119,5 +119,5 @@ void qmp_balloon(int64_t target, Error **errp) > >>> } > >>> > >>> trace_balloon_event(balloon_opaque, target); > >>> - balloon_event_fn(balloon_opaque, target); > >>> + balloon_event_fn(balloon_opaque, target, errp); > >>> } > >>> diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c > >>> index 57f3b9f22d..0fa4e4454b 100644 > >>> --- a/hw/virtio/virtio-balloon.c > >>> +++ b/hw/virtio/virtio-balloon.c > >>> @@ -717,12 +717,19 @@ static void virtio_balloon_stat(void *opaque, > >>> BalloonInfo *info) > >>> VIRTIO_BALLOON_PFN_SHIFT); > >>> } > >>> > >>> -static void virtio_balloon_to_target(void *opaque, ram_addr_t target) > >>> +static void virtio_balloon_to_target(void *opaque, ram_addr_t target, > >>> + Error **errp) > >>> { > >>> + DeviceState *bus_dev = qdev_get_bus_device(DEVICE(opaque)); > >>> VirtIOBalloon *dev = VIRTIO_BALLOON(opaque); > >>> VirtIODevice *vdev = VIRTIO_DEVICE(dev); > >>> ram_addr_t vm_ram_size = get_current_ram_size(); > >>> > >>> + if (bus_dev && bus_dev->pending_deleted_event) { > >>> + error_setg(errp, "Hot-unplug of %s is in progress", vdev->name); > >>> + return; > >>> + } > >>> + > >> > >> How exactly does this help? The guest is free to inflate/deflate > >> whenever it wants. > > > > Guest is aware of hot-unplug start, and virtio driver should not > > initiate any operations. This patch just restricts issuing commands > > from qmp monitor. > > Why shouldn't the guest driver inflate/deflate while memory hotplug is > going on? > > Simple balloon compaction in a Linux guest -> deflate/inflate triggered > in the hypervisor.
QEMU crashes if inflate happens after powering-off PCI slot. Guest is unable to interact with virtio-balloon device then, driver is unloaded. But inflate can still happen if initiated from qmp. Best regards, Julia Suvorova.