summaryrefslogtreecommitdiffstats
path: root/hw/virtio/vhost.c
diff options
context:
space:
mode:
authorMarc-André Lureau2016-07-26 23:14:59 +0200
committerMichael S. Tsirkin2016-07-28 23:33:46 +0200
commit9e0bc24fa57b98561d75ab8f61a419f2d69ec6aa (patch)
treed983d3921652e3016c245b91cd18ea1e597420f9 /hw/virtio/vhost.c
parentvhost: don't assume opaque is a fd, use backend cleanup (diff)
downloadqemu-9e0bc24fa57b98561d75ab8f61a419f2d69ec6aa.tar.gz
qemu-9e0bc24fa57b98561d75ab8f61a419f2d69ec6aa.tar.xz
qemu-9e0bc24fa57b98561d75ab8f61a419f2d69ec6aa.zip
vhost: make vhost_log_put() idempotent
Although not strictly required, it is nice to have vhost_log_put() safely callable multiple times. Clear dev->log* when calling vhost_log_put() to make the function idempotent. This also simplifies a bit the caller work. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/virtio/vhost.c')
-rw-r--r--hw/virtio/vhost.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 429499aefa..9bac1636c5 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -362,6 +362,8 @@ static void vhost_log_put(struct vhost_dev *dev, bool sync)
if (!log) {
return;
}
+ dev->log = NULL;
+ dev->log_size = 0;
--log->refcnt;
if (log->refcnt == 0) {
@@ -710,8 +712,6 @@ static int vhost_migration_log(MemoryListener *listener, int enable)
return r;
}
vhost_log_put(dev, false);
- dev->log = NULL;
- dev->log_size = 0;
} else {
vhost_dev_log_resize(dev, vhost_get_log_size(dev));
r = vhost_dev_set_log(dev, true);
@@ -1328,7 +1328,4 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev)
vhost_log_put(hdev, true);
hdev->started = false;
- hdev->log = NULL;
- hdev->log_size = 0;
}
-