[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3/6] vdpa: Allocate SVQ unconditionally
From: |
Eugenio Pérez |
Subject: |
[PATCH 3/6] vdpa: Allocate SVQ unconditionally |
Date: |
Thu, 21 Jul 2022 18:43:28 +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 29f8262e29..95014d3736 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 0/6] Control VQ is the way net devices use to send changes to the device state, like, Eugenio Pérez, 2022/07/21
- [PATCH 1/6] linux-headers: Update kernel headers to v5.19-rc1, Eugenio Pérez, 2022/07/21
- [PATCH 2/6] vdpa: Use v->shadow_vqs_enabled in vhost_vdpa_svqs_start, Eugenio Pérez, 2022/07/21
- [PATCH 4/6] vdpa: Add asid parameter to vhost_vdpa_dma_map/unmap, Eugenio Pérez, 2022/07/21
- [PATCH 5/6] vdpa: Store x-svq parameter in VhostVDPAState, Eugenio Pérez, 2022/07/21
- [PATCH 3/6] vdpa: Allocate SVQ unconditionally,
Eugenio Pérez <=
- [PATCH 6/6] vdpa: Always start CVQ in SVQ mode, Eugenio Pérez, 2022/07/21
- Re: [PATCH 0/6] Control VQ is the way net devices use to send changes to the device state, like, Eugenio Perez Martin, 2022/07/21