|
|
ed5979 |
From cadcc1c6a001622d971c86d44925516905e3d104 Mon Sep 17 00:00:00 2001
|
|
|
ed5979 |
From: Jason Wang <jasowang@redhat.com>
|
|
|
ed5979 |
Date: Thu, 23 Feb 2023 14:59:21 +0800
|
|
|
ed5979 |
Subject: [PATCH 8/8] intel-iommu: fail DEVIOTLB_UNMAP without dt mode
|
|
|
ed5979 |
|
|
|
ed5979 |
RH-Author: Laurent Vivier <lvivier@redhat.com>
|
|
|
ed5979 |
RH-MergeRequest: 157: intel-iommu: fail DEVIOTLB_UNMAP without dt mode
|
|
|
ed5979 |
RH-Bugzilla: 2156876
|
|
|
ed5979 |
RH-Acked-by: Eric Auger <eric.auger@redhat.com>
|
|
|
ed5979 |
RH-Acked-by: Peter Xu <peterx@redhat.com>
|
|
|
ed5979 |
RH-Acked-by: MST <mst@redhat.com>
|
|
|
ed5979 |
RH-Commit: [1/1] eb9dbae6140ef4ba10d90b9e66abd75540f6892d (lvivier/qemu-kvm-centos)
|
|
|
ed5979 |
|
|
|
ed5979 |
Without dt mode, device IOTLB notifier won't work since guest won't
|
|
|
ed5979 |
send device IOTLB invalidation descriptor in this case. Let's fail
|
|
|
ed5979 |
early instead of misbehaving silently.
|
|
|
ed5979 |
|
|
|
ed5979 |
Reviewed-by: Laurent Vivier <lvivier@redhat.com>
|
|
|
ed5979 |
Tested-by: Laurent Vivier <lvivier@redhat.com>
|
|
|
ed5979 |
Tested-by: Viktor Prutyanov <viktor@daynix.com>
|
|
|
ed5979 |
Buglink: https://bugzilla.redhat.com/2156876
|
|
|
ed5979 |
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
|
|
ed5979 |
Message-Id: <20230223065924.42503-3-jasowang@redhat.com>
|
|
|
ed5979 |
Reviewed-by: Peter Xu <peterx@redhat.com>
|
|
|
ed5979 |
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
ed5979 |
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
ed5979 |
(cherry picked from commit 09adb0e021207b60a0c51a68939b4539d98d3ef3)
|
|
|
ed5979 |
|
|
|
ed5979 |
Conflict in hw/i386/intel_iommu.c because of missing commit:
|
|
|
ed5979 |
|
|
|
ed5979 |
4ce27463ccce ("intel-iommu: fail MAP notifier without caching mode")
|
|
|
ed5979 |
---
|
|
|
ed5979 |
hw/i386/intel_iommu.c | 8 ++++++++
|
|
|
ed5979 |
1 file changed, 8 insertions(+)
|
|
|
ed5979 |
|
|
|
ed5979 |
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
|
|
|
ed5979 |
index a08ee85edf..d2983f40d3 100644
|
|
|
ed5979 |
--- a/hw/i386/intel_iommu.c
|
|
|
ed5979 |
+++ b/hw/i386/intel_iommu.c
|
|
|
ed5979 |
@@ -3179,6 +3179,7 @@ static int vtd_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu,
|
|
|
ed5979 |
{
|
|
|
ed5979 |
VTDAddressSpace *vtd_as = container_of(iommu, VTDAddressSpace, iommu);
|
|
|
ed5979 |
IntelIOMMUState *s = vtd_as->iommu_state;
|
|
|
ed5979 |
+ X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(s);
|
|
|
ed5979 |
|
|
|
ed5979 |
/* TODO: add support for VFIO and vhost users */
|
|
|
ed5979 |
if (s->snoop_control) {
|
|
|
ed5979 |
@@ -3186,6 +3187,13 @@ static int vtd_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu,
|
|
|
ed5979 |
"Snoop Control with vhost or VFIO is not supported");
|
|
|
ed5979 |
return -ENOTSUP;
|
|
|
ed5979 |
}
|
|
|
ed5979 |
+ if (!x86_iommu->dt_supported && (new & IOMMU_NOTIFIER_DEVIOTLB_UNMAP)) {
|
|
|
ed5979 |
+ error_setg_errno(errp, ENOTSUP,
|
|
|
ed5979 |
+ "device %02x.%02x.%x requires device IOTLB mode",
|
|
|
ed5979 |
+ pci_bus_num(vtd_as->bus), PCI_SLOT(vtd_as->devfn),
|
|
|
ed5979 |
+ PCI_FUNC(vtd_as->devfn));
|
|
|
ed5979 |
+ return -ENOTSUP;
|
|
|
ed5979 |
+ }
|
|
|
ed5979 |
|
|
|
ed5979 |
/* Update per-address-space notifier flags */
|
|
|
ed5979 |
vtd_as->notifier_flags = new;
|
|
|
ed5979 |
--
|
|
|
ed5979 |
2.39.1
|
|
|
ed5979 |
|