[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 3/7] vdpa: Allocate SVQ unconditionally
From: |
Eugenio Pérez |
Subject: |
[PATCH v2 3/7] vdpa: Allocate SVQ unconditionally |
Date: |
Fri, 22 Jul 2022 15:43:14 +0200 |
SVQ may run or not in a device depending on runtime conditions (for
example, if the device can move CVQ to its own group or not).
Allocate the resources unconditionally, and decide later if to use them
or not.
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
hw/virtio/vhost-vdpa.c | 33 +++++++++++++++------------------
1 file changed, 15 insertions(+), 18 deletions(-)
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index 897e1fdd47..e1ed56b26d 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -400,6 +400,21 @@ static int vhost_vdpa_init_svq(struct vhost_dev *hdev,
struct vhost_vdpa *v,
int r;
bool ok;
+ shadow_vqs = g_ptr_array_new_full(hdev->nvqs, vhost_svq_free);
+ for (unsigned n = 0; n < hdev->nvqs; ++n) {
+ g_autoptr(VhostShadowVirtqueue) svq;
+
+ svq = vhost_svq_new(v->iova_tree, v->shadow_vq_ops,
+ v->shadow_vq_ops_opaque);
+ if (unlikely(!svq)) {
+ error_setg(errp, "Cannot create svq %u", n);
+ return -1;
+ }
+ g_ptr_array_add(shadow_vqs, g_steal_pointer(&svq));
+ }
+
+ v->shadow_vqs = g_steal_pointer(&shadow_vqs);
+
if (!v->shadow_vqs_enabled) {
return 0;
}
@@ -416,20 +431,6 @@ static int vhost_vdpa_init_svq(struct vhost_dev *hdev,
struct vhost_vdpa *v,
return -1;
}
- shadow_vqs = g_ptr_array_new_full(hdev->nvqs, vhost_svq_free);
- for (unsigned n = 0; n < hdev->nvqs; ++n) {
- g_autoptr(VhostShadowVirtqueue) svq;
-
- svq = vhost_svq_new(v->iova_tree, v->shadow_vq_ops,
- v->shadow_vq_ops_opaque);
- if (unlikely(!svq)) {
- error_setg(errp, "Cannot create svq %u", n);
- return -1;
- }
- g_ptr_array_add(shadow_vqs, g_steal_pointer(&svq));
- }
-
- v->shadow_vqs = g_steal_pointer(&shadow_vqs);
return 0;
}
@@ -570,10 +571,6 @@ static void vhost_vdpa_svq_cleanup(struct vhost_dev *dev)
struct vhost_vdpa *v = dev->opaque;
size_t idx;
- if (!v->shadow_vqs) {
- return;
- }
-
for (idx = 0; idx < v->shadow_vqs->len; ++idx) {
vhost_svq_stop(g_ptr_array_index(v->shadow_vqs, idx));
}
--
2.31.1
- [PATCH v2 0/7] ASID support in vhost-vdpa net, Eugenio Pérez, 2022/07/22
- [PATCH v2 1/7] linux-headers: Update kernel headers to v5.19-rc1, Eugenio Pérez, 2022/07/22
- [PATCH v2 3/7] vdpa: Allocate SVQ unconditionally,
Eugenio Pérez <=
- [PATCH v2 2/7] vdpa: Use v->shadow_vqs_enabled in vhost_vdpa_svqs_start & stop, Eugenio Pérez, 2022/07/22
- [PATCH v2 5/7] vdpa: Store x-svq parameter in VhostVDPAState, Eugenio Pérez, 2022/07/22
- [PATCH v2 6/7] vhost_net: Add NetClientInfo prepare callback, Eugenio Pérez, 2022/07/22
- [PATCH v2 4/7] vdpa: Add asid parameter to vhost_vdpa_dma_map/unmap, Eugenio Pérez, 2022/07/22
- [PATCH v2 7/7] vdpa: Always start CVQ in SVQ mode, Eugenio Pérez, 2022/07/22