diff options
author | Pavel Butsykin <pbutsykin@virtuozzo.com> | 2017-09-19 15:07:33 +0300 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-09-21 11:51:49 +0200 |
commit | 55289fb036481396466d7825fa01d829c891108c (patch) | |
tree | 3a3913a0815b31982f08562fd1fefb3a4b01b509 /hw/char/virtio-serial-bus.c | |
parent | b62b7ed0fc9c58e373b8946c9bd2e193be98dae6 (diff) | |
download | qemu-55289fb036481396466d7825fa01d829c891108c.zip qemu-55289fb036481396466d7825fa01d829c891108c.tar.gz qemu-55289fb036481396466d7825fa01d829c891108c.tar.bz2 |
virtio-serial: add enable_backend callback
We should guarantee that RAM will not be modified while VM has a stopped
state, otherwise it can lead to negative consequences during post-copy
migration. In RUN_STATE_FINISH_MIGRATE step, it's expected that RAM on
source side will not be modified as this could lead to non-consistent vm state
on the destination side. Also RAM access during postcopy-ram migration with
enabled release-ram capability can lead to sad consequences.
Let's add enable_backend() callback to avoid undesirable virtioqueue changes
in the guest memory.
Signed-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com>
Message-Id: <20170919120733.22020-1-pbutsykin@virtuozzo.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'hw/char/virtio-serial-bus.c')
-rw-r--r-- | hw/char/virtio-serial-bus.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c index 17a1bb0..9470bd7 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -637,6 +637,13 @@ static void set_status(VirtIODevice *vdev, uint8_t status) if (!(status & VIRTIO_CONFIG_S_DRIVER_OK)) { guest_reset(vser); } + + QTAILQ_FOREACH(port, &vser->ports, next) { + VirtIOSerialPortClass *vsc = VIRTIO_SERIAL_PORT_GET_CLASS(port); + if (vsc->enable_backend) { + vsc->enable_backend(port, vdev->vm_running); + } + } } static void vser_reset(VirtIODevice *vdev) |