Guest visible debug register and hardware visible debug registers are
same, so ther is no need to have arch->shadow_dbg_reg, instead use
arch->dbg_reg.

Signed-off-by: Bharat Bhushan <bharat.bhus...@freescale.com>
---
v2->v3
 - New Patch ( As per comment we are now using arch->dbg_reg only)

 arch/powerpc/include/asm/kvm_host.h |  2 --
 arch/powerpc/kvm/booke.c            | 16 +++++++---------
 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 636b230..cc11aed 100644
--- a/arch/powerpc/include/asm/kvm_host.h
+++ b/arch/powerpc/include/asm/kvm_host.h
@@ -590,8 +590,6 @@ struct kvm_vcpu_arch {
        u32 crit_save;
        /* guest debug registers*/
        struct debug_reg dbg_reg;
-       /* hardware visible debug registers when in guest state */
-       struct debug_reg shadow_dbg_reg;
 #endif
        gpa_t paddr_accessed;
        gva_t vaddr_accessed;
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index b4ab86c..e47de01 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)
 #endif
 
        /* Switch to guest debug context */
-       debug = vcpu->arch.shadow_dbg_reg;
+       debug = vcpu->arch.dbg_reg;
        switch_booke_debug_regs(&debug);
        debug = current->thread.debug;
-       current->thread.debug = vcpu->arch.shadow_dbg_reg;
+       current->thread.debug = vcpu->arch.dbg_reg;
 
        vcpu->arch.pgdir = current->mm->pgd;
        kvmppc_fix_ee_before_entry();
@@ -732,7 +732,7 @@ static int emulation_exit(struct kvm_run *run, struct 
kvm_vcpu *vcpu)
 
 static int kvmppc_handle_debug(struct kvm_run *run, struct kvm_vcpu *vcpu)
 {
-       struct debug_reg *dbg_reg = &(vcpu->arch.shadow_dbg_reg);
+       struct debug_reg *dbg_reg = &(vcpu->arch.dbg_reg);
        u32 dbsr = vcpu->arch.dbsr;
 
        /* Clear guest dbsr (vcpu->arch.dbsr) */
@@ -1848,7 +1848,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu 
*vcpu,
        int n, b = 0, w = 0;
 
        if (!(dbg->control & KVM_GUESTDBG_ENABLE)) {
-               vcpu->arch.shadow_dbg_reg.dbcr0 = 0;
+               vcpu->arch.dbg_reg.dbcr0 = 0;
                vcpu->guest_debug = 0;
                kvm_guest_protect_msr(vcpu, MSR_DE, false);
                return 0;
@@ -1856,15 +1856,13 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu 
*vcpu,
 
        kvm_guest_protect_msr(vcpu, MSR_DE, true);
        vcpu->guest_debug = dbg->control;
-       vcpu->arch.shadow_dbg_reg.dbcr0 = 0;
-       /* Set DBCR0_EDM in guest visible DBCR0 register. */
-       vcpu->arch.dbg_reg.dbcr0 = DBCR0_EDM;
+       vcpu->arch.dbg_reg.dbcr0 = 0;
 
        if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP)
-               vcpu->arch.shadow_dbg_reg.dbcr0 |= DBCR0_IDM | DBCR0_IC;
+               vcpu->arch.dbg_reg.dbcr0 |= DBCR0_IDM | DBCR0_IC;
 
        /* Code below handles only HW breakpoints */
-       dbg_reg = &(vcpu->arch.shadow_dbg_reg);
+       dbg_reg = &(vcpu->arch.dbg_reg);
 
 #ifdef CONFIG_KVM_BOOKE_HV
        /*
diff --git a/arch/powerpc/kvm/booke_emulate.c b/arch/powerpc/kvm/booke_emulate.c
index 4b9a079..92bc668 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)
                break;
        case SPRN_DBCR0:
                *spr_val = vcpu->arch.dbg_reg.dbcr0;
+               if (vcpu->guest_debug)
+                       *spr_val = *spr_val | DBCR0_EDM;
                break;
        case SPRN_DBCR1:
                *spr_val = vcpu->arch.dbg_reg.dbcr1;
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to