From: "Aneesh Kumar K.V" <aneesh.ku...@linux.vnet.ibm.com>

Don't try to compute these values.

Signed-off-by: Aneesh Kumar K.V <aneesh.ku...@linux.vnet.ibm.com>
---

NOTE: I am not sure why we were originally computing dsisr and dar. So may be
we need a variant of this patch. But with this and the additional patch
"powerpc: book3s: PR: Enable Little Endian PR guest" I am able to get a Little 
Endian
PR guest to boot.

 arch/powerpc/kvm/book3s_emulate.c | 64 ++-------------------------------------
 1 file changed, 2 insertions(+), 62 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_emulate.c 
b/arch/powerpc/kvm/book3s_emulate.c
index 99d40f8..62768f9 100644
--- a/arch/powerpc/kvm/book3s_emulate.c
+++ b/arch/powerpc/kvm/book3s_emulate.c
@@ -569,70 +569,10 @@ unprivileged:
 
 u32 kvmppc_alignment_dsisr(struct kvm_vcpu *vcpu, unsigned int inst)
 {
-       u32 dsisr = 0;
-
-       /*
-        * This is what the spec says about DSISR bits (not mentioned = 0):
-        *
-        * 12:13                [DS]    Set to bits 30:31
-        * 15:16                [X]     Set to bits 29:30
-        * 17                   [X]     Set to bit 25
-        *                      [D/DS]  Set to bit 5
-        * 18:21                [X]     Set to bits 21:24
-        *                      [D/DS]  Set to bits 1:4
-        * 22:26                        Set to bits 6:10 (RT/RS/FRT/FRS)
-        * 27:31                        Set to bits 11:15 (RA)
-        */
-
-       switch (get_op(inst)) {
-       /* D-form */
-       case OP_LFS:
-       case OP_LFD:
-       case OP_STFD:
-       case OP_STFS:
-               dsisr |= (inst >> 12) & 0x4000; /* bit 17 */
-               dsisr |= (inst >> 17) & 0x3c00; /* bits 18:21 */
-               break;
-       /* X-form */
-       case 31:
-               dsisr |= (inst << 14) & 0x18000; /* bits 15:16 */
-               dsisr |= (inst << 8)  & 0x04000; /* bit 17 */
-               dsisr |= (inst << 3)  & 0x03c00; /* bits 18:21 */
-               break;
-       default:
-               printk(KERN_INFO "KVM: Unaligned instruction 0x%x\n", inst);
-               break;
-       }
-
-       dsisr |= (inst >> 16) & 0x03ff; /* bits 22:31 */
-
-       return dsisr;
+       return vcpu->arch.fault_dsisr;
 }
 
 ulong kvmppc_alignment_dar(struct kvm_vcpu *vcpu, unsigned int inst)
 {
-       ulong dar = 0;
-       ulong ra = get_ra(inst);
-       ulong rb = get_rb(inst);
-
-       switch (get_op(inst)) {
-       case OP_LFS:
-       case OP_LFD:
-       case OP_STFD:
-       case OP_STFS:
-               if (ra)
-                       dar = kvmppc_get_gpr(vcpu, ra);
-               dar += (s32)((s16)inst);
-               break;
-       case 31:
-               if (ra)
-                       dar = kvmppc_get_gpr(vcpu, ra);
-               dar += kvmppc_get_gpr(vcpu, rb);
-               break;
-       default:
-               printk(KERN_INFO "KVM: Unaligned instruction 0x%x\n", inst);
-               break;
-       }
-
-       return dar;
+       return vcpu->arch.fault_dar;
 }
-- 
1.8.3.2

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to