vhost: replace .vhost_vq_get_addr() with .vhost_phys_vring_addr()
Make a simper handler to consolidate the logic in one place. That helps further changes. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Based-on: <20260206095258.894504-1-vsementsov@yandex-team.ru> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Message-Id: <20260420202032.714884-5-vsementsov@yandex-team.ru>
Vladimir Sementsov-Ogievskiy committed
Apr 20, 2026 at 23:20 UTC
a471e5b50c212d4584b5c742be8a865dfe8bd68c
3 files changed
+11
-20
hw/virtio/vhost-vdpa.c
+3
-10
@@ -1571,16 +1571,9 @@ static int vhost_vdpa_set_owner(struct vhost_dev *dev)
1571
return 0;
1572
}
1573
1574
-static int vhost_vdpa_vq_get_addr(struct vhost_dev *dev,
1575
- struct vhost_vring_addr *addr, struct vhost_virtqueue *vq)
1574
+static bool vhost_vdpa_phys_vring_addr(struct vhost_dev *dev)
1575
{
1577
- assert(dev->vhost_ops->backend_type == VHOST_BACKEND_TYPE_VDPA);
1578
- addr->desc_user_addr = (uint64_t)(unsigned long)vq->desc_phys;
1579
- addr->avail_user_addr = (uint64_t)(unsigned long)vq->avail_phys;
1580
- addr->used_user_addr = (uint64_t)(unsigned long)vq->used_phys;
1581
- trace_vhost_vdpa_vq_get_addr(dev, vq, addr->desc_user_addr,
1582
- addr->avail_user_addr, addr->used_user_addr);
1583
- return 0;
1576
+ return true;
1577
}
1578
1579
static bool vhost_vdpa_force_iommu(struct vhost_dev *dev)
@@ -1617,7 +1610,7 @@ const VhostOps vdpa_ops = {
1610
.vhost_send_device_iotlb_msg = NULL,
1611
.vhost_dev_start = vhost_vdpa_dev_start,
1612
.vhost_get_device_id = vhost_vdpa_get_device_id,
1620
- .vhost_vq_get_addr = vhost_vdpa_vq_get_addr,
1613
+ .vhost_phys_vring_addr = vhost_vdpa_phys_vring_addr,
1614
.vhost_force_iommu = vhost_vdpa_force_iommu,
1615
.vhost_set_config_call = vhost_vdpa_set_config_call,
1616
.vhost_reset_status = vhost_vdpa_reset_status,
hw/virtio/vhost.c
+6
-6
@@ -1093,16 +1093,16 @@ static int vhost_virtqueue_set_addr(struct vhost_dev *dev,
1093
struct vhost_virtqueue *vq,
1094
unsigned idx, bool enable_log)
1095
{
1096
+ bool phys = dev->vhost_ops->vhost_phys_vring_addr &&
1097
+ dev->vhost_ops->vhost_phys_vring_addr(dev);
1098
struct vhost_vring_addr addr;
1099
int r;
1100
memset(&addr, 0, sizeof(struct vhost_vring_addr));
1101
1100
- if (dev->vhost_ops->vhost_vq_get_addr) {
1101
- r = dev->vhost_ops->vhost_vq_get_addr(dev, &addr, vq);
1102
- if (r < 0) {
1103
- VHOST_OPS_DEBUG(r, "vhost_vq_get_addr failed");
1104
- return r;
1105
- }
1102
+ if (phys) {
1103
+ addr.desc_user_addr = (uint64_t)(unsigned long)vq->desc_phys;
1104
+ addr.avail_user_addr = (uint64_t)(unsigned long)vq->avail_phys;
1105
+ addr.used_user_addr = (uint64_t)(unsigned long)vq->used_phys;
1106
} else {
1107
addr.desc_user_addr = (uint64_t)(unsigned long)vq->desc;
1108
addr.avail_user_addr = (uint64_t)(unsigned long)vq->avail;
include/hw/virtio/vhost-backend.h
+2
-4
@@ -141,9 +141,7 @@ typedef int (*vhost_set_inflight_fd_op)(struct vhost_dev *dev,
141
142
typedef int (*vhost_dev_start_op)(struct vhost_dev *dev, bool started);
143
144
-typedef int (*vhost_vq_get_addr_op)(struct vhost_dev *dev,
145
- struct vhost_vring_addr *addr,
146
- struct vhost_virtqueue *vq);
144
+typedef bool (*vhost_phys_vring_addr_op)(struct vhost_dev *dev);
145
146
typedef int (*vhost_get_device_id_op)(struct vhost_dev *dev, uint32_t *dev_id);
147
@@ -211,7 +209,7 @@ typedef struct VhostOps {
209
vhost_get_inflight_fd_op vhost_get_inflight_fd;
210
vhost_set_inflight_fd_op vhost_set_inflight_fd;
211
vhost_dev_start_op vhost_dev_start;
214
- vhost_vq_get_addr_op vhost_vq_get_addr;
212
+ vhost_phys_vring_addr_op vhost_phys_vring_addr;
213
vhost_get_device_id_op vhost_get_device_id;
214
vhost_force_iommu_op vhost_force_iommu;
215
vhost_set_config_call_op vhost_set_config_call;