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 | |
parent | f0278900d38b2d8d9531c484bd088d9a7d5d4ea2 (diff) | |
download | qemu-f682e9c244af7166225f4a50cc18ff296bb9d43e.zip qemu-f682e9c244af7166225f4a50cc18ff296bb9d43e.tar.gz qemu-f682e9c244af7166225f4a50cc18ff296bb9d43e.tar.bz2 |
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')
-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 1898f1f..27cc159 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; } |