diff options
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/include/asm/kvm.h | 7 | ||||
-rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 8 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_paired_singles.c | 9 | ||||
-rw-r--r-- | arch/powerpc/kvm/powerpc.c | 18 |
4 files changed, 23 insertions, 19 deletions
diff --git a/arch/powerpc/include/asm/kvm.h b/arch/powerpc/include/asm/kvm.h index f41adcda1468..b921c3f48928 100644 --- a/arch/powerpc/include/asm/kvm.h +++ b/arch/powerpc/include/asm/kvm.h | |||
@@ -269,13 +269,6 @@ struct kvm_guest_debug_arch { | |||
269 | struct kvm_sync_regs { | 269 | struct kvm_sync_regs { |
270 | }; | 270 | }; |
271 | 271 | ||
272 | #define KVM_REG_MASK 0x001f | ||
273 | #define KVM_REG_EXT_MASK 0xffe0 | ||
274 | #define KVM_REG_GPR 0x0000 | ||
275 | #define KVM_REG_FPR 0x0020 | ||
276 | #define KVM_REG_QPR 0x0040 | ||
277 | #define KVM_REG_FQPR 0x0060 | ||
278 | |||
279 | #define KVM_INTERRUPT_SET -1U | 272 | #define KVM_INTERRUPT_SET -1U |
280 | #define KVM_INTERRUPT_UNSET -2U | 273 | #define KVM_INTERRUPT_UNSET -2U |
281 | #define KVM_INTERRUPT_SET_LEVEL -3U | 274 | #define KVM_INTERRUPT_SET_LEVEL -3U |
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index 1cb6e522485b..af438b1e8a3c 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h | |||
@@ -485,4 +485,12 @@ struct kvm_vcpu_arch { | |||
485 | #define KVMPPC_VCPU_BUSY_IN_HOST 1 | 485 | #define KVMPPC_VCPU_BUSY_IN_HOST 1 |
486 | #define KVMPPC_VCPU_RUNNABLE 2 | 486 | #define KVMPPC_VCPU_RUNNABLE 2 |
487 | 487 | ||
488 | /* Values for vcpu->arch.io_gpr */ | ||
489 | #define KVM_MMIO_REG_MASK 0x001f | ||
490 | #define KVM_MMIO_REG_EXT_MASK 0xffe0 | ||
491 | #define KVM_MMIO_REG_GPR 0x0000 | ||
492 | #define KVM_MMIO_REG_FPR 0x0020 | ||
493 | #define KVM_MMIO_REG_QPR 0x0040 | ||
494 | #define KVM_MMIO_REG_FQPR 0x0060 | ||
495 | |||
488 | #endif /* __POWERPC_KVM_HOST_H__ */ | 496 | #endif /* __POWERPC_KVM_HOST_H__ */ |
diff --git a/arch/powerpc/kvm/book3s_paired_singles.c b/arch/powerpc/kvm/book3s_paired_singles.c index 7b0ee96c1bed..e70ef2d86431 100644 --- a/arch/powerpc/kvm/book3s_paired_singles.c +++ b/arch/powerpc/kvm/book3s_paired_singles.c | |||
@@ -196,7 +196,8 @@ static int kvmppc_emulate_fpr_load(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
196 | kvmppc_inject_pf(vcpu, addr, false); | 196 | kvmppc_inject_pf(vcpu, addr, false); |
197 | goto done_load; | 197 | goto done_load; |
198 | } else if (r == EMULATE_DO_MMIO) { | 198 | } else if (r == EMULATE_DO_MMIO) { |
199 | emulated = kvmppc_handle_load(run, vcpu, KVM_REG_FPR | rs, len, 1); | 199 | emulated = kvmppc_handle_load(run, vcpu, KVM_MMIO_REG_FPR | rs, |
200 | len, 1); | ||
200 | goto done_load; | 201 | goto done_load; |
201 | } | 202 | } |
202 | 203 | ||
@@ -286,11 +287,13 @@ static int kvmppc_emulate_psq_load(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
286 | kvmppc_inject_pf(vcpu, addr, false); | 287 | kvmppc_inject_pf(vcpu, addr, false); |
287 | goto done_load; | 288 | goto done_load; |
288 | } else if ((r == EMULATE_DO_MMIO) && w) { | 289 | } else if ((r == EMULATE_DO_MMIO) && w) { |
289 | emulated = kvmppc_handle_load(run, vcpu, KVM_REG_FPR | rs, 4, 1); | 290 | emulated = kvmppc_handle_load(run, vcpu, KVM_MMIO_REG_FPR | rs, |
291 | 4, 1); | ||
290 | vcpu->arch.qpr[rs] = tmp[1]; | 292 | vcpu->arch.qpr[rs] = tmp[1]; |
291 | goto done_load; | 293 | goto done_load; |
292 | } else if (r == EMULATE_DO_MMIO) { | 294 | } else if (r == EMULATE_DO_MMIO) { |
293 | emulated = kvmppc_handle_load(run, vcpu, KVM_REG_FQPR | rs, 8, 1); | 295 | emulated = kvmppc_handle_load(run, vcpu, KVM_MMIO_REG_FQPR | rs, |
296 | 8, 1); | ||
294 | goto done_load; | 297 | goto done_load; |
295 | } | 298 | } |
296 | 299 | ||
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index e23270779ff5..0e21d155eea7 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c | |||
@@ -448,20 +448,20 @@ static void kvmppc_complete_mmio_load(struct kvm_vcpu *vcpu, | |||
448 | 448 | ||
449 | kvmppc_set_gpr(vcpu, vcpu->arch.io_gpr, gpr); | 449 | kvmppc_set_gpr(vcpu, vcpu->arch.io_gpr, gpr); |
450 | 450 | ||
451 | switch (vcpu->arch.io_gpr & KVM_REG_EXT_MASK) { | 451 | switch (vcpu->arch.io_gpr & KVM_MMIO_REG_EXT_MASK) { |
452 | case KVM_REG_GPR: | 452 | case KVM_MMIO_REG_GPR: |
453 | kvmppc_set_gpr(vcpu, vcpu->arch.io_gpr, gpr); | 453 | kvmppc_set_gpr(vcpu, vcpu->arch.io_gpr, gpr); |
454 | break; | 454 | break; |
455 | case KVM_REG_FPR: | 455 | case KVM_MMIO_REG_FPR: |
456 | vcpu->arch.fpr[vcpu->arch.io_gpr & KVM_REG_MASK] = gpr; | 456 | vcpu->arch.fpr[vcpu->arch.io_gpr & KVM_MMIO_REG_MASK] = gpr; |
457 | break; | 457 | break; |
458 | #ifdef CONFIG_PPC_BOOK3S | 458 | #ifdef CONFIG_PPC_BOOK3S |
459 | case KVM_REG_QPR: | 459 | case KVM_MMIO_REG_QPR: |
460 | vcpu->arch.qpr[vcpu->arch.io_gpr & KVM_REG_MASK] = gpr; | 460 | vcpu->arch.qpr[vcpu->arch.io_gpr & KVM_MMIO_REG_MASK] = gpr; |
461 | break; | 461 | break; |
462 | case KVM_REG_FQPR: | 462 | case KVM_MMIO_REG_FQPR: |
463 | vcpu->arch.fpr[vcpu->arch.io_gpr & KVM_REG_MASK] = gpr; | 463 | vcpu->arch.fpr[vcpu->arch.io_gpr & KVM_MMIO_REG_MASK] = gpr; |
464 | vcpu->arch.qpr[vcpu->arch.io_gpr & KVM_REG_MASK] = gpr; | 464 | vcpu->arch.qpr[vcpu->arch.io_gpr & KVM_MMIO_REG_MASK] = gpr; |
465 | break; | 465 | break; |
466 | #endif | 466 | #endif |
467 | default: | 467 | default: |