From: Vladimir Sementsov-Ogievskiy <[email protected]> Remove the hack of storing physical addresses in vq->desc/avail/used pointers when IOMMU is present. Instead, handle this case directly in vhost_virtqueue_set_addr() by checking for IOMMU presence.
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> Reviewed-by: Michael S. Tsirkin <[email protected]> Based-on: <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]> Message-Id: <[email protected]> --- hw/virtio/vhost.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index cc083572f4..6bb6b07e19 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -518,9 +518,6 @@ static int vhost_vrings_map(struct vhost_dev *dev, } if (vhost_dev_has_iommu(dev)) { - vq->desc = (void *)(uintptr_t)vq->desc_phys; - vq->avail = (void *)(uintptr_t)vq->avail_phys; - vq->used = (void *)(uintptr_t)vq->used_phys; return 1; } @@ -1104,7 +1101,7 @@ static int vhost_virtqueue_set_addr(struct vhost_dev *dev, int r; memset(&addr, 0, sizeof(struct vhost_vring_addr)); - if (phys) { + if (phys || vhost_dev_has_iommu(dev)) { 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; -- MST
