diff options
Diffstat (limited to 'arch/arm64/kvm/debug.c')
| -rw-r--r-- | arch/arm64/kvm/debug.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/arm64/kvm/debug.c b/arch/arm64/kvm/debug.c index 43487f035385..7a7e425616b5 100644 --- a/arch/arm64/kvm/debug.c +++ b/arch/arm64/kvm/debug.c @@ -101,7 +101,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)  void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)  {  	bool trap_debug = !(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY); -	unsigned long mdscr; +	unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2;  	trace_kvm_arm_setup_debug(vcpu, vcpu->guest_debug); @@ -197,6 +197,10 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)  	if (vcpu_read_sys_reg(vcpu, MDSCR_EL1) & (DBG_MDSCR_KDE | DBG_MDSCR_MDE))  		vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY; +	/* Write mdcr_el2 changes since vcpu_load on VHE systems */ +	if (has_vhe() && orig_mdcr_el2 != vcpu->arch.mdcr_el2) +		write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2); +  	trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2);  	trace_kvm_arm_set_dreg32("MDSCR_EL1", vcpu_read_sys_reg(vcpu, MDSCR_EL1));  }  |