Lines Matching refs:vcpu

36 static void save_guest_debug_regs(struct kvm_vcpu *vcpu)
38 u64 val = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
40 vcpu->arch.guest_debug_preserved.mdscr_el1 = val;
43 vcpu->arch.guest_debug_preserved.mdscr_el1);
46 static void restore_guest_debug_regs(struct kvm_vcpu *vcpu)
48 u64 val = vcpu->arch.guest_debug_preserved.mdscr_el1;
50 vcpu_write_sys_reg(vcpu, val, MDSCR_EL1);
53 vcpu_read_sys_reg(vcpu, MDSCR_EL1));
72 * kvm_arm_setup_mdcr_el2 - configure vcpu mdcr_el2 value
74 * @vcpu: the vcpu pointer
83 static void kvm_arm_setup_mdcr_el2(struct kvm_vcpu *vcpu)
89 vcpu->arch.mdcr_el2 = __this_cpu_read(mdcr_el2) & MDCR_EL2_HPMN_MASK;
90 vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM |
98 if (vcpu->guest_debug)
100 vcpu->arch.mdcr_el2 |= MDCR_EL2_TDE;
108 if ((vcpu->guest_debug & KVM_GUESTDBG_USE_HW) ||
109 !(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY))
110 vcpu->arch.mdcr_el2 |= MDCR_EL2_TDA;
112 trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2);
116 * kvm_arm_vcpu_init_debug - setup vcpu debug traps
118 * @vcpu: the vcpu pointer
120 * Set vcpu initial mdcr_el2 value.
122 void kvm_arm_vcpu_init_debug(struct kvm_vcpu *vcpu)
125 kvm_arm_setup_mdcr_el2(vcpu);
130 * kvm_arm_reset_debug_ptr - reset the debug ptr to point to the vcpu state
133 void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)
135 vcpu->arch.debug_ptr = &vcpu->arch.vcpu_debug_state;
141 * @vcpu: the vcpu pointer
148 * flag on vcpu->arch.flags). Since the guest must not interfere
154 void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
156 unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2;
158 trace_kvm_arm_setup_debug(vcpu, vcpu->guest_debug);
160 kvm_arm_setup_mdcr_el2(vcpu);
163 if (vcpu->guest_debug) {
165 save_guest_debug_regs(vcpu);
187 if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) {
188 *vcpu_cpsr(vcpu) |= DBG_SPSR_SS;
189 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
191 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1);
193 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
195 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1);
198 trace_kvm_arm_set_dreg32("SPSR_EL2", *vcpu_cpsr(vcpu));
209 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) {
211 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
213 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1);
215 vcpu->arch.debug_ptr = &vcpu->arch.external_debug_state;
216 vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
219 &vcpu->arch.debug_ptr->dbg_bcr[0],
220 &vcpu->arch.debug_ptr->dbg_bvr[0]);
223 &vcpu->arch.debug_ptr->dbg_wcr[0],
224 &vcpu->arch.debug_ptr->dbg_wvr[0]);
228 BUG_ON(!vcpu->guest_debug &&
229 vcpu->arch.debug_ptr != &vcpu->arch.vcpu_debug_state);
232 if (vcpu_read_sys_reg(vcpu, MDSCR_EL1) & (DBG_MDSCR_KDE | DBG_MDSCR_MDE))
233 vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
236 if (has_vhe() && orig_mdcr_el2 != vcpu->arch.mdcr_el2)
237 write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2);
239 trace_kvm_arm_set_dreg32("MDSCR_EL1", vcpu_read_sys_reg(vcpu, MDSCR_EL1));
242 void kvm_arm_clear_debug(struct kvm_vcpu *vcpu)
244 trace_kvm_arm_clear_debug(vcpu->guest_debug);
246 if (vcpu->guest_debug) {
247 restore_guest_debug_regs(vcpu);
253 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) {
254 kvm_arm_reset_debug_ptr(vcpu);
257 &vcpu->arch.debug_ptr->dbg_bcr[0],
258 &vcpu->arch.debug_ptr->dbg_bvr[0]);
261 &vcpu->arch.debug_ptr->dbg_wcr[0],
262 &vcpu->arch.debug_ptr->dbg_wvr[0]);