[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 2/2] vhost: double check used memslots number
From: |
Jay Zhou |
Subject: |
[Qemu-devel] [PATCH v2 2/2] vhost: double check used memslots number |
Date: |
Fri, 15 Dec 2017 16:45:55 +0800 |
If the VM already has N(N>8) available memory slots for vhost user,
the VM will be crashed in vhost_user_set_mem_table if we try to
hotplug the first vhost user NIC.
This patch checks if memslots number exceeded or not after updating
vhost_user_used_memslots.
Signed-off-by: Jay Zhou <address@hidden>
---
hw/virtio/vhost.c | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 59a32e9..e45f5e2 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -1234,6 +1234,18 @@ static void vhost_virtqueue_cleanup(struct
vhost_virtqueue *vq)
event_notifier_cleanup(&vq->masked_notifier);
}
+static bool vhost_dev_used_memslots_is_exceeded(struct vhost_dev *hdev)
+{
+ if (hdev->vhost_ops->vhost_get_used_memslots() >
+ hdev->vhost_ops->vhost_backend_memslots_limit(hdev)) {
+ error_report("vhost backend memory slots limit is less"
+ " than current number of present memory slots");
+ return true;
+ }
+
+ return false;
+}
+
int vhost_dev_init(struct vhost_dev *hdev, void *opaque,
VhostBackendType backend_type, uint32_t busyloop_timeout)
{
@@ -1252,10 +1264,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaque,
goto fail;
}
- if (hdev->vhost_ops->vhost_get_used_memslots() >
- hdev->vhost_ops->vhost_backend_memslots_limit(hdev)) {
- error_report("vhost backend memory slots limit is less"
- " than current number of present memory slots");
+ if (vhost_dev_used_memslots_is_exceeded(hdev)) {
r = -1;
goto fail;
}
@@ -1341,6 +1350,16 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaque,
hdev->memory_changed = false;
memory_listener_register(&hdev->memory_listener, &address_space_memory);
QLIST_INSERT_HEAD(&vhost_devices, hdev, entry);
+
+ if (vhost_dev_used_memslots_is_exceeded(hdev)) {
+ r = -1;
+ if (busyloop_timeout) {
+ goto fail_busyloop;
+ } else {
+ goto fail;
+ }
+ }
+
return 0;
fail_busyloop:
--
1.8.3.1
[Qemu-devel] [PATCH v2 2/2] vhost: double check used memslots number,
Jay Zhou <=
Re: [Qemu-devel] [PATCH v2 2/2] vhost: double check used memslots number, Zhoujian (jay), 2017/12/23
Re: [Qemu-devel] [PATCH v2 0/2] vhost: two fixes, no-reply, 2017/12/16
Re: [Qemu-devel] [PATCH v2 0/2] vhost: two fixes, Michael S. Tsirkin, 2017/12/19