diff options
| author | Alexey Kardashevskiy <aik@ozlabs.ru> | 2016-06-21 11:14:01 +1000 |
|---|---|---|
| committer | David Gibson <david@gibson.dropbear.id.au> | 2016-06-22 11:13:09 +1000 |
| commit | f682e9c244af7166225f4a50cc18ff296bb9d43e (patch) | |
| tree | b7bd72279e877749a13819072e5380147e3cb66d /hw/vfio/common.c | |
| parent | f0278900d38b2d8d9531c484bd088d9a7d5d4ea2 (diff) | |
| download | focaccia-qemu-f682e9c244af7166225f4a50cc18ff296bb9d43e.tar.gz focaccia-qemu-f682e9c244af7166225f4a50cc18ff296bb9d43e.zip | |
memory: Add reporting of supported page sizes
Every IOMMU has some granularity which MemoryRegionIOMMUOps::translate uses when translating, however this information is not available outside the translate context for various checks. This adds a get_min_page_size callback to MemoryRegionIOMMUOps and a wrapper for it so IOMMU users (such as VFIO) can know the minimum actual page size supported by an IOMMU. As IOMMU MR represents a guest IOMMU, this uses TARGET_PAGE_SIZE as fallback. This removes vfio_container_granularity() and uses new helper in memory_region_iommu_replay() when replaying IOMMU mappings on added IOMMU memory region. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Acked-by: Alex Williamson <alex.williamson@redhat.com> [dwg: Removed an unnecessary calculation] Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'hw/vfio/common.c')
| -rw-r--r-- | hw/vfio/common.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 1898f1f3e4..27cc1596f9 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -321,11 +321,6 @@ out: rcu_read_unlock(); } -static hwaddr vfio_container_granularity(VFIOContainer *container) -{ - return (hwaddr)1 << ctz64(container->iova_pgsizes); -} - static void vfio_listener_region_add(MemoryListener *listener, MemoryRegionSection *section) { @@ -392,9 +387,7 @@ static void vfio_listener_region_add(MemoryListener *listener, QLIST_INSERT_HEAD(&container->giommu_list, giommu, giommu_next); memory_region_register_iommu_notifier(giommu->iommu, &giommu->n); - memory_region_iommu_replay(giommu->iommu, &giommu->n, - vfio_container_granularity(container), - false); + memory_region_iommu_replay(giommu->iommu, &giommu->n, false); return; } |