diff options
| author | Alexey Kardashevskiy <aik@ozlabs.ru> | 2017-07-11 13:56:20 +1000 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-07-14 12:04:41 +0200 |
| commit | 1221a4746769f70231beab4db8da1c937e60340c (patch) | |
| tree | bbed52840d69ac3c8a6cfbc3043e66f1d2e3bab6 /exec.c | |
| parent | 3df9d748067f5a7f01b98ddc63597c98c8244a95 (diff) | |
| download | focaccia-qemu-1221a4746769f70231beab4db8da1c937e60340c.tar.gz focaccia-qemu-1221a4746769f70231beab4db8da1c937e60340c.zip | |
memory/iommu: introduce IOMMUMemoryRegionClass
This finishes QOM'fication of IOMMUMemoryRegion by introducing a IOMMUMemoryRegionClass. This also provides a fastpath analog for IOMMU_MEMORY_REGION_GET_CLASS(). This makes IOMMUMemoryRegion an abstract class. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Message-Id: <20170711035620.4232-3-aik@ozlabs.ru> Acked-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'exec.c')
| -rw-r--r-- | exec.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/exec.c b/exec.c index 2aa8be59ef..b3c080f731 100644 --- a/exec.c +++ b/exec.c @@ -481,6 +481,7 @@ static MemoryRegionSection address_space_do_translate(AddressSpace *as, IOMMUTLBEntry iotlb; MemoryRegionSection *section; IOMMUMemoryRegion *iommu_mr; + IOMMUMemoryRegionClass *imrc; for (;;) { AddressSpaceDispatch *d = atomic_rcu_read(&as->dispatch); @@ -490,9 +491,10 @@ static MemoryRegionSection address_space_do_translate(AddressSpace *as, if (!iommu_mr) { break; } + imrc = memory_region_get_iommu_class_nocheck(iommu_mr); - iotlb = iommu_mr->iommu_ops->translate(iommu_mr, addr, is_write ? - IOMMU_WO : IOMMU_RO); + iotlb = imrc->translate(iommu_mr, addr, is_write ? + IOMMU_WO : IOMMU_RO); addr = ((iotlb.translated_addr & ~iotlb.addr_mask) | (addr & iotlb.addr_mask)); *plen = MIN(*plen, (addr | iotlb.addr_mask) - addr + 1); |