[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 15/35] vhost: correctly detect the enabling IOMMU
From: |
Michael S. Tsirkin |
Subject: |
[PULL 15/35] vhost: correctly detect the enabling IOMMU |
Date: |
Sat, 4 Sep 2021 17:36:39 -0400 |
From: Jason Wang <jasowang@redhat.com>
Vhost used to compare the dma_as against the address_space_memory to
detect whether the IOMMU is enabled or not. This might not work well
since the virito-bus may call get_dma_as if VIRTIO_F_IOMMU_PLATFORM is
set without an actual IOMMU enabled when device is plugged. In the
case of PCI where pci_get_address_space() is used, the bus master as
is returned. So vhost actually tries to enable device IOTLB even if
the IOMMU is not enabled. This will lead a lots of unnecessary
transactions between vhost and Qemu and will introduce a huge drop of
the performance.
For PCI, an ideal approach is to use pci_device_iommu_address_space()
just for get_dma_as. But Qemu may choose to initialize the IOMMU after
the virtio-pci which lead a wrong address space is returned during
device plugged. So this patch switch to use transport specific way via
iommu_enabled() to detect the IOMMU during vhost start. In this case,
we are fine since we know the IOMMU is initialized correctly.
Signed-off-by: Jason Wang <jasowang@redhat.com>
Message-Id: <20210804034803.1644-4-jasowang@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/virtio/vhost.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index e21e144510..b4b29413e6 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -315,7 +315,7 @@ static int vhost_dev_has_iommu(struct vhost_dev *dev)
* does not have IOMMU, there's no need to enable this feature
* which may cause unnecessary IOTLB miss/update trnasactions.
*/
- return vdev->dma_as != &address_space_memory &&
+ return virtio_bus_device_iommu_enabled(vdev) &&
virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM);
}
--
MST
- [PULL 26/35] vhost-vdpa: correctly return err in vhost_vdpa_set_backend_cap(), (continued)
- [PULL 26/35] vhost-vdpa: correctly return err in vhost_vdpa_set_backend_cap(), Michael S. Tsirkin, 2021/09/04
- [PULL 27/35] vhost_net: remove the meaningless assignment in vhost_net_start_one(), Michael S. Tsirkin, 2021/09/04
- [PULL 28/35] vhost: use unsigned int for nvqs, Michael S. Tsirkin, 2021/09/04
- [PULL 29/35] vhost_net: do not assume nvqs is always 2, Michael S. Tsirkin, 2021/09/04
- [PULL 30/35] vhost-vdpa: remove the unnecessary check in vhost_vdpa_add(), Michael S. Tsirkin, 2021/09/04
- [PULL 31/35] vhost-vdpa: don't cleanup twice in vhost_vdpa_add(), Michael S. Tsirkin, 2021/09/04
- [PULL 33/35] vhost-vdpa: tweak the error label in vhost_vdpa_add(), Michael S. Tsirkin, 2021/09/04
- [PULL 34/35] vhost-vdpa: fix the wrong assertion in vhost_vdpa_init(), Michael S. Tsirkin, 2021/09/04
- [PULL 35/35] vhost-vdpa: remove the unncessary queue_index assignment, Michael S. Tsirkin, 2021/09/04
- [PULL 08/35] vhost-user: add missing space in error message, Michael S. Tsirkin, 2021/09/04
- [PULL 15/35] vhost: correctly detect the enabling IOMMU,
Michael S. Tsirkin <=
- [PULL 32/35] vhost-vdpa: fix leaking of vhost_net in vhost_vdpa_add(), Michael S. Tsirkin, 2021/09/04
- Re: [PULL 00/35] pc,pci,virtio: fixes, cleanups, Peter Maydell, 2021/09/06