[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 05/15] memory: add MemoryRegionIOMMUOps.replay() call
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PULL 05/15] memory: add MemoryRegionIOMMUOps.replay() callback |
Date: |
Thu, 20 Apr 2017 15:46:55 -0300 |
From: Peter Xu <address@hidden>
Originally we have one memory_region_iommu_replay() function, which is
the default behavior to replay the translations of the whole IOMMU
region. However, on some platform like x86, we may want our own replay
logic for IOMMU regions. This patch adds one more hook for IOMMUOps for
the callback, and it'll override the default if set.
Reviewed-by: David Gibson <address@hidden>
Reviewed-by: Eric Auger <address@hidden>
Reviewed-by: \"Michael S. Tsirkin\" <address@hidden>
Signed-off-by: Peter Xu <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>
---
include/exec/memory.h | 2 ++
memory.c | 6 ++++++
2 files changed, 8 insertions(+)
diff --git a/include/exec/memory.h b/include/exec/memory.h
index 055b3a8b23..c0280b7064 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -191,6 +191,8 @@ struct MemoryRegionIOMMUOps {
void (*notify_flag_changed)(MemoryRegion *iommu,
IOMMUNotifierFlag old_flags,
IOMMUNotifierFlag new_flags);
+ /* Set this up to provide customized IOMMU replay function */
+ void (*replay)(MemoryRegion *iommu, IOMMUNotifier *notifier);
};
typedef struct CoalescedMemoryRange CoalescedMemoryRange;
diff --git a/memory.c b/memory.c
index ded4bf13d6..b782d5bc5a 100644
--- a/memory.c
+++ b/memory.c
@@ -1626,6 +1626,12 @@ void memory_region_iommu_replay(MemoryRegion *mr,
IOMMUNotifier *n,
hwaddr addr, granularity;
IOMMUTLBEntry iotlb;
+ /* If the IOMMU has its own replay callback, override */
+ if (mr->iommu_ops->replay) {
+ mr->iommu_ops->replay(mr, n);
+ return;
+ }
+
granularity = memory_region_iommu_get_min_page_size(mr);
for (addr = 0; addr < memory_region_size(mr); addr += granularity) {
--
2.11.0.259.g40922b1
- [Qemu-devel] [PULL 00/15] Machine queue for 2.10, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 02/15] memory: provide IOMMU_NOTIFIER_FOREACH macro, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 01/15] memory: add section range info for IOMMU notifier, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 03/15] memory: provide iommu_replay_all(), Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 04/15] memory: introduce memory_region_notify_one(), Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 05/15] memory: add MemoryRegionIOMMUOps.replay() callback,
Eduardo Habkost <=
- [Qemu-devel] [PULL 06/15] intel_iommu: use the correct memory region for device IOTLB notification, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 07/15] intel_iommu: provide its own replay() callback, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 08/15] intel_iommu: allow dynamic switch of IOMMU region, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 10/15] qdev: Make "hotplugged" property read-only, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 09/15] intel_iommu: enable remote IOTLB, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 11/15] hw/core/null-machine: Print error message when using the -kernel parameter, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 12/15] hostmem: introduce host_memory_backend_mr_inited(), Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 13/15] hostmem: use host_memory_backend_mr_inited() where proper, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 14/15] qdev: Constify value passed to qdev_prop_set_macaddr, Eduardo Habkost, 2017/04/20
- [Qemu-devel] [PULL 15/15] qdev: Constify local variable returned by blk_bs, Eduardo Habkost, 2017/04/20