@samitouri / QOSamiQemu / commits / a471e5b50c

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;