Lines Matching refs:vcpu
38 * for the vcpu after the single-step is disabled.
40 static void save_guest_debug_regs(struct kvm_vcpu *vcpu)
42 u64 val = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
44 vcpu->arch.guest_debug_preserved.mdscr_el1 = val;
47 vcpu->arch.guest_debug_preserved.mdscr_el1);
49 vcpu->arch.guest_debug_preserved.pstate_ss =
50 (*vcpu_cpsr(vcpu) & DBG_SPSR_SS);
53 static void restore_guest_debug_regs(struct kvm_vcpu *vcpu)
55 u64 val = vcpu->arch.guest_debug_preserved.mdscr_el1;
57 vcpu_write_sys_reg(vcpu, val, MDSCR_EL1);
60 vcpu_read_sys_reg(vcpu, MDSCR_EL1));
62 if (vcpu->arch.guest_debug_preserved.pstate_ss)
63 *vcpu_cpsr(vcpu) |= DBG_SPSR_SS;
65 *vcpu_cpsr(vcpu) &= ~DBG_SPSR_SS;
84 * kvm_arm_setup_mdcr_el2 - configure vcpu mdcr_el2 value
86 * @vcpu: the vcpu pointer
96 static void kvm_arm_setup_mdcr_el2(struct kvm_vcpu *vcpu)
102 vcpu->arch.mdcr_el2 = __this_cpu_read(mdcr_el2) & MDCR_EL2_HPMN_MASK;
103 vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM |
111 if (vcpu->guest_debug)
113 vcpu->arch.mdcr_el2 |= MDCR_EL2_TDE;
122 if ((vcpu->guest_debug & KVM_GUESTDBG_USE_HW) ||
123 !vcpu_get_flag(vcpu, DEBUG_DIRTY) ||
124 kvm_vcpu_os_lock_enabled(vcpu))
125 vcpu->arch.mdcr_el2 |= MDCR_EL2_TDA;
127 trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2);
131 * kvm_arm_vcpu_init_debug - setup vcpu debug traps
133 * @vcpu: the vcpu pointer
135 * Set vcpu initial mdcr_el2 value.
137 void kvm_arm_vcpu_init_debug(struct kvm_vcpu *vcpu)
140 kvm_arm_setup_mdcr_el2(vcpu);
145 * kvm_arm_reset_debug_ptr - reset the debug ptr to point to the vcpu state
148 void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)
150 vcpu->arch.debug_ptr = &vcpu->arch.vcpu_debug_state;
156 * @vcpu: the vcpu pointer
163 * flag on vcpu->arch.iflags). Since the guest must not interfere
169 void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
171 unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2;
173 trace_kvm_arm_setup_debug(vcpu, vcpu->guest_debug);
175 kvm_arm_setup_mdcr_el2(vcpu);
178 if (vcpu->guest_debug || kvm_vcpu_os_lock_enabled(vcpu)) {
180 save_guest_debug_regs(vcpu);
202 if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) {
210 if (!vcpu_get_flag(vcpu, DBG_SS_ACTIVE_PENDING))
211 *vcpu_cpsr(vcpu) |= DBG_SPSR_SS;
213 *vcpu_cpsr(vcpu) &= ~DBG_SPSR_SS;
215 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
217 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1);
219 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
221 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1);
224 trace_kvm_arm_set_dreg32("SPSR_EL2", *vcpu_cpsr(vcpu));
234 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) {
236 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
238 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1);
240 vcpu->arch.debug_ptr = &vcpu->arch.external_debug_state;
241 vcpu_set_flag(vcpu, DEBUG_DIRTY);
244 &vcpu->arch.debug_ptr->dbg_bcr[0],
245 &vcpu->arch.debug_ptr->dbg_bvr[0]);
248 &vcpu->arch.debug_ptr->dbg_wcr[0],
249 &vcpu->arch.debug_ptr->dbg_wvr[0]);
259 } else if (kvm_vcpu_os_lock_enabled(vcpu)) {
260 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1);
262 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1);
266 BUG_ON(!vcpu->guest_debug &&
267 vcpu->arch.debug_ptr != &vcpu->arch.vcpu_debug_state);
270 if (vcpu_read_sys_reg(vcpu, MDSCR_EL1) & (DBG_MDSCR_KDE | DBG_MDSCR_MDE))
271 vcpu_set_flag(vcpu, DEBUG_DIRTY);
274 if (has_vhe() && orig_mdcr_el2 != vcpu->arch.mdcr_el2)
275 write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2);
277 trace_kvm_arm_set_dreg32("MDSCR_EL1", vcpu_read_sys_reg(vcpu, MDSCR_EL1));
280 void kvm_arm_clear_debug(struct kvm_vcpu *vcpu)
282 trace_kvm_arm_clear_debug(vcpu->guest_debug);
287 if (vcpu->guest_debug || kvm_vcpu_os_lock_enabled(vcpu)) {
288 if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) {
289 if (!(*vcpu_cpsr(vcpu) & DBG_SPSR_SS))
291 * Mark the vcpu as ACTIVE_PENDING
294 vcpu_set_flag(vcpu, DBG_SS_ACTIVE_PENDING);
297 restore_guest_debug_regs(vcpu);
303 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) {
304 kvm_arm_reset_debug_ptr(vcpu);
307 &vcpu->arch.debug_ptr->dbg_bcr[0],
308 &vcpu->arch.debug_ptr->dbg_bvr[0]);
311 &vcpu->arch.debug_ptr->dbg_wcr[0],
312 &vcpu->arch.debug_ptr->dbg_wvr[0]);
317 void kvm_arch_vcpu_load_debug_state_flags(struct kvm_vcpu *vcpu)
332 vcpu_set_flag(vcpu, DEBUG_STATE_SAVE_SPE);
337 vcpu_set_flag(vcpu, DEBUG_STATE_SAVE_TRBE);
340 void kvm_arch_vcpu_put_debug_state_flags(struct kvm_vcpu *vcpu)
342 vcpu_clear_flag(vcpu, DEBUG_STATE_SAVE_SPE);
343 vcpu_clear_flag(vcpu, DEBUG_STATE_SAVE_TRBE);