powerpc/powernv: Fix it_ops::get() callback to return in cpu endian
authorAlexey Kardashevskiy <aik@ozlabs.ru>
Tue, 21 Feb 2017 02:38:54 +0000 (13:38 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 20 Mar 2017 08:02:49 +0000 (19:02 +1100)
The iommu_table_ops callbacks are declared CPU endian as they take and
return "unsigned long"; underlying hardware tables are big-endian.

However get() was missing be64_to_cpu(), this adds the missing conversion.

The only caller of this is crash dump at arch/powerpc/kernel/iommu.c,
iommu_table_clear() which only compares TCE to zero so this change
should not cause behavioral change.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Acked-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/powernv/pci.c

index eb835e977e33a046a9f99b6960dfd03ba46298b9..a43f22dc069ed9ebc515db0e1ac969a06d99b2d6 100644 (file)
@@ -758,7 +758,7 @@ void pnv_tce_free(struct iommu_table *tbl, long index, long npages)
 
 unsigned long pnv_tce_get(struct iommu_table *tbl, long index)
 {
-       return *(pnv_tce(tbl, index - tbl->it_offset));
+       return be64_to_cpu(*(pnv_tce(tbl, index - tbl->it_offset)));
 }
 
 struct iommu_table *pnv_pci_table_alloc(int nid)