[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH QEMU v23 11/18] iommu: add callback to get address limit IOMMU su
From: |
Kirti Wankhede |
Subject: |
[PATCH QEMU v23 11/18] iommu: add callback to get address limit IOMMU supports |
Date: |
Wed, 20 May 2020 23:54:41 +0530 |
Add optional method to get address limit IOMMU supports
Signed-off-by: Kirti Wankhede <address@hidden>
---
hw/i386/intel_iommu.c | 9 +++++++++
include/exec/memory.h | 18 ++++++++++++++++++
memory.c | 11 +++++++++++
3 files changed, 38 insertions(+)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index df7ad254ac15..d0b88c20c31e 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -3577,6 +3577,14 @@ static void vtd_iommu_replay(IOMMUMemoryRegion
*iommu_mr, IOMMUNotifier *n)
return;
}
+static hwaddr vtd_iommu_get_address_limit(IOMMUMemoryRegion *iommu_mr)
+{
+ VTDAddressSpace *vtd_as = container_of(iommu_mr, VTDAddressSpace, iommu);
+ IntelIOMMUState *s = vtd_as->iommu_state;
+
+ return VTD_ADDRESS_SIZE(s->aw_bits) - 1;
+}
+
/* Do the initialization. It will also be called when reset, so pay
* attention when adding new initialization stuff.
*/
@@ -3878,6 +3886,7 @@ static void
vtd_iommu_memory_region_class_init(ObjectClass *klass,
imrc->translate = vtd_iommu_translate;
imrc->notify_flag_changed = vtd_iommu_notify_flag_changed;
imrc->replay = vtd_iommu_replay;
+ imrc->get_address_limit = vtd_iommu_get_address_limit;
}
static const TypeInfo vtd_iommu_memory_region_info = {
diff --git a/include/exec/memory.h b/include/exec/memory.h
index e000bd2f97b2..2d0cbd46d2a6 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -355,6 +355,16 @@ typedef struct IOMMUMemoryRegionClass {
* @iommu: the IOMMUMemoryRegion
*/
int (*num_indexes)(IOMMUMemoryRegion *iommu);
+
+ /*
+ * Return address limit this IOMMU supports.
+ *
+ * Optional method: if this method is not provided, then
+ * memory_region_iommu_get_address_limit() will return 0.
+ *
+ * @iommu: the IOMMUMemoryRegion
+ */
+ hwaddr (*get_address_limit)(IOMMUMemoryRegion *iommu);
} IOMMUMemoryRegionClass;
typedef struct CoalescedMemoryRange CoalescedMemoryRange;
@@ -1364,6 +1374,14 @@ int memory_region_iommu_attrs_to_index(IOMMUMemoryRegion
*iommu_mr,
int memory_region_iommu_num_indexes(IOMMUMemoryRegion *iommu_mr);
/**
+ * memory_region_iommu_get_address_limit : return the maximum address limit
+ * that this IOMMU supports.
+ *
+ * @iommu_mr: the memory region
+ */
+hwaddr memory_region_iommu_get_address_limit(IOMMUMemoryRegion *iommu_mr);
+
+/**
* memory_region_name: get a memory region's name
*
* Returns the string that was used to initialize the memory region.
diff --git a/memory.c b/memory.c
index fd6f3d6aca18..a6c69e1391ba 100644
--- a/memory.c
+++ b/memory.c
@@ -1887,6 +1887,17 @@ void memory_region_iommu_replay(IOMMUMemoryRegion
*iommu_mr, IOMMUNotifier *n)
}
}
+hwaddr memory_region_iommu_get_address_limit(IOMMUMemoryRegion *iommu_mr)
+{
+ IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_GET_CLASS(iommu_mr);
+
+ if (imrc->get_address_limit) {
+ return imrc->get_address_limit(iommu_mr);
+ }
+
+ return 0;
+}
+
void memory_region_unregister_iommu_notifier(MemoryRegion *mr,
IOMMUNotifier *n)
{
--
2.7.0
- Re: [PATCH QEMU v23 06/18] vfio: Add VM state change handler to know state of VM, (continued)
- [PATCH QEMU v23 07/18] vfio: Add migration state change notifier, Kirti Wankhede, 2020/05/20
- [PATCH QEMU v23 08/18] vfio: Register SaveVMHandlers for VFIO device, Kirti Wankhede, 2020/05/20
- [PATCH QEMU v23 09/18] vfio: Add save state functions to SaveVMHandlers, Kirti Wankhede, 2020/05/20
- [PATCH QEMU v23 10/18] vfio: Add load state functions to SaveVMHandlers, Kirti Wankhede, 2020/05/20
- [PATCH QEMU v23 11/18] iommu: add callback to get address limit IOMMU supports,
Kirti Wankhede <=
- [PATCH QEMU v23 12/18] memory: Set DIRTY_MEMORY_MIGRATION when IOMMU is enabled, Kirti Wankhede, 2020/05/20
- [PATCH QEMU v23 13/18] vfio: Get migration capability flags for container, Kirti Wankhede, 2020/05/20
- [PATCH QEMU v23 14/18] vfio: Add function to start and stop dirty pages tracking, Kirti Wankhede, 2020/05/20
- [PATCH QEMU v23 15/18] vfio: Add vfio_listener_log_sync to mark dirty pages, Kirti Wankhede, 2020/05/20
- [PATCH QEMU v23 16/18] vfio: Add ioctl to get dirty pages bitmap during dma unmap., Kirti Wankhede, 2020/05/20