2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-24 05:04:00 +08:00

KVM: PPC: BOOKE: Guest and hardware visible debug registers are same

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.Bhushan@freescale.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
Bharat Bhushan 2014-08-06 12:08:55 +05:30 committed by Alexander Graf
parent 2190991e7c
commit 348ba71081
3 changed files with 9 additions and 11 deletions

View File

@ -585,8 +585,6 @@ struct kvm_vcpu_arch {
u32 crit_save; u32 crit_save;
/* guest debug registers*/ /* guest debug registers*/
struct debug_reg dbg_reg; struct debug_reg dbg_reg;
/* hardware visible debug registers when in guest state */
struct debug_reg shadow_dbg_reg;
#endif #endif
gpa_t paddr_accessed; gpa_t paddr_accessed;
gva_t vaddr_accessed; gva_t vaddr_accessed;

View File

@ -668,10 +668,10 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
#endif #endif
/* Switch to guest debug context */ /* Switch to guest debug context */
debug = vcpu->arch.shadow_dbg_reg; debug = vcpu->arch.dbg_reg;
switch_booke_debug_regs(&debug); switch_booke_debug_regs(&debug);
debug = current->thread.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; vcpu->arch.pgdir = current->mm->pgd;
kvmppc_fix_ee_before_entry(); 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) 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; u32 dbsr = vcpu->arch.dbsr;
/* Clear guest 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; int n, b = 0, w = 0;
if (!(dbg->control & KVM_GUESTDBG_ENABLE)) { if (!(dbg->control & KVM_GUESTDBG_ENABLE)) {
vcpu->arch.shadow_dbg_reg.dbcr0 = 0; vcpu->arch.dbg_reg.dbcr0 = 0;
vcpu->guest_debug = 0; vcpu->guest_debug = 0;
kvm_guest_protect_msr(vcpu, MSR_DE, false); kvm_guest_protect_msr(vcpu, MSR_DE, false);
return 0; 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); kvm_guest_protect_msr(vcpu, MSR_DE, true);
vcpu->guest_debug = dbg->control; vcpu->guest_debug = dbg->control;
vcpu->arch.shadow_dbg_reg.dbcr0 = 0; vcpu->arch.dbg_reg.dbcr0 = 0;
/* Set DBCR0_EDM in guest visible DBCR0 register. */
vcpu->arch.dbg_reg.dbcr0 = DBCR0_EDM;
if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) 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 */ /* Code below handles only HW breakpoints */
dbg_reg = &(vcpu->arch.shadow_dbg_reg); dbg_reg = &(vcpu->arch.dbg_reg);
#ifdef CONFIG_KVM_BOOKE_HV #ifdef CONFIG_KVM_BOOKE_HV
/* /*

View File

@ -293,6 +293,8 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val)
break; break;
case SPRN_DBCR0: case SPRN_DBCR0:
*spr_val = vcpu->arch.dbg_reg.dbcr0; *spr_val = vcpu->arch.dbg_reg.dbcr0;
if (vcpu->guest_debug)
*spr_val = *spr_val | DBCR0_EDM;
break; break;
case SPRN_DBCR1: case SPRN_DBCR1:
*spr_val = vcpu->arch.dbg_reg.dbcr1; *spr_val = vcpu->arch.dbg_reg.dbcr1;