[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v6 10/13] memory: Notify IOMMU IOTLB based on entry type, not permi
From: |
Eugenio Pérez |
Subject: |
[RFC v6 10/13] memory: Notify IOMMU IOTLB based on entry type, not permissions |
Date: |
Wed, 26 Aug 2020 16:36:48 +0200 |
This way the intention is much clearer.
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
softmmu/memory.c | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/softmmu/memory.c b/softmmu/memory.c
index 961c25b42f..3e68442ca6 100644
--- a/softmmu/memory.c
+++ b/softmmu/memory.c
@@ -1890,10 +1890,27 @@ void
memory_region_unregister_iommu_notifier(MemoryRegion *mr,
memory_region_update_iommu_notify_flags(iommu_mr, NULL);
}
+static IOMMUNotifierFlag notifier_type_iommu(const IOMMUNotifier *notifier)
+{
+ return notifier->notifier_flags & IOMMU_NOTIFIER_ALL;
+}
+
+static bool memory_region_notify(const IOMMUNotifier *notifier,
+ const IOMMUTLBEntry *entry)
+{
+ switch(entry->type) {
+ case IOMMU_IOTLB_MAP:
+ return notifier_type_iommu(notifier) == IOMMU_NOTIFIER_MAP;
+ case IOMMU_IOTLB_UNMAP:
+ return notifier_type_iommu(notifier) == IOMMU_NOTIFIER_UNMAP;
+ default:
+ return false;
+ };
+}
+
void memory_region_notify_iommu_one(IOMMUNotifier *notifier,
IOMMUTLBEntry *entry)
{
- IOMMUNotifierFlag request_flags;
hwaddr entry_end = entry->iova + entry->addr_mask;
/*
@@ -1906,13 +1923,7 @@ void memory_region_notify_iommu_one(IOMMUNotifier
*notifier,
assert(entry->iova >= notifier->start && entry_end <= notifier->end);
- if (entry->perm & IOMMU_RW) {
- request_flags = IOMMU_NOTIFIER_MAP;
- } else {
- request_flags = IOMMU_NOTIFIER_UNMAP;
- }
-
- if (notifier->notifier_flags & request_flags) {
+ if (memory_region_notify(notifier, entry)) {
notifier->notify(notifier, entry);
}
}
--
2.18.1
- Re: [RFC v6 02/13] memory: Add IOMMUTLBNotificationType to IOMMUTLBEntry, (continued)
- [RFC v6 03/13] hw/alpha/typhoon: Mark all IOMMUTLBEntry as IOMMU_IOTLB_NONE type, Eugenio Pérez, 2020/08/26
- [RFC v6 04/13] amd_iommu: Mark all IOMMUTLBEntry as IOMMU_IOTLB_NONE type, Eugenio Pérez, 2020/08/26
- [RFC v6 05/13] hw/arm/smmu: Fill IOMMUTLBEntry notifier type, Eugenio Pérez, 2020/08/26
- [RFC v6 06/13] dma/rc4030: Mark all IOMMUTLBEntry as IOMMU_IOTLB_NONE type, Eugenio Pérez, 2020/08/26
- [RFC v6 07/13] intel_iommu: Mark IOMMUTLBEntry of page notification as IOMMU_IOTLB_UNMAP type, Eugenio Pérez, 2020/08/26
- [RFC v6 08/13] virtio-iommu: Mark virtio_iommu_translate IOTLB as IOMMU_IOTLB_NONE type, Eugenio Pérez, 2020/08/26
- [RFC v6 09/13] intel_iommu: Set IOMMUTLBEntry type in vtd_page_walk_level, Eugenio Pérez, 2020/08/26
- [RFC v6 10/13] memory: Notify IOMMU IOTLB based on entry type, not permissions,
Eugenio Pérez <=
- [RFC v6 11/13] memory: Add IOMMU_DEVIOTLB_UNMAP IOMMUTLBNotificationType, Eugenio Pérez, 2020/08/26
- [RFC v6 12/13] intel_iommu: Do not notify regular iotlb to device-iotlb notifiers, Eugenio Pérez, 2020/08/26
- [RFC v6 13/13] memory: Skip bad range assertion if notifier is DEVIOTLB type, Eugenio Pérez, 2020/08/26
- Re: [RFC v6 00/13] memory: Delete assertion in memory_region_unregister_iommu_notifier, Eugenio Perez Martin, 2020/08/26