diff options
| -rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 2 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/kvm_para.h | 2 | ||||
| -rw-r--r-- | arch/powerpc/kvm/book3s.c | 12 | ||||
| -rw-r--r-- | arch/powerpc/kvm/book3s_emulate.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/kvm/booke.c | 15 | ||||
| -rw-r--r-- | arch/powerpc/kvm/booke_emulate.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/kvm/emulate.c | 12 |
7 files changed, 28 insertions, 23 deletions
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index c852408eac3..5255d754f9a 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h | |||
| @@ -225,8 +225,6 @@ struct kvm_vcpu_arch { | |||
| 225 | ulong sprg5; | 225 | ulong sprg5; |
| 226 | ulong sprg6; | 226 | ulong sprg6; |
| 227 | ulong sprg7; | 227 | ulong sprg7; |
| 228 | ulong srr0; | ||
| 229 | ulong srr1; | ||
| 230 | ulong csrr0; | 228 | ulong csrr0; |
| 231 | ulong csrr1; | 229 | ulong csrr1; |
| 232 | ulong dsrr0; | 230 | ulong dsrr0; |
diff --git a/arch/powerpc/include/asm/kvm_para.h b/arch/powerpc/include/asm/kvm_para.h index ec72a1c8c04..d7fc6c2c973 100644 --- a/arch/powerpc/include/asm/kvm_para.h +++ b/arch/powerpc/include/asm/kvm_para.h | |||
| @@ -23,6 +23,8 @@ | |||
| 23 | #include <linux/types.h> | 23 | #include <linux/types.h> |
| 24 | 24 | ||
| 25 | struct kvm_vcpu_arch_shared { | 25 | struct kvm_vcpu_arch_shared { |
| 26 | __u64 srr0; | ||
| 27 | __u64 srr1; | ||
| 26 | __u64 dar; | 28 | __u64 dar; |
| 27 | __u64 msr; | 29 | __u64 msr; |
| 28 | __u32 dsisr; | 30 | __u32 dsisr; |
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index 4d46f8b13cc..afa0dd4a27f 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c | |||
| @@ -162,8 +162,8 @@ void kvmppc_set_msr(struct kvm_vcpu *vcpu, u64 msr) | |||
| 162 | 162 | ||
| 163 | void kvmppc_inject_interrupt(struct kvm_vcpu *vcpu, int vec, u64 flags) | 163 | void kvmppc_inject_interrupt(struct kvm_vcpu *vcpu, int vec, u64 flags) |
| 164 | { | 164 | { |
| 165 | vcpu->arch.srr0 = kvmppc_get_pc(vcpu); | 165 | vcpu->arch.shared->srr0 = kvmppc_get_pc(vcpu); |
| 166 | vcpu->arch.srr1 = vcpu->arch.shared->msr | flags; | 166 | vcpu->arch.shared->srr1 = vcpu->arch.shared->msr | flags; |
| 167 | kvmppc_set_pc(vcpu, to_book3s(vcpu)->hior + vec); | 167 | kvmppc_set_pc(vcpu, to_book3s(vcpu)->hior + vec); |
| 168 | vcpu->arch.mmu.reset_msr(vcpu); | 168 | vcpu->arch.mmu.reset_msr(vcpu); |
| 169 | } | 169 | } |
| @@ -1059,8 +1059,8 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
| 1059 | regs->lr = kvmppc_get_lr(vcpu); | 1059 | regs->lr = kvmppc_get_lr(vcpu); |
| 1060 | regs->xer = kvmppc_get_xer(vcpu); | 1060 | regs->xer = kvmppc_get_xer(vcpu); |
| 1061 | regs->msr = vcpu->arch.shared->msr; | 1061 | regs->msr = vcpu->arch.shared->msr; |
| 1062 | regs->srr0 = vcpu->arch.srr0; | 1062 | regs->srr0 = vcpu->arch.shared->srr0; |
| 1063 | regs->srr1 = vcpu->arch.srr1; | 1063 | regs->srr1 = vcpu->arch.shared->srr1; |
| 1064 | regs->pid = vcpu->arch.pid; | 1064 | regs->pid = vcpu->arch.pid; |
| 1065 | regs->sprg0 = vcpu->arch.sprg0; | 1065 | regs->sprg0 = vcpu->arch.sprg0; |
| 1066 | regs->sprg1 = vcpu->arch.sprg1; | 1066 | regs->sprg1 = vcpu->arch.sprg1; |
| @@ -1086,8 +1086,8 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
| 1086 | kvmppc_set_lr(vcpu, regs->lr); | 1086 | kvmppc_set_lr(vcpu, regs->lr); |
| 1087 | kvmppc_set_xer(vcpu, regs->xer); | 1087 | kvmppc_set_xer(vcpu, regs->xer); |
| 1088 | kvmppc_set_msr(vcpu, regs->msr); | 1088 | kvmppc_set_msr(vcpu, regs->msr); |
| 1089 | vcpu->arch.srr0 = regs->srr0; | 1089 | vcpu->arch.shared->srr0 = regs->srr0; |
| 1090 | vcpu->arch.srr1 = regs->srr1; | 1090 | vcpu->arch.shared->srr1 = regs->srr1; |
| 1091 | vcpu->arch.sprg0 = regs->sprg0; | 1091 | vcpu->arch.sprg0 = regs->sprg0; |
| 1092 | vcpu->arch.sprg1 = regs->sprg1; | 1092 | vcpu->arch.sprg1 = regs->sprg1; |
| 1093 | vcpu->arch.sprg2 = regs->sprg2; | 1093 | vcpu->arch.sprg2 = regs->sprg2; |
diff --git a/arch/powerpc/kvm/book3s_emulate.c b/arch/powerpc/kvm/book3s_emulate.c index c1478642f85..f333cb44534 100644 --- a/arch/powerpc/kvm/book3s_emulate.c +++ b/arch/powerpc/kvm/book3s_emulate.c | |||
| @@ -73,8 +73,8 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
| 73 | switch (get_xop(inst)) { | 73 | switch (get_xop(inst)) { |
| 74 | case OP_19_XOP_RFID: | 74 | case OP_19_XOP_RFID: |
| 75 | case OP_19_XOP_RFI: | 75 | case OP_19_XOP_RFI: |
| 76 | kvmppc_set_pc(vcpu, vcpu->arch.srr0); | 76 | kvmppc_set_pc(vcpu, vcpu->arch.shared->srr0); |
| 77 | kvmppc_set_msr(vcpu, vcpu->arch.srr1); | 77 | kvmppc_set_msr(vcpu, vcpu->arch.shared->srr1); |
| 78 | *advance = 0; | 78 | *advance = 0; |
| 79 | break; | 79 | break; |
| 80 | 80 | ||
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index 4aab6d2ce13..793df28b628 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c | |||
| @@ -64,7 +64,8 @@ void kvmppc_dump_vcpu(struct kvm_vcpu *vcpu) | |||
| 64 | 64 | ||
| 65 | printk("pc: %08lx msr: %08llx\n", vcpu->arch.pc, vcpu->arch.shared->msr); | 65 | printk("pc: %08lx msr: %08llx\n", vcpu->arch.pc, vcpu->arch.shared->msr); |
| 66 | printk("lr: %08lx ctr: %08lx\n", vcpu->arch.lr, vcpu->arch.ctr); | 66 | printk("lr: %08lx ctr: %08lx\n", vcpu->arch.lr, vcpu->arch.ctr); |
| 67 | printk("srr0: %08lx srr1: %08lx\n", vcpu->arch.srr0, vcpu->arch.srr1); | 67 | printk("srr0: %08llx srr1: %08llx\n", vcpu->arch.shared->srr0, |
| 68 | vcpu->arch.shared->srr1); | ||
| 68 | 69 | ||
| 69 | printk("exceptions: %08lx\n", vcpu->arch.pending_exceptions); | 70 | printk("exceptions: %08lx\n", vcpu->arch.pending_exceptions); |
| 70 | 71 | ||
| @@ -189,8 +190,8 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu, | |||
| 189 | } | 190 | } |
| 190 | 191 | ||
| 191 | if (allowed) { | 192 | if (allowed) { |
| 192 | vcpu->arch.srr0 = vcpu->arch.pc; | 193 | vcpu->arch.shared->srr0 = vcpu->arch.pc; |
| 193 | vcpu->arch.srr1 = vcpu->arch.shared->msr; | 194 | vcpu->arch.shared->srr1 = vcpu->arch.shared->msr; |
| 194 | vcpu->arch.pc = vcpu->arch.ivpr | vcpu->arch.ivor[priority]; | 195 | vcpu->arch.pc = vcpu->arch.ivpr | vcpu->arch.ivor[priority]; |
| 195 | if (update_esr == true) | 196 | if (update_esr == true) |
| 196 | vcpu->arch.esr = vcpu->arch.queued_esr; | 197 | vcpu->arch.esr = vcpu->arch.queued_esr; |
| @@ -491,8 +492,8 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
| 491 | regs->lr = vcpu->arch.lr; | 492 | regs->lr = vcpu->arch.lr; |
| 492 | regs->xer = kvmppc_get_xer(vcpu); | 493 | regs->xer = kvmppc_get_xer(vcpu); |
| 493 | regs->msr = vcpu->arch.shared->msr; | 494 | regs->msr = vcpu->arch.shared->msr; |
| 494 | regs->srr0 = vcpu->arch.srr0; | 495 | regs->srr0 = vcpu->arch.shared->srr0; |
| 495 | regs->srr1 = vcpu->arch.srr1; | 496 | regs->srr1 = vcpu->arch.shared->srr1; |
| 496 | regs->pid = vcpu->arch.pid; | 497 | regs->pid = vcpu->arch.pid; |
| 497 | regs->sprg0 = vcpu->arch.sprg0; | 498 | regs->sprg0 = vcpu->arch.sprg0; |
| 498 | regs->sprg1 = vcpu->arch.sprg1; | 499 | regs->sprg1 = vcpu->arch.sprg1; |
| @@ -518,8 +519,8 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
| 518 | vcpu->arch.lr = regs->lr; | 519 | vcpu->arch.lr = regs->lr; |
| 519 | kvmppc_set_xer(vcpu, regs->xer); | 520 | kvmppc_set_xer(vcpu, regs->xer); |
| 520 | kvmppc_set_msr(vcpu, regs->msr); | 521 | kvmppc_set_msr(vcpu, regs->msr); |
| 521 | vcpu->arch.srr0 = regs->srr0; | 522 | vcpu->arch.shared->srr0 = regs->srr0; |
| 522 | vcpu->arch.srr1 = regs->srr1; | 523 | vcpu->arch.shared->srr1 = regs->srr1; |
| 523 | vcpu->arch.sprg0 = regs->sprg0; | 524 | vcpu->arch.sprg0 = regs->sprg0; |
| 524 | vcpu->arch.sprg1 = regs->sprg1; | 525 | vcpu->arch.sprg1 = regs->sprg1; |
| 525 | vcpu->arch.sprg2 = regs->sprg2; | 526 | vcpu->arch.sprg2 = regs->sprg2; |
diff --git a/arch/powerpc/kvm/booke_emulate.c b/arch/powerpc/kvm/booke_emulate.c index 51ef4539ed5..1260f5f24c0 100644 --- a/arch/powerpc/kvm/booke_emulate.c +++ b/arch/powerpc/kvm/booke_emulate.c | |||
| @@ -31,8 +31,8 @@ | |||
| 31 | 31 | ||
| 32 | static void kvmppc_emul_rfi(struct kvm_vcpu *vcpu) | 32 | static void kvmppc_emul_rfi(struct kvm_vcpu *vcpu) |
| 33 | { | 33 | { |
| 34 | vcpu->arch.pc = vcpu->arch.srr0; | 34 | vcpu->arch.pc = vcpu->arch.shared->srr0; |
| 35 | kvmppc_set_msr(vcpu, vcpu->arch.srr1); | 35 | kvmppc_set_msr(vcpu, vcpu->arch.shared->srr1); |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | int kvmppc_booke_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu, | 38 | int kvmppc_booke_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu, |
diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c index 4568ec386c2..ad0fa4ff4ea 100644 --- a/arch/powerpc/kvm/emulate.c +++ b/arch/powerpc/kvm/emulate.c | |||
| @@ -242,9 +242,11 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu) | |||
| 242 | 242 | ||
| 243 | switch (sprn) { | 243 | switch (sprn) { |
| 244 | case SPRN_SRR0: | 244 | case SPRN_SRR0: |
| 245 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.srr0); break; | 245 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->srr0); |
| 246 | break; | ||
| 246 | case SPRN_SRR1: | 247 | case SPRN_SRR1: |
| 247 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.srr1); break; | 248 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->srr1); |
| 249 | break; | ||
| 248 | case SPRN_PVR: | 250 | case SPRN_PVR: |
| 249 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.pvr); break; | 251 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.pvr); break; |
| 250 | case SPRN_PIR: | 252 | case SPRN_PIR: |
| @@ -320,9 +322,11 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu) | |||
| 320 | rs = get_rs(inst); | 322 | rs = get_rs(inst); |
| 321 | switch (sprn) { | 323 | switch (sprn) { |
| 322 | case SPRN_SRR0: | 324 | case SPRN_SRR0: |
| 323 | vcpu->arch.srr0 = kvmppc_get_gpr(vcpu, rs); break; | 325 | vcpu->arch.shared->srr0 = kvmppc_get_gpr(vcpu, rs); |
| 326 | break; | ||
| 324 | case SPRN_SRR1: | 327 | case SPRN_SRR1: |
| 325 | vcpu->arch.srr1 = kvmppc_get_gpr(vcpu, rs); break; | 328 | vcpu->arch.shared->srr1 = kvmppc_get_gpr(vcpu, rs); |
| 329 | break; | ||
| 326 | 330 | ||
| 327 | /* XXX We need to context-switch the timebase for | 331 | /* XXX We need to context-switch the timebase for |
| 328 | * watchdog and FIT. */ | 332 | * watchdog and FIT. */ |
