Make a simper handler to consolidate the logic in one place. That helps further changes.
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> --- hw/virtio/vhost-vdpa.c | 13 +++---------- hw/virtio/vhost.c | 12 ++++++------ include/hw/virtio/vhost-backend.h | 6 ++---- 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c index fd9e92092d..5752474b64 100644 --- a/hw/virtio/vhost-vdpa.c +++ b/hw/virtio/vhost-vdpa.c @@ -1571,16 +1571,9 @@ static int vhost_vdpa_set_owner(struct vhost_dev *dev) return 0; } -static int vhost_vdpa_vq_get_addr(struct vhost_dev *dev, - struct vhost_vring_addr *addr, struct vhost_virtqueue *vq) +static bool vhost_vdpa_phys_vring_addr(struct vhost_dev *dev) { - assert(dev->vhost_ops->backend_type == VHOST_BACKEND_TYPE_VDPA); - addr->desc_user_addr = (uint64_t)(unsigned long)vq->desc_phys; - addr->avail_user_addr = (uint64_t)(unsigned long)vq->avail_phys; - addr->used_user_addr = (uint64_t)(unsigned long)vq->used_phys; - trace_vhost_vdpa_vq_get_addr(dev, vq, addr->desc_user_addr, - addr->avail_user_addr, addr->used_user_addr); - return 0; + return true; } static bool vhost_vdpa_force_iommu(struct vhost_dev *dev) @@ -1617,7 +1610,7 @@ const VhostOps vdpa_ops = { .vhost_send_device_iotlb_msg = NULL, .vhost_dev_start = vhost_vdpa_dev_start, .vhost_get_device_id = vhost_vdpa_get_device_id, - .vhost_vq_get_addr = vhost_vdpa_vq_get_addr, + .vhost_phys_vring_addr = vhost_vdpa_phys_vring_addr, .vhost_force_iommu = vhost_vdpa_force_iommu, .vhost_set_config_call = vhost_vdpa_set_config_call, .vhost_reset_status = vhost_vdpa_reset_status, diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index fe63091985..587f301832 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1093,16 +1093,16 @@ static int vhost_virtqueue_set_addr(struct vhost_dev *dev, struct vhost_virtqueue *vq, unsigned idx, bool enable_log) { + bool phys = dev->vhost_ops->vhost_phys_vring_addr && + dev->vhost_ops->vhost_phys_vring_addr(dev); struct vhost_vring_addr addr; int r; memset(&addr, 0, sizeof(struct vhost_vring_addr)); - if (dev->vhost_ops->vhost_vq_get_addr) { - r = dev->vhost_ops->vhost_vq_get_addr(dev, &addr, vq); - if (r < 0) { - VHOST_OPS_DEBUG(r, "vhost_vq_get_addr failed"); - return r; - } + if (phys) { + addr.desc_user_addr = (uint64_t)(unsigned long)vq->desc_phys; + addr.avail_user_addr = (uint64_t)(unsigned long)vq->avail_phys; + addr.used_user_addr = (uint64_t)(unsigned long)vq->used_phys; } else { addr.desc_user_addr = (uint64_t)(unsigned long)vq->desc; addr.avail_user_addr = (uint64_t)(unsigned long)vq->avail; diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-backend.h index aab6bf3ef7..7cc3bb5441 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -141,9 +141,7 @@ typedef int (*vhost_set_inflight_fd_op)(struct vhost_dev *dev, typedef int (*vhost_dev_start_op)(struct vhost_dev *dev, bool started); -typedef int (*vhost_vq_get_addr_op)(struct vhost_dev *dev, - struct vhost_vring_addr *addr, - struct vhost_virtqueue *vq); +typedef bool (*vhost_phys_vring_addr_op)(struct vhost_dev *dev); typedef int (*vhost_get_device_id_op)(struct vhost_dev *dev, uint32_t *dev_id); @@ -211,7 +209,7 @@ typedef struct VhostOps { vhost_get_inflight_fd_op vhost_get_inflight_fd; vhost_set_inflight_fd_op vhost_set_inflight_fd; vhost_dev_start_op vhost_dev_start; - vhost_vq_get_addr_op vhost_vq_get_addr; + vhost_phys_vring_addr_op vhost_phys_vring_addr; vhost_get_device_id_op vhost_get_device_id; vhost_force_iommu_op vhost_force_iommu; vhost_set_config_call_op vhost_set_config_call; -- 2.52.0
