[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 41/53] intel-iommu: send UNMAP notifications for domain or global
From: |
Michael S. Tsirkin |
Subject: |
[PULL 41/53] intel-iommu: send UNMAP notifications for domain or global inv desc |
Date: |
Thu, 2 Mar 2023 03:26:36 -0500 |
From: Peter Xu <peterx@redhat.com>
We don't send UNMAP notification upon domain or global invalidation
which will lead the notifier can't work correctly. One example is to
use vhost remote IOTLB without enabling device IOTLB.
Fixing this by sending UNMAP notification.
Signed-off-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Message-Id: <20230223065924.42503-6-jasowang@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/i386/intel_iommu.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index a6b35b07d2..faade7def8 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -1530,13 +1530,17 @@ static int
vtd_sync_shadow_page_table_range(VTDAddressSpace *vtd_as,
return vtd_page_walk(s, ce, addr, addr + size, &info, vtd_as->pasid);
}
-static int vtd_sync_shadow_page_table(VTDAddressSpace *vtd_as)
+static int vtd_address_space_sync(VTDAddressSpace *vtd_as)
{
int ret;
VTDContextEntry ce;
IOMMUNotifier *n;
- if (!(vtd_as->iommu.iommu_notify_flags & IOMMU_NOTIFIER_IOTLB_EVENTS)) {
+ /* If no MAP notifier registered, we simply invalidate all the cache */
+ if (!vtd_as_has_map_notifier(vtd_as)) {
+ IOMMU_NOTIFIER_FOREACH(n, &vtd_as->iommu) {
+ memory_region_unmap_iommu_notifier_range(n);
+ }
return 0;
}
@@ -2000,7 +2004,7 @@ static void vtd_iommu_replay_all(IntelIOMMUState *s)
VTDAddressSpace *vtd_as;
QLIST_FOREACH(vtd_as, &s->vtd_as_with_notifiers, next) {
- vtd_sync_shadow_page_table(vtd_as);
+ vtd_address_space_sync(vtd_as);
}
}
@@ -2082,7 +2086,7 @@ static void vtd_context_device_invalidate(IntelIOMMUState
*s,
* framework will skip MAP notifications if that
* happened.
*/
- vtd_sync_shadow_page_table(vtd_as);
+ vtd_address_space_sync(vtd_as);
}
}
}
@@ -2140,7 +2144,7 @@ static void vtd_iotlb_domain_invalidate(IntelIOMMUState
*s, uint16_t domain_id)
if (!vtd_dev_to_context_entry(s, pci_bus_num(vtd_as->bus),
vtd_as->devfn, &ce) &&
domain_id == vtd_get_domain_id(s, &ce, vtd_as->pasid)) {
- vtd_sync_shadow_page_table(vtd_as);
+ vtd_address_space_sync(vtd_as);
}
}
}
--
MST
- Re: [PULL 35/53] chardev/char-socket: set s->listener = NULL in char_socket_finalize, (continued)
- [PULL 38/53] intel-iommu: fail DEVIOTLB_UNMAP without dt mode, Michael S. Tsirkin, 2023/03/02
- [PULL 39/53] memory: introduce memory_region_unmap_iommu_notifier_range(), Michael S. Tsirkin, 2023/03/02
- [PULL 37/53] intel-iommu: fail MAP notifier without caching mode, Michael S. Tsirkin, 2023/03/02
- [PULL 42/53] MAINTAINERS: Add Fan Ni as Compute eXpress Link QEMU reviewer, Michael S. Tsirkin, 2023/03/02
- [PULL 43/53] hw/mem/cxl_type3: Improve error handling in realize(), Michael S. Tsirkin, 2023/03/02
- [PULL 48/53] hw/i386/acpi: Drop duplicate _UID entry for CXL root bridge, Michael S. Tsirkin, 2023/03/02
- [PULL 50/53] qemu/bswap: Add const_le64(), Michael S. Tsirkin, 2023/03/02
- [PULL 40/53] smmu: switch to use memory_region_unmap_iommu_notifier_range(), Michael S. Tsirkin, 2023/03/02
- [PULL 41/53] intel-iommu: send UNMAP notifications for domain or global inv desc,
Michael S. Tsirkin <=
- [PULL 46/53] hw/cxl: Add CXL_CAPACITY_MULTIPLIER definition, Michael S. Tsirkin, 2023/03/02
- [PULL 44/53] hw/pci-bridge/cxl_downstream: Fix type naming mismatch, Michael S. Tsirkin, 2023/03/02
- [PULL 36/53] memory: Optimize replay of guest mapping, Michael S. Tsirkin, 2023/03/02
- [PULL 45/53] hw/cxl: set cxl-type3 device type to PCI_CLASS_MEMORY_CXL, Michael S. Tsirkin, 2023/03/02
- [PULL 47/53] tests/acpi: Allow update of q35/DSDT.cxl, Michael S. Tsirkin, 2023/03/02
- [PULL 49/53] tests: acpi: Update q35/DSDT.cxl for removed duplicate UID, Michael S. Tsirkin, 2023/03/02
- [PULL 51/53] qemu/uuid: Add UUID static initializer, Michael S. Tsirkin, 2023/03/02
- [PULL 52/53] hw/cxl/mailbox: Use new UUID network order define for cel_uuid, Michael S. Tsirkin, 2023/03/02
- [PULL 53/53] tests/data/acpi/virt: drop (most) duplicate files., Michael S. Tsirkin, 2023/03/02
- Re: [PULL 00/53] virtio,pc,pci: features, cleanups, fixes, Michael Tokarev, 2023/03/02