]> git.baikalelectronics.ru Git - kernel.git/commit
powerpc/powernv: Add indirect levels to it_userspace
authorAlexey Kardashevskiy <aik@ozlabs.ru>
Wed, 4 Jul 2018 06:13:47 +0000 (16:13 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 16 Jul 2018 12:53:10 +0000 (22:53 +1000)
commitc591b0d5d76b88f8c82c0e1a009cfcac1dbd3aa7
treee9586d1bdb4a7eaf03714c1d3c7eca391e4235fa
parentf374ae111404156cd8532add7815407b7a685388
powerpc/powernv: Add indirect levels to it_userspace

We want to support sparse memory and therefore huge chunks of DMA windows
do not need to be mapped. If a DMA window big enough to require 2 or more
indirect levels, and a DMA window is used to map all RAM (which is
a default case for 64bit window), we can actually save some memory by
not allocation TCE for regions which we are not going to map anyway.

The hardware tables alreary support indirect levels but we also keep
host-physical-to-userspace translation array which is allocated by
vmalloc() and is a flat array which might use quite some memory.

This converts it_userspace from vmalloc'ed array to a multi level table.

As the format becomes platform dependend, this replaces the direct access
to it_usespace with a iommu_table_ops::useraddrptr hook which returns
a pointer to the userspace copy of a TCE; future extension will return
NULL if the level was not allocated.

This should not change non-KVM handling of TCE tables and it_userspace
will not be allocated for non-KVM tables.

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/iommu.h
arch/powerpc/kvm/book3s_64_vio_hv.c
arch/powerpc/platforms/powernv/pci-ioda-tce.c
arch/powerpc/platforms/powernv/pci-ioda.c
arch/powerpc/platforms/powernv/pci.h
drivers/vfio/vfio_iommu_spapr_tce.c