[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v16 QEMU 11/16] iommu: add callback to get address limit IOMMU su
From: |
Kirti Wankhede |
Subject: |
[PATCH v16 QEMU 11/16] iommu: add callback to get address limit IOMMU supports |
Date: |
Wed, 25 Mar 2020 02:39:09 +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 | 19 +++++++++++++++++++
memory.c | 11 +++++++++++
3 files changed, 39 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 1614d9a02c0c..f7d92bf6e6a9 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -355,6 +355,17 @@ 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_address_limit() will return the limit which input
+ * argument to this function.
+ *
+ * @iommu: the IOMMUMemoryRegion
+ */
+ hwaddr (*get_address_limit)(IOMMUMemoryRegion *iommu);
} IOMMUMemoryRegionClass;
typedef struct CoalescedMemoryRange CoalescedMemoryRange;
@@ -1364,6 +1375,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,
+ hwaddr limit);
+/**
* 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 601b74990620..acb7546971c3 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,
+ hwaddr limit)
+{
+ IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_GET_CLASS(iommu_mr);
+
+ if (imrc->get_address_limit) {
+ return imrc->get_address_limit(iommu_mr);
+ }
+ return limit;
+}
+
void memory_region_unregister_iommu_notifier(MemoryRegion *mr,
IOMMUNotifier *n)
{
--
2.7.0
- [PATCH v16 QEMU 05/16] vfio: Add migration region initialization and finalize function, (continued)
- [PATCH v16 QEMU 05/16] vfio: Add migration region initialization and finalize function, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 06/16] vfio: Add VM state change handler to know state of VM, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 07/16] vfio: Add migration state change notifier, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 08/16] vfio: Register SaveVMHandlers for VFIO device, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 09/16] vfio: Add save state functions to SaveVMHandlers, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 10/16] vfio: Add load state functions to SaveVMHandlers, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 11/16] iommu: add callback to get address limit IOMMU supports,
Kirti Wankhede <=
- [PATCH v16 QEMU 12/16] memory: Set DIRTY_MEMORY_MIGRATION when IOMMU is enabled, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 13/16] vfio: Add function to start and stop dirty pages tracking, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 14/16] vfio: Add vfio_listener_log_sync to mark dirty pages, Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 15/16] vfio: Add ioctl to get dirty pages bitmap during dma unmap., Kirti Wankhede, 2020/03/24
- [PATCH v16 QEMU 16/16] vfio: Make vfio-pci device migration capable, Kirti Wankhede, 2020/03/24
- Re: [PATCH v16 QEMU 00/16] Add migration support for VFIO devices, no-reply, 2020/03/24
- Re: [PATCH v16 QEMU 00/16] Add migration support for VFIO devices, Alex Williamson, 2020/03/31