You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
4.1 KiB
106 lines
4.1 KiB
1 year ago
|
From 636eb63cbf23b31fc9880528490ac4bef680305b Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||
|
Date: Wed, 25 Jan 2023 08:47:34 +0100
|
||
|
Subject: [PATCH 4/7] vdpa: export vhost_vdpa_set_vring_ready
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
RH-Author: Eugenio Pérez <eperezma@redhat.com>
|
||
|
RH-MergeRequest: 199: CVQ migration support
|
||
|
RH-Jira: RHEL-923
|
||
|
RH-Acked-by: Jason Wang <jasowang@redhat.com>
|
||
|
RH-Acked-by: Cindy Lu <lulu@redhat.com>
|
||
|
RH-Commit: [4/7] 8d1fecec7a993b8b68e268e8783c200c158f5ee0 (eperezmartin/qemu-kvm)
|
||
|
|
||
|
The vhost-vdpa net backend needs to enable vrings in a different order
|
||
|
than default, so export it.
|
||
|
|
||
|
No functional change intended except for tracing, that now includes the
|
||
|
(virtio) index being enabled and the return value of the ioctl.
|
||
|
|
||
|
Still ignoring return value of this function if called from
|
||
|
vhost_vdpa_dev_start, as reorganize calling code around it is out of
|
||
|
the scope of this series.
|
||
|
|
||
|
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||
|
Acked-by: Jason Wang <jasowang@redhat.com>
|
||
|
---
|
||
|
hw/virtio/trace-events | 2 +-
|
||
|
hw/virtio/vhost-vdpa.c | 25 +++++++++++++------------
|
||
|
include/hw/virtio/vhost-vdpa.h | 1 +
|
||
|
3 files changed, 15 insertions(+), 13 deletions(-)
|
||
|
|
||
|
diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
|
||
|
index 300dec8d3e..85b43cd8fe 100644
|
||
|
--- a/hw/virtio/trace-events
|
||
|
+++ b/hw/virtio/trace-events
|
||
|
@@ -48,7 +48,7 @@ vhost_vdpa_set_features(void *dev, uint64_t features) "dev: %p features: 0x%"PRI
|
||
|
vhost_vdpa_get_device_id(void *dev, uint32_t device_id) "dev: %p device_id %"PRIu32
|
||
|
vhost_vdpa_reset_device(void *dev, uint8_t status) "dev: %p status: 0x%"PRIx8
|
||
|
vhost_vdpa_get_vq_index(void *dev, int idx, int vq_idx) "dev: %p idx: %d vq idx: %d"
|
||
|
-vhost_vdpa_set_vring_ready(void *dev) "dev: %p"
|
||
|
+vhost_vdpa_set_vring_ready(void *dev, unsigned i, int r) "dev: %p, idx: %u, r: %d"
|
||
|
vhost_vdpa_dump_config(void *dev, const char *line) "dev: %p %s"
|
||
|
vhost_vdpa_set_config(void *dev, uint32_t offset, uint32_t size, uint32_t flags) "dev: %p offset: %"PRIu32" size: %"PRIu32" flags: 0x%"PRIx32
|
||
|
vhost_vdpa_get_config(void *dev, void *config, uint32_t config_len) "dev: %p config: %p config_len: %"PRIu32
|
||
|
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
|
||
|
index c04f14420d..e4d0101327 100644
|
||
|
--- a/hw/virtio/vhost-vdpa.c
|
||
|
+++ b/hw/virtio/vhost-vdpa.c
|
||
|
@@ -733,18 +733,17 @@ static int vhost_vdpa_get_vq_index(struct vhost_dev *dev, int idx)
|
||
|
return idx;
|
||
|
}
|
||
|
|
||
|
-static int vhost_vdpa_set_vring_ready(struct vhost_dev *dev)
|
||
|
+int vhost_vdpa_set_vring_ready(struct vhost_vdpa *v, unsigned idx)
|
||
|
{
|
||
|
- int i;
|
||
|
- trace_vhost_vdpa_set_vring_ready(dev);
|
||
|
- for (i = 0; i < dev->nvqs; ++i) {
|
||
|
- struct vhost_vring_state state = {
|
||
|
- .index = dev->vq_index + i,
|
||
|
- .num = 1,
|
||
|
- };
|
||
|
- vhost_vdpa_call(dev, VHOST_VDPA_SET_VRING_ENABLE, &state);
|
||
|
- }
|
||
|
- return 0;
|
||
|
+ struct vhost_dev *dev = v->dev;
|
||
|
+ struct vhost_vring_state state = {
|
||
|
+ .index = idx,
|
||
|
+ .num = 1,
|
||
|
+ };
|
||
|
+ int r = vhost_vdpa_call(dev, VHOST_VDPA_SET_VRING_ENABLE, &state);
|
||
|
+
|
||
|
+ trace_vhost_vdpa_set_vring_ready(dev, idx, r);
|
||
|
+ return r;
|
||
|
}
|
||
|
|
||
|
static int vhost_vdpa_set_config_call(struct vhost_dev *dev,
|
||
|
@@ -1155,7 +1154,9 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev, bool started)
|
||
|
if (unlikely(!ok)) {
|
||
|
return -1;
|
||
|
}
|
||
|
- vhost_vdpa_set_vring_ready(dev);
|
||
|
+ for (int i = 0; i < dev->nvqs; ++i) {
|
||
|
+ vhost_vdpa_set_vring_ready(v, dev->vq_index + i);
|
||
|
+ }
|
||
|
} else {
|
||
|
vhost_vdpa_suspend(dev);
|
||
|
vhost_vdpa_svqs_stop(dev);
|
||
|
diff --git a/include/hw/virtio/vhost-vdpa.h b/include/hw/virtio/vhost-vdpa.h
|
||
|
index c278a2a8de..540642d304 100644
|
||
|
--- a/include/hw/virtio/vhost-vdpa.h
|
||
|
+++ b/include/hw/virtio/vhost-vdpa.h
|
||
|
@@ -55,6 +55,7 @@ typedef struct vhost_vdpa {
|
||
|
} VhostVDPA;
|
||
|
|
||
|
int vhost_vdpa_get_iova_range(int fd, struct vhost_vdpa_iova_range *iova_range);
|
||
|
+int vhost_vdpa_set_vring_ready(struct vhost_vdpa *v, unsigned idx);
|
||
|
|
||
|
int vhost_vdpa_dma_map(struct vhost_vdpa *v, uint32_t asid, hwaddr iova,
|
||
|
hwaddr size, void *vaddr, bool readonly);
|
||
|
--
|
||
|
2.39.3
|
||
|
|