memory: provide IOMMU_NOTIFIER_FOREACH macro

A new macro is provided to iterate all the IOMMU notifiers hooked
under specific IOMMU memory region.

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: \"Michael S. Tsirkin\" <mst@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <1491562755-23867-3-git-send-email-peterx@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
Peter Xu 2017-04-07 18:59:08 +08:00 committed by Eduardo Habkost
parent 698feb5e13
commit 512fa40867
2 changed files with 5 additions and 2 deletions

View File

@ -239,6 +239,9 @@ struct MemoryRegion {
IOMMUNotifierFlag iommu_notify_flags; IOMMUNotifierFlag iommu_notify_flags;
}; };
#define IOMMU_NOTIFIER_FOREACH(n, mr) \
QLIST_FOREACH((n), &(mr)->iommu_notify, node)
/** /**
* MemoryListener: callbacks structure for updates to the physical memory map * MemoryListener: callbacks structure for updates to the physical memory map
* *

View File

@ -1583,7 +1583,7 @@ static void memory_region_update_iommu_notify_flags(MemoryRegion *mr)
IOMMUNotifierFlag flags = IOMMU_NOTIFIER_NONE; IOMMUNotifierFlag flags = IOMMU_NOTIFIER_NONE;
IOMMUNotifier *iommu_notifier; IOMMUNotifier *iommu_notifier;
QLIST_FOREACH(iommu_notifier, &mr->iommu_notify, node) { IOMMU_NOTIFIER_FOREACH(iommu_notifier, mr) {
flags |= iommu_notifier->notifier_flags; flags |= iommu_notifier->notifier_flags;
} }
@ -1667,7 +1667,7 @@ void memory_region_notify_iommu(MemoryRegion *mr,
request_flags = IOMMU_NOTIFIER_UNMAP; request_flags = IOMMU_NOTIFIER_UNMAP;
} }
QLIST_FOREACH(iommu_notifier, &mr->iommu_notify, node) { IOMMU_NOTIFIER_FOREACH(iommu_notifier, mr) {
/* /*
* Skip the notification if the notification does not overlap * Skip the notification if the notification does not overlap
* with registered range. * with registered range.