diff options
-rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/booke.c | 16 | ||||
-rw-r--r-- | arch/powerpc/kvm/booke_emulate.c | 2 |
3 files changed, 9 insertions, 11 deletions
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index 8a8da0acfd28..bad3491cc32c 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h | |||
@@ -585,8 +585,6 @@ struct kvm_vcpu_arch { | |||
585 | u32 crit_save; | 585 | u32 crit_save; |
586 | /* guest debug registers*/ | 586 | /* guest debug registers*/ |
587 | struct debug_reg dbg_reg; | 587 | struct debug_reg dbg_reg; |
588 | /* hardware visible debug registers when in guest state */ | ||
589 | struct debug_reg shadow_dbg_reg; | ||
590 | #endif | 588 | #endif |
591 | gpa_t paddr_accessed; | 589 | gpa_t paddr_accessed; |
592 | gva_t vaddr_accessed; | 590 | gva_t vaddr_accessed; |
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index b4ab86cdb51d..e47de01b0dbb 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c | |||
@@ -668,10 +668,10 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) | |||
668 | #endif | 668 | #endif |
669 | 669 | ||
670 | /* Switch to guest debug context */ | 670 | /* Switch to guest debug context */ |
671 | debug = vcpu->arch.shadow_dbg_reg; | 671 | debug = vcpu->arch.dbg_reg; |
672 | switch_booke_debug_regs(&debug); | 672 | switch_booke_debug_regs(&debug); |
673 | debug = current->thread.debug; | 673 | debug = current->thread.debug; |
674 | current->thread.debug = vcpu->arch.shadow_dbg_reg; | 674 | current->thread.debug = vcpu->arch.dbg_reg; |
675 | 675 | ||
676 | vcpu->arch.pgdir = current->mm->pgd; | 676 | vcpu->arch.pgdir = current->mm->pgd; |
677 | kvmppc_fix_ee_before_entry(); | 677 | kvmppc_fix_ee_before_entry(); |
@@ -732,7 +732,7 @@ static int emulation_exit(struct kvm_run *run, struct kvm_vcpu *vcpu) | |||
732 | 732 | ||
733 | static int kvmppc_handle_debug(struct kvm_run *run, struct kvm_vcpu *vcpu) | 733 | static int kvmppc_handle_debug(struct kvm_run *run, struct kvm_vcpu *vcpu) |
734 | { | 734 | { |
735 | struct debug_reg *dbg_reg = &(vcpu->arch.shadow_dbg_reg); | 735 | struct debug_reg *dbg_reg = &(vcpu->arch.dbg_reg); |
736 | u32 dbsr = vcpu->arch.dbsr; | 736 | u32 dbsr = vcpu->arch.dbsr; |
737 | 737 | ||
738 | /* Clear guest dbsr (vcpu->arch.dbsr) */ | 738 | /* Clear guest dbsr (vcpu->arch.dbsr) */ |
@@ -1848,7 +1848,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, | |||
1848 | int n, b = 0, w = 0; | 1848 | int n, b = 0, w = 0; |
1849 | 1849 | ||
1850 | if (!(dbg->control & KVM_GUESTDBG_ENABLE)) { | 1850 | if (!(dbg->control & KVM_GUESTDBG_ENABLE)) { |
1851 | vcpu->arch.shadow_dbg_reg.dbcr0 = 0; | 1851 | vcpu->arch.dbg_reg.dbcr0 = 0; |
1852 | vcpu->guest_debug = 0; | 1852 | vcpu->guest_debug = 0; |
1853 | kvm_guest_protect_msr(vcpu, MSR_DE, false); | 1853 | kvm_guest_protect_msr(vcpu, MSR_DE, false); |
1854 | return 0; | 1854 | return 0; |
@@ -1856,15 +1856,13 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, | |||
1856 | 1856 | ||
1857 | kvm_guest_protect_msr(vcpu, MSR_DE, true); | 1857 | kvm_guest_protect_msr(vcpu, MSR_DE, true); |
1858 | vcpu->guest_debug = dbg->control; | 1858 | vcpu->guest_debug = dbg->control; |
1859 | vcpu->arch.shadow_dbg_reg.dbcr0 = 0; | 1859 | vcpu->arch.dbg_reg.dbcr0 = 0; |
1860 | /* Set DBCR0_EDM in guest visible DBCR0 register. */ | ||
1861 | vcpu->arch.dbg_reg.dbcr0 = DBCR0_EDM; | ||
1862 | 1860 | ||
1863 | if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) | 1861 | if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) |
1864 | vcpu->arch.shadow_dbg_reg.dbcr0 |= DBCR0_IDM | DBCR0_IC; | 1862 | vcpu->arch.dbg_reg.dbcr0 |= DBCR0_IDM | DBCR0_IC; |
1865 | 1863 | ||
1866 | /* Code below handles only HW breakpoints */ | 1864 | /* Code below handles only HW breakpoints */ |
1867 | dbg_reg = &(vcpu->arch.shadow_dbg_reg); | 1865 | dbg_reg = &(vcpu->arch.dbg_reg); |
1868 | 1866 | ||
1869 | #ifdef CONFIG_KVM_BOOKE_HV | 1867 | #ifdef CONFIG_KVM_BOOKE_HV |
1870 | /* | 1868 | /* |
diff --git a/arch/powerpc/kvm/booke_emulate.c b/arch/powerpc/kvm/booke_emulate.c index 4b9a07992753..92bc668d3e08 100644 --- a/arch/powerpc/kvm/booke_emulate.c +++ b/arch/powerpc/kvm/booke_emulate.c | |||
@@ -293,6 +293,8 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val) | |||
293 | break; | 293 | break; |
294 | case SPRN_DBCR0: | 294 | case SPRN_DBCR0: |
295 | *spr_val = vcpu->arch.dbg_reg.dbcr0; | 295 | *spr_val = vcpu->arch.dbg_reg.dbcr0; |
296 | if (vcpu->guest_debug) | ||
297 | *spr_val = *spr_val | DBCR0_EDM; | ||
296 | break; | 298 | break; |
297 | case SPRN_DBCR1: | 299 | case SPRN_DBCR1: |
298 | *spr_val = vcpu->arch.dbg_reg.dbcr1; | 300 | *spr_val = vcpu->arch.dbg_reg.dbcr1; |