KVM: PPC: Make iommu_table::it_userspace big endian
We are going to reuse multilevel TCE code for the userspace copy of the TCE table and since it is big endian, let's make the copy big endian too. Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Acked-by: Paul Mackerras <paulus@ozlabs.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
191c22879f
commit
00a5c58d94
@@ -378,19 +378,19 @@ static long kvmppc_tce_iommu_mapped_dec(struct kvm *kvm,
|
||||
{
|
||||
struct mm_iommu_table_group_mem_t *mem = NULL;
|
||||
const unsigned long pgsize = 1ULL << tbl->it_page_shift;
|
||||
unsigned long *pua = IOMMU_TABLE_USERSPACE_ENTRY(tbl, entry);
|
||||
__be64 *pua = IOMMU_TABLE_USERSPACE_ENTRY(tbl, entry);
|
||||
|
||||
if (!pua)
|
||||
/* it_userspace allocation might be delayed */
|
||||
return H_TOO_HARD;
|
||||
|
||||
mem = mm_iommu_lookup(kvm->mm, *pua, pgsize);
|
||||
mem = mm_iommu_lookup(kvm->mm, be64_to_cpu(*pua), pgsize);
|
||||
if (!mem)
|
||||
return H_TOO_HARD;
|
||||
|
||||
mm_iommu_mapped_dec(mem);
|
||||
|
||||
*pua = 0;
|
||||
*pua = cpu_to_be64(0);
|
||||
|
||||
return H_SUCCESS;
|
||||
}
|
||||
@@ -437,7 +437,8 @@ long kvmppc_tce_iommu_do_map(struct kvm *kvm, struct iommu_table *tbl,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
long ret;
|
||||
unsigned long hpa, *pua = IOMMU_TABLE_USERSPACE_ENTRY(tbl, entry);
|
||||
unsigned long hpa;
|
||||
__be64 *pua = IOMMU_TABLE_USERSPACE_ENTRY(tbl, entry);
|
||||
struct mm_iommu_table_group_mem_t *mem;
|
||||
|
||||
if (!pua)
|
||||
@@ -464,7 +465,7 @@ long kvmppc_tce_iommu_do_map(struct kvm *kvm, struct iommu_table *tbl,
|
||||
if (dir != DMA_NONE)
|
||||
kvmppc_tce_iommu_mapped_dec(kvm, tbl, entry);
|
||||
|
||||
*pua = ua;
|
||||
*pua = cpu_to_be64(ua);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -200,7 +200,7 @@ static long kvmppc_rm_tce_iommu_mapped_dec(struct kvm *kvm,
|
||||
{
|
||||
struct mm_iommu_table_group_mem_t *mem = NULL;
|
||||
const unsigned long pgsize = 1ULL << tbl->it_page_shift;
|
||||
unsigned long *pua = IOMMU_TABLE_USERSPACE_ENTRY(tbl, entry);
|
||||
__be64 *pua = IOMMU_TABLE_USERSPACE_ENTRY(tbl, entry);
|
||||
|
||||
if (!pua)
|
||||
/* it_userspace allocation might be delayed */
|
||||
@@ -210,13 +210,13 @@ static long kvmppc_rm_tce_iommu_mapped_dec(struct kvm *kvm,
|
||||
if (WARN_ON_ONCE_RM(!pua))
|
||||
return H_HARDWARE;
|
||||
|
||||
mem = mm_iommu_lookup_rm(kvm->mm, *pua, pgsize);
|
||||
mem = mm_iommu_lookup_rm(kvm->mm, be64_to_cpu(*pua), pgsize);
|
||||
if (!mem)
|
||||
return H_TOO_HARD;
|
||||
|
||||
mm_iommu_mapped_dec(mem);
|
||||
|
||||
*pua = 0;
|
||||
*pua = cpu_to_be64(0);
|
||||
|
||||
return H_SUCCESS;
|
||||
}
|
||||
@@ -268,7 +268,7 @@ static long kvmppc_rm_tce_iommu_do_map(struct kvm *kvm, struct iommu_table *tbl,
|
||||
{
|
||||
long ret;
|
||||
unsigned long hpa = 0;
|
||||
unsigned long *pua = IOMMU_TABLE_USERSPACE_ENTRY(tbl, entry);
|
||||
__be64 *pua = IOMMU_TABLE_USERSPACE_ENTRY(tbl, entry);
|
||||
struct mm_iommu_table_group_mem_t *mem;
|
||||
|
||||
if (!pua)
|
||||
@@ -302,7 +302,7 @@ static long kvmppc_rm_tce_iommu_do_map(struct kvm *kvm, struct iommu_table *tbl,
|
||||
if (dir != DMA_NONE)
|
||||
kvmppc_rm_tce_iommu_mapped_dec(kvm, tbl, entry);
|
||||
|
||||
*pua = ua;
|
||||
*pua = cpu_to_be64(ua);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user