KVM: PPC: Use accessor functions for GPR access
[pandora-kernel.git] / arch / powerpc / kvm / emulate.c
index 303457b..38219af 100644 (file)
@@ -170,14 +170,14 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                case OP_31_XOP_STWX:
                        rs = get_rs(inst);
                        emulated = kvmppc_handle_store(run, vcpu,
-                                                      vcpu->arch.gpr[rs],
+                                                      kvmppc_get_gpr(vcpu, rs),
                                                       4, 1);
                        break;
 
                case OP_31_XOP_STBX:
                        rs = get_rs(inst);
                        emulated = kvmppc_handle_store(run, vcpu,
-                                                      vcpu->arch.gpr[rs],
+                                                      kvmppc_get_gpr(vcpu, rs),
                                                       1, 1);
                        break;
 
@@ -186,14 +186,14 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                        ra = get_ra(inst);
                        rb = get_rb(inst);
 
-                       ea = vcpu->arch.gpr[rb];
+                       ea = kvmppc_get_gpr(vcpu, rb);
                        if (ra)
-                               ea += vcpu->arch.gpr[ra];
+                               ea += kvmppc_get_gpr(vcpu, ra);
 
                        emulated = kvmppc_handle_store(run, vcpu,
-                                                      vcpu->arch.gpr[rs],
+                                                      kvmppc_get_gpr(vcpu, rs),
                                                       1, 1);
-                       vcpu->arch.gpr[rs] = ea;
+                       kvmppc_set_gpr(vcpu, rs, ea);
                        break;
 
                case OP_31_XOP_LHZX:
@@ -206,12 +206,12 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                        ra = get_ra(inst);
                        rb = get_rb(inst);
 
-                       ea = vcpu->arch.gpr[rb];
+                       ea = kvmppc_get_gpr(vcpu, rb);
                        if (ra)
-                               ea += vcpu->arch.gpr[ra];
+                               ea += kvmppc_get_gpr(vcpu, ra);
 
                        emulated = kvmppc_handle_load(run, vcpu, rt, 2, 1);
-                       vcpu->arch.gpr[ra] = ea;
+                       kvmppc_set_gpr(vcpu, ra, ea);
                        break;
 
                case OP_31_XOP_MFSPR:
@@ -220,47 +220,49 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
 
                        switch (sprn) {
                        case SPRN_SRR0:
-                               vcpu->arch.gpr[rt] = vcpu->arch.srr0; break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.srr0); break;
                        case SPRN_SRR1:
-                               vcpu->arch.gpr[rt] = vcpu->arch.srr1; break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.srr1); break;
                        case SPRN_PVR:
-                               vcpu->arch.gpr[rt] = vcpu->arch.pvr; break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.pvr); break;
                        case SPRN_PIR:
-                               vcpu->arch.gpr[rt] = vcpu->vcpu_id; break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->vcpu_id); break;
                        case SPRN_MSSSR0:
-                               vcpu->arch.gpr[rt] = 0; break;
+                               kvmppc_set_gpr(vcpu, rt, 0); break;
 
                        /* Note: mftb and TBRL/TBWL are user-accessible, so
                         * the guest can always access the real TB anyways.
                         * In fact, we probably will never see these traps. */
                        case SPRN_TBWL:
-                               vcpu->arch.gpr[rt] = get_tb() >> 32; break;
+                               kvmppc_set_gpr(vcpu, rt, get_tb() >> 32); break;
                        case SPRN_TBWU:
-                               vcpu->arch.gpr[rt] = get_tb(); break;
+                               kvmppc_set_gpr(vcpu, rt, get_tb()); break;
 
                        case SPRN_SPRG0:
-                               vcpu->arch.gpr[rt] = vcpu->arch.sprg0; break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.sprg0); break;
                        case SPRN_SPRG1:
-                               vcpu->arch.gpr[rt] = vcpu->arch.sprg1; break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.sprg1); break;
                        case SPRN_SPRG2:
-                               vcpu->arch.gpr[rt] = vcpu->arch.sprg2; break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.sprg2); break;
                        case SPRN_SPRG3:
-                               vcpu->arch.gpr[rt] = vcpu->arch.sprg3; break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.sprg3); break;
                        /* Note: SPRG4-7 are user-readable, so we don't get
                         * a trap. */
 
                        case SPRN_DEC:
                        {
                                u64 jd = get_tb() - vcpu->arch.dec_jiffies;
-                               vcpu->arch.gpr[rt] = vcpu->arch.dec - jd;
-                               pr_debug(KERN_INFO "mfDEC: %x - %llx = %lx\n", vcpu->arch.dec, jd, vcpu->arch.gpr[rt]);
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.dec - jd);
+                               pr_debug(KERN_INFO "mfDEC: %x - %llx = %lx\n",
+                                        vcpu->arch.dec, jd,
+                                        kvmppc_get_gpr(vcpu, rt));
                                break;
                        }
                        default:
                                emulated = kvmppc_core_emulate_mfspr(vcpu, sprn, rt);
                                if (emulated == EMULATE_FAIL) {
                                        printk("mfspr: unknown spr %x\n", sprn);
-                                       vcpu->arch.gpr[rt] = 0;
+                                       kvmppc_set_gpr(vcpu, rt, 0);
                                }
                                break;
                        }
@@ -272,7 +274,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                        rb = get_rb(inst);
 
                        emulated = kvmppc_handle_store(run, vcpu,
-                                                      vcpu->arch.gpr[rs],
+                                                      kvmppc_get_gpr(vcpu, rs),
                                                       2, 1);
                        break;
 
@@ -281,14 +283,14 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                        ra = get_ra(inst);
                        rb = get_rb(inst);
 
-                       ea = vcpu->arch.gpr[rb];
+                       ea = kvmppc_get_gpr(vcpu, rb);
                        if (ra)
-                               ea += vcpu->arch.gpr[ra];
+                               ea += kvmppc_get_gpr(vcpu, ra);
 
                        emulated = kvmppc_handle_store(run, vcpu,
-                                                      vcpu->arch.gpr[rs],
+                                                      kvmppc_get_gpr(vcpu, rs),
                                                       2, 1);
-                       vcpu->arch.gpr[ra] = ea;
+                       kvmppc_set_gpr(vcpu, ra, ea);
                        break;
 
                case OP_31_XOP_MTSPR:
@@ -296,9 +298,9 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                        rs = get_rs(inst);
                        switch (sprn) {
                        case SPRN_SRR0:
-                               vcpu->arch.srr0 = vcpu->arch.gpr[rs]; break;
+                               vcpu->arch.srr0 = kvmppc_get_gpr(vcpu, rs); break;
                        case SPRN_SRR1:
-                               vcpu->arch.srr1 = vcpu->arch.gpr[rs]; break;
+                               vcpu->arch.srr1 = kvmppc_get_gpr(vcpu, rs); break;
 
                        /* XXX We need to context-switch the timebase for
                         * watchdog and FIT. */
@@ -308,18 +310,18 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                        case SPRN_MSSSR0: break;
 
                        case SPRN_DEC:
-                               vcpu->arch.dec = vcpu->arch.gpr[rs];
+                               vcpu->arch.dec = kvmppc_get_gpr(vcpu, rs);
                                kvmppc_emulate_dec(vcpu);
                                break;
 
                        case SPRN_SPRG0:
-                               vcpu->arch.sprg0 = vcpu->arch.gpr[rs]; break;
+                               vcpu->arch.sprg0 = kvmppc_get_gpr(vcpu, rs); break;
                        case SPRN_SPRG1:
-                               vcpu->arch.sprg1 = vcpu->arch.gpr[rs]; break;
+                               vcpu->arch.sprg1 = kvmppc_get_gpr(vcpu, rs); break;
                        case SPRN_SPRG2:
-                               vcpu->arch.sprg2 = vcpu->arch.gpr[rs]; break;
+                               vcpu->arch.sprg2 = kvmppc_get_gpr(vcpu, rs); break;
                        case SPRN_SPRG3:
-                               vcpu->arch.sprg3 = vcpu->arch.gpr[rs]; break;
+                               vcpu->arch.sprg3 = kvmppc_get_gpr(vcpu, rs); break;
 
                        default:
                                emulated = kvmppc_core_emulate_mtspr(vcpu, sprn, rs);
@@ -351,7 +353,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                        rb = get_rb(inst);
 
                        emulated = kvmppc_handle_store(run, vcpu,
-                                                      vcpu->arch.gpr[rs],
+                                                      kvmppc_get_gpr(vcpu, rs),
                                                       4, 0);
                        break;
 
@@ -366,7 +368,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                        rb = get_rb(inst);
 
                        emulated = kvmppc_handle_store(run, vcpu,
-                                                      vcpu->arch.gpr[rs],
+                                                      kvmppc_get_gpr(vcpu, rs),
                                                       2, 0);
                        break;
 
@@ -385,7 +387,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                ra = get_ra(inst);
                rt = get_rt(inst);
                emulated = kvmppc_handle_load(run, vcpu, rt, 4, 1);
-               vcpu->arch.gpr[ra] = vcpu->arch.paddr_accessed;
+               kvmppc_set_gpr(vcpu, ra, vcpu->arch.paddr_accessed);
                break;
 
        case OP_LBZ:
@@ -397,35 +399,39 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                ra = get_ra(inst);
                rt = get_rt(inst);
                emulated = kvmppc_handle_load(run, vcpu, rt, 1, 1);
-               vcpu->arch.gpr[ra] = vcpu->arch.paddr_accessed;
+               kvmppc_set_gpr(vcpu, ra, vcpu->arch.paddr_accessed);
                break;
 
        case OP_STW:
                rs = get_rs(inst);
-               emulated = kvmppc_handle_store(run, vcpu, vcpu->arch.gpr[rs],
+               emulated = kvmppc_handle_store(run, vcpu,
+                                              kvmppc_get_gpr(vcpu, rs),
                                               4, 1);
                break;
 
        case OP_STWU:
                ra = get_ra(inst);
                rs = get_rs(inst);
-               emulated = kvmppc_handle_store(run, vcpu, vcpu->arch.gpr[rs],
+               emulated = kvmppc_handle_store(run, vcpu,
+                                              kvmppc_get_gpr(vcpu, rs),
                                               4, 1);
-               vcpu->arch.gpr[ra] = vcpu->arch.paddr_accessed;
+               kvmppc_set_gpr(vcpu, ra, vcpu->arch.paddr_accessed);
                break;
 
        case OP_STB:
                rs = get_rs(inst);
-               emulated = kvmppc_handle_store(run, vcpu, vcpu->arch.gpr[rs],
+               emulated = kvmppc_handle_store(run, vcpu,
+                                              kvmppc_get_gpr(vcpu, rs),
                                               1, 1);
                break;
 
        case OP_STBU:
                ra = get_ra(inst);
                rs = get_rs(inst);
-               emulated = kvmppc_handle_store(run, vcpu, vcpu->arch.gpr[rs],
+               emulated = kvmppc_handle_store(run, vcpu,
+                                              kvmppc_get_gpr(vcpu, rs),
                                               1, 1);
-               vcpu->arch.gpr[ra] = vcpu->arch.paddr_accessed;
+               kvmppc_set_gpr(vcpu, ra, vcpu->arch.paddr_accessed);
                break;
 
        case OP_LHZ:
@@ -437,21 +443,23 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                ra = get_ra(inst);
                rt = get_rt(inst);
                emulated = kvmppc_handle_load(run, vcpu, rt, 2, 1);
-               vcpu->arch.gpr[ra] = vcpu->arch.paddr_accessed;
+               kvmppc_set_gpr(vcpu, ra, vcpu->arch.paddr_accessed);
                break;
 
        case OP_STH:
                rs = get_rs(inst);
-               emulated = kvmppc_handle_store(run, vcpu, vcpu->arch.gpr[rs],
+               emulated = kvmppc_handle_store(run, vcpu,
+                                              kvmppc_get_gpr(vcpu, rs),
                                               2, 1);
                break;
 
        case OP_STHU:
                ra = get_ra(inst);
                rs = get_rs(inst);
-               emulated = kvmppc_handle_store(run, vcpu, vcpu->arch.gpr[rs],
+               emulated = kvmppc_handle_store(run, vcpu,
+                                              kvmppc_get_gpr(vcpu, rs),
                                               2, 1);
-               vcpu->arch.gpr[ra] = vcpu->arch.paddr_accessed;
+               kvmppc_set_gpr(vcpu, ra, vcpu->arch.paddr_accessed);
                break;
 
        default: