powerpc/powernv/iommu: Add real mode version of iommu_table_ops::exchange()
authorAlexey Kardashevskiy <aik@ozlabs.ru>
Wed, 22 Mar 2017 04:21:48 +0000 (15:21 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 30 Mar 2017 10:42:01 +0000 (21:42 +1100)
commita540aa56ba3d29084f28710c8b93cc9c3c422943
tree265e8987fb9f37ede5fb9175dac3e26b62745ed8
parent6b5c19c55266f6efd10ffac0e9f9f2b7aa420a58
powerpc/powernv/iommu: Add real mode version of iommu_table_ops::exchange()

In real mode, TCE tables are invalidated using special
cache-inhibited store instructions which are not available in
virtual mode

This defines and implements exchange_rm() callback. This does not
define set_rm/clear_rm/flush_rm callbacks as there is no user for those -
exchange/exchange_rm are only to be used by KVM for VFIO.

The exchange_rm callback is defined for IODA1/IODA2 powernv platforms.

This replaces list_for_each_entry_rcu with its lockless version as
from now on pnv_pci_ioda2_tce_invalidate() can be called in
the real mode too.

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