diff options
-rw-r--r-- | arch/powerpc/kvm/book3s_pr_papr.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/powerpc/kvm/book3s_pr_papr.c b/arch/powerpc/kvm/book3s_pr_papr.c index 5efa97b993d8..255e5b1da1e0 100644 --- a/arch/powerpc/kvm/book3s_pr_papr.c +++ b/arch/powerpc/kvm/book3s_pr_papr.c | |||
@@ -57,7 +57,7 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu) | |||
57 | for (i = 0; ; ++i) { | 57 | for (i = 0; ; ++i) { |
58 | if (i == 8) | 58 | if (i == 8) |
59 | goto done; | 59 | goto done; |
60 | if ((*hpte & HPTE_V_VALID) == 0) | 60 | if ((be64_to_cpu(*hpte) & HPTE_V_VALID) == 0) |
61 | break; | 61 | break; |
62 | hpte += 2; | 62 | hpte += 2; |
63 | } | 63 | } |
@@ -67,8 +67,8 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu) | |||
67 | goto done; | 67 | goto done; |
68 | } | 68 | } |
69 | 69 | ||
70 | hpte[0] = kvmppc_get_gpr(vcpu, 6); | 70 | hpte[0] = cpu_to_be64(kvmppc_get_gpr(vcpu, 6)); |
71 | hpte[1] = kvmppc_get_gpr(vcpu, 7); | 71 | hpte[1] = cpu_to_be64(kvmppc_get_gpr(vcpu, 7)); |
72 | pteg_addr += i * HPTE_SIZE; | 72 | pteg_addr += i * HPTE_SIZE; |
73 | copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE); | 73 | copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE); |
74 | kvmppc_set_gpr(vcpu, 4, pte_index | i); | 74 | kvmppc_set_gpr(vcpu, 4, pte_index | i); |
@@ -93,6 +93,8 @@ static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu) | |||
93 | pteg = get_pteg_addr(vcpu, pte_index); | 93 | pteg = get_pteg_addr(vcpu, pte_index); |
94 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); | 94 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); |
95 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); | 95 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); |
96 | pte[0] = be64_to_cpu(pte[0]); | ||
97 | pte[1] = be64_to_cpu(pte[1]); | ||
96 | 98 | ||
97 | ret = H_NOT_FOUND; | 99 | ret = H_NOT_FOUND; |
98 | if ((pte[0] & HPTE_V_VALID) == 0 || | 100 | if ((pte[0] & HPTE_V_VALID) == 0 || |
@@ -169,6 +171,8 @@ static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu) | |||
169 | 171 | ||
170 | pteg = get_pteg_addr(vcpu, tsh & H_BULK_REMOVE_PTEX); | 172 | pteg = get_pteg_addr(vcpu, tsh & H_BULK_REMOVE_PTEX); |
171 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); | 173 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); |
174 | pte[0] = be64_to_cpu(pte[0]); | ||
175 | pte[1] = be64_to_cpu(pte[1]); | ||
172 | 176 | ||
173 | /* tsl = AVPN */ | 177 | /* tsl = AVPN */ |
174 | flags = (tsh & H_BULK_REMOVE_FLAGS) >> 26; | 178 | flags = (tsh & H_BULK_REMOVE_FLAGS) >> 26; |
@@ -207,6 +211,8 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) | |||
207 | pteg = get_pteg_addr(vcpu, pte_index); | 211 | pteg = get_pteg_addr(vcpu, pte_index); |
208 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); | 212 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); |
209 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); | 213 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); |
214 | pte[0] = be64_to_cpu(pte[0]); | ||
215 | pte[1] = be64_to_cpu(pte[1]); | ||
210 | 216 | ||
211 | ret = H_NOT_FOUND; | 217 | ret = H_NOT_FOUND; |
212 | if ((pte[0] & HPTE_V_VALID) == 0 || | 218 | if ((pte[0] & HPTE_V_VALID) == 0 || |
@@ -225,6 +231,8 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) | |||
225 | 231 | ||
226 | rb = compute_tlbie_rb(v, r, pte_index); | 232 | rb = compute_tlbie_rb(v, r, pte_index); |
227 | vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); | 233 | vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); |
234 | pte[0] = cpu_to_be64(pte[0]); | ||
235 | pte[1] = cpu_to_be64(pte[1]); | ||
228 | copy_to_user((void __user *)pteg, pte, sizeof(pte)); | 236 | copy_to_user((void __user *)pteg, pte, sizeof(pte)); |
229 | ret = H_SUCCESS; | 237 | ret = H_SUCCESS; |
230 | 238 | ||