|
 |
ddf19c |
From e06655cfe0fa9473b1e8b311571f36d787472834 Mon Sep 17 00:00:00 2001
|
|
 |
ddf19c |
From: Thomas Huth <thuth@redhat.com>
|
|
 |
ddf19c |
Date: Fri, 29 May 2020 05:54:02 -0400
|
|
 |
ddf19c |
Subject: [PATCH 20/42] vhost: correctly turn on VIRTIO_F_IOMMU_PLATFORM
|
|
 |
ddf19c |
|
|
 |
ddf19c |
RH-Author: Thomas Huth <thuth@redhat.com>
|
|
 |
ddf19c |
Message-id: <20200529055420.16855-21-thuth@redhat.com>
|
|
 |
ddf19c |
Patchwork-id: 97041
|
|
 |
ddf19c |
O-Subject: [RHEL-8.3.0 qemu-kvm PATCH v2 20/38] vhost: correctly turn on VIRTIO_F_IOMMU_PLATFORM
|
|
 |
ddf19c |
Bugzilla: 1828317
|
|
 |
ddf19c |
RH-Acked-by: Claudio Imbrenda <cimbrend@redhat.com>
|
|
 |
ddf19c |
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
|
 |
ddf19c |
RH-Acked-by: David Hildenbrand <david@redhat.com>
|
|
 |
ddf19c |
|
|
 |
ddf19c |
From: Jason Wang <jasowang@redhat.com>
|
|
 |
ddf19c |
|
|
 |
ddf19c |
We turn on device IOTLB via VIRTIO_F_IOMMU_PLATFORM unconditionally on
|
|
 |
ddf19c |
platform without IOMMU support. This can lead unnecessary IOTLB
|
|
 |
ddf19c |
transactions which will damage the performance.
|
|
 |
ddf19c |
|
|
 |
ddf19c |
Fixing this by check whether the device is backed by IOMMU and disable
|
|
 |
ddf19c |
device IOTLB.
|
|
 |
ddf19c |
|
|
 |
ddf19c |
Reported-by: Halil Pasic <pasic@linux.ibm.com>
|
|
 |
ddf19c |
Tested-by: Halil Pasic <pasic@linux.ibm.com>
|
|
 |
ddf19c |
Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
|
|
 |
ddf19c |
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
|
 |
ddf19c |
Message-Id: <20200302042454.24814-1-jasowang@redhat.com>
|
|
 |
ddf19c |
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
|
 |
ddf19c |
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
|
 |
ddf19c |
(cherry picked from commit f7ef7e6e3ba6e994e070cc609eb154339d1c4a11)
|
|
 |
ddf19c |
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
 |
ddf19c |
---
|
|
 |
ddf19c |
hw/virtio/vhost.c | 12 +++++++++++-
|
|
 |
ddf19c |
1 file changed, 11 insertions(+), 1 deletion(-)
|
|
 |
ddf19c |
|
|
 |
ddf19c |
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
|
|
 |
ddf19c |
index 9edfadc81d..9182a00495 100644
|
|
 |
ddf19c |
--- a/hw/virtio/vhost.c
|
|
 |
ddf19c |
+++ b/hw/virtio/vhost.c
|
|
 |
ddf19c |
@@ -290,7 +290,14 @@ static int vhost_dev_has_iommu(struct vhost_dev *dev)
|
|
 |
ddf19c |
{
|
|
 |
ddf19c |
VirtIODevice *vdev = dev->vdev;
|
|
 |
ddf19c |
|
|
 |
ddf19c |
- return virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM);
|
|
 |
ddf19c |
+ /*
|
|
 |
ddf19c |
+ * For vhost, VIRTIO_F_IOMMU_PLATFORM means the backend support
|
|
 |
ddf19c |
+ * incremental memory mapping API via IOTLB API. For platform that
|
|
 |
ddf19c |
+ * does not have IOMMU, there's no need to enable this feature
|
|
 |
ddf19c |
+ * which may cause unnecessary IOTLB miss/update trnasactions.
|
|
 |
ddf19c |
+ */
|
|
 |
ddf19c |
+ return vdev->dma_as != &address_space_memory &&
|
|
 |
ddf19c |
+ virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM);
|
|
 |
ddf19c |
}
|
|
 |
ddf19c |
|
|
 |
ddf19c |
static void *vhost_memory_map(struct vhost_dev *dev, hwaddr addr,
|
|
 |
ddf19c |
@@ -765,6 +772,9 @@ static int vhost_dev_set_features(struct vhost_dev *dev,
|
|
 |
ddf19c |
if (enable_log) {
|
|
 |
ddf19c |
features |= 0x1ULL << VHOST_F_LOG_ALL;
|
|
 |
ddf19c |
}
|
|
 |
ddf19c |
+ if (!vhost_dev_has_iommu(dev)) {
|
|
 |
ddf19c |
+ features &= ~(0x1ULL << VIRTIO_F_IOMMU_PLATFORM);
|
|
 |
ddf19c |
+ }
|
|
 |
ddf19c |
r = dev->vhost_ops->vhost_set_features(dev, features);
|
|
 |
ddf19c |
if (r < 0) {
|
|
 |
ddf19c |
VHOST_OPS_DEBUG("vhost_set_features failed");
|
|
 |
ddf19c |
--
|
|
 |
ddf19c |
2.27.0
|
|
 |
ddf19c |
|