[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 38/51] vdpa-dev: get iova range explicitly
From: |
Michael S. Tsirkin |
Subject: |
[PULL 38/51] vdpa-dev: get iova range explicitly |
Date: |
Thu, 5 Jan 2023 04:16:26 -0500 |
From: Longpeng <longpeng2@huawei.com>
In commit a585fad26b ("vdpa: request iova_range only once") we remove
GET_IOVA_RANGE form vhost_vdpa_init, the generic vdpa device will start
without iova_range populated, so the device won't work. Let's call
GET_IOVA_RANGE ioctl explicitly.
Fixes: a585fad26b2e6ccc ("vdpa: request iova_range only once")
Signed-off-by: Longpeng <longpeng2@huawei.com>
Message-Id: <20221224114848.3062-2-longpeng2@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
---
include/hw/virtio/vhost-vdpa.h | 2 ++
hw/virtio/vdpa-dev.c | 9 +++++++++
hw/virtio/vhost-vdpa.c | 7 +++++++
net/vhost-vdpa.c | 8 --------
4 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/include/hw/virtio/vhost-vdpa.h b/include/hw/virtio/vhost-vdpa.h
index 45b969a311..7997f09a8d 100644
--- a/include/hw/virtio/vhost-vdpa.h
+++ b/include/hw/virtio/vhost-vdpa.h
@@ -51,6 +51,8 @@ typedef struct vhost_vdpa {
VhostVDPAHostNotifier notifier[VIRTIO_QUEUE_MAX];
} VhostVDPA;
+int vhost_vdpa_get_iova_range(int fd, struct vhost_vdpa_iova_range
*iova_range);
+
int vhost_vdpa_dma_map(struct vhost_vdpa *v, uint32_t asid, hwaddr iova,
hwaddr size, void *vaddr, bool readonly);
int vhost_vdpa_dma_unmap(struct vhost_vdpa *v, uint32_t asid, hwaddr iova,
diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c
index db6ba61152..01b41eb0f1 100644
--- a/hw/virtio/vdpa-dev.c
+++ b/hw/virtio/vdpa-dev.c
@@ -53,6 +53,7 @@ static void vhost_vdpa_device_realize(DeviceState *dev, Error
**errp)
{
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
VhostVdpaDevice *v = VHOST_VDPA_DEVICE(vdev);
+ struct vhost_vdpa_iova_range iova_range;
uint16_t max_queue_size;
struct vhost_virtqueue *vqs;
int i, ret;
@@ -108,6 +109,14 @@ static void vhost_vdpa_device_realize(DeviceState *dev,
Error **errp)
v->dev.backend_features = 0;
v->started = false;
+ ret = vhost_vdpa_get_iova_range(v->vhostfd, &iova_range);
+ if (ret < 0) {
+ error_setg(errp, "vhost-vdpa-device: get iova range failed: %s",
+ strerror(-ret));
+ goto free_vqs;
+ }
+ v->vdpa.iova_range = iova_range;
+
ret = vhost_dev_init(&v->dev, &v->vdpa, VHOST_BACKEND_TYPE_VDPA, 0, NULL);
if (ret < 0) {
error_setg(errp, "vhost-vdpa-device: vhost initialization failed: %s",
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index fcb1e96316..c295a8c917 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -378,6 +378,13 @@ static int vhost_vdpa_add_status(struct vhost_dev *dev,
uint8_t status)
return 0;
}
+int vhost_vdpa_get_iova_range(int fd, struct vhost_vdpa_iova_range *iova_range)
+{
+ int ret = ioctl(fd, VHOST_VDPA_GET_IOVA_RANGE, iova_range);
+
+ return ret < 0 ? -errno : 0;
+}
+
/*
* The use of this function is for requests that only need to be
* applied once. Typically such request occurs at the beginning
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index b0c6109230..b6e1e84ed2 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -710,14 +710,6 @@ static NetClientState *net_vhost_vdpa_init(NetClientState
*peer,
return nc;
}
-static int vhost_vdpa_get_iova_range(int fd,
- struct vhost_vdpa_iova_range *iova_range)
-{
- int ret = ioctl(fd, VHOST_VDPA_GET_IOVA_RANGE, iova_range);
-
- return ret < 0 ? -errno : 0;
-}
-
static int vhost_vdpa_get_features(int fd, uint64_t *features, Error **errp)
{
int ret = ioctl(fd, VHOST_GET_FEATURES, features);
--
MST
- [PULL 31/51] include/hw/pci: Split pci_device.h off pci.h, (continued)
- [PULL 31/51] include/hw/pci: Split pci_device.h off pci.h, Michael S. Tsirkin, 2023/01/05
- [PULL 34/51] include/hw/virtio: Break inclusion loop, Michael S. Tsirkin, 2023/01/05
- [PULL 35/51] include: Include headers where needed, Michael S. Tsirkin, 2023/01/05
- [PULL 36/51] include: Don't include qemu/osdep.h, Michael S. Tsirkin, 2023/01/05
- [PULL 37/51] docs/devel: Rules on #include in headers, Michael S. Tsirkin, 2023/01/05
- [PULL 39/51] vdpa: harden the error path if get_iova_range failed, Michael S. Tsirkin, 2023/01/05
- [PULL 40/51] vhost: simplify vhost_dev_enable_notifiers, Michael S. Tsirkin, 2023/01/05
- [PULL 41/51] vhost: configure all host notifiers in a single MR transaction, Michael S. Tsirkin, 2023/01/05
- [PULL 43/51] virtio-pci: fix proxy->vector_irqfd leak in virtio_pci_set_guest_notifiers, Michael S. Tsirkin, 2023/01/05
- [PULL 38/51] vdpa-dev: get iova range explicitly,
Michael S. Tsirkin <=
- [PULL 42/51] vdpa: commit all host notifier MRs in a single MR transaction, Michael S. Tsirkin, 2023/01/05
- [PULL 44/51] tests: virt: Allow changes to PPTT test table, Michael S. Tsirkin, 2023/01/05
- [PULL 45/51] hw/acpi/aml-build: Only generate cluster node in PPTT when specified, Michael S. Tsirkin, 2023/01/05
- [PULL 46/51] tests: virt: Update expected ACPI tables for virt test, Michael S. Tsirkin, 2023/01/05
- [PULL 47/51] tests: acpi: Add and whitelist *.topology blobs, Michael S. Tsirkin, 2023/01/05
- [PULL 48/51] tests: acpi: aarch64: Add topology test for aarch64, Michael S. Tsirkin, 2023/01/05
- [PULL 49/51] tests: acpi: aarch64: Add *.topology tables, Michael S. Tsirkin, 2023/01/05
- [PULL 50/51] acpi: cpuhp: fix guest-visible maximum access size to the legacy reg block, Michael S. Tsirkin, 2023/01/05