diff options
| author | Alexey Kardashevskiy | 2016-06-21 03:14:01 +0200 |
|---|---|---|
| committer | David Gibson | 2016-06-22 03:13:09 +0200 |
| commit | f682e9c244af7166225f4a50cc18ff296bb9d43e (patch) | |
| tree | b7bd72279e877749a13819072e5380147e3cb66d /hw/vfio | |
| parent | ppc: Improve emulation of THRM registers (diff) | |
| download | qemu-f682e9c244af7166225f4a50cc18ff296bb9d43e.tar.gz qemu-f682e9c244af7166225f4a50cc18ff296bb9d43e.tar.xz 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')
| -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; } |
