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:
parent
2190991e7c
commit
348ba71081
@ -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;
|
||||||
|
@ -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
|
||||||
/*
|
/*
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user