vhost: fix miration during device start
We need to know ring layout to allocate log buffer. So init rings first. Also fixes a theoretical memory-leak-on-error. https://bugzilla.redhat.com/show_bug.cgi?id=615228 Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Tested-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
55e8d1ce6b
commit
d154e0bafb
25
hw/vhost.c
25
hw/vhost.c
@ -659,18 +659,6 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev)
|
||||
r = -errno;
|
||||
goto fail;
|
||||
}
|
||||
if (hdev->log_enabled) {
|
||||
hdev->log_size = vhost_get_log_size(hdev);
|
||||
hdev->log = hdev->log_size ?
|
||||
qemu_mallocz(hdev->log_size * sizeof *hdev->log) : NULL;
|
||||
r = ioctl(hdev->control, VHOST_SET_LOG_BASE,
|
||||
(uint64_t)(unsigned long)hdev->log);
|
||||
if (r < 0) {
|
||||
r = -errno;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < hdev->nvqs; ++i) {
|
||||
r = vhost_virtqueue_init(hdev,
|
||||
vdev,
|
||||
@ -680,6 +668,19 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev)
|
||||
goto fail_vq;
|
||||
}
|
||||
}
|
||||
|
||||
if (hdev->log_enabled) {
|
||||
hdev->log_size = vhost_get_log_size(hdev);
|
||||
hdev->log = hdev->log_size ?
|
||||
qemu_mallocz(hdev->log_size * sizeof *hdev->log) : NULL;
|
||||
r = ioctl(hdev->control, VHOST_SET_LOG_BASE,
|
||||
(uint64_t)(unsigned long)hdev->log);
|
||||
if (r < 0) {
|
||||
r = -errno;
|
||||
goto fail_vq;
|
||||
}
|
||||
}
|
||||
|
||||
hdev->started = true;
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user