Lines Matching full:vcpu
36 static void save_guest_debug_regs(struct kvm_vcpu *vcpu) in save_guest_debug_regs() argument
38 u64 val = vcpu_read_sys_reg(vcpu, MDSCR_EL1); in save_guest_debug_regs()
40 vcpu->arch.guest_debug_preserved.mdscr_el1 = val; in save_guest_debug_regs()
43 vcpu->arch.guest_debug_preserved.mdscr_el1); in save_guest_debug_regs()
46 static void restore_guest_debug_regs(struct kvm_vcpu *vcpu) in restore_guest_debug_regs() argument
48 u64 val = vcpu->arch.guest_debug_preserved.mdscr_el1; in restore_guest_debug_regs()
50 vcpu_write_sys_reg(vcpu, val, MDSCR_EL1); in restore_guest_debug_regs()
53 vcpu_read_sys_reg(vcpu, MDSCR_EL1)); in restore_guest_debug_regs()
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) in kvm_arm_setup_mdcr_el2() argument
89 vcpu->arch.mdcr_el2 = __this_cpu_read(mdcr_el2) & MDCR_EL2_HPMN_MASK; in kvm_arm_setup_mdcr_el2()
90 vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM | in kvm_arm_setup_mdcr_el2()
98 if (vcpu->guest_debug) in kvm_arm_setup_mdcr_el2()
100 vcpu->arch.mdcr_el2 |= MDCR_EL2_TDE; in kvm_arm_setup_mdcr_el2()
108 if ((vcpu->guest_debug & KVM_GUESTDBG_USE_HW) || in kvm_arm_setup_mdcr_el2()
109 !(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY)) in kvm_arm_setup_mdcr_el2()
110 vcpu->arch.mdcr_el2 |= MDCR_EL2_TDA; in kvm_arm_setup_mdcr_el2()
112 trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2); in kvm_arm_setup_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) in kvm_arm_vcpu_init_debug() argument
125 kvm_arm_setup_mdcr_el2(vcpu); in kvm_arm_vcpu_init_debug()
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) in kvm_arm_reset_debug_ptr() argument
135 vcpu->arch.debug_ptr = &vcpu->arch.vcpu_debug_state; in kvm_arm_reset_debug_ptr()
141 * @vcpu: the vcpu pointer
154 * flag on vcpu->arch.flags). Since the guest must not interfere
160 void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) in kvm_arm_setup_debug() argument
162 unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2; in kvm_arm_setup_debug()
164 trace_kvm_arm_setup_debug(vcpu, vcpu->guest_debug); in kvm_arm_setup_debug()
166 kvm_arm_setup_mdcr_el2(vcpu); in kvm_arm_setup_debug()
169 if (vcpu->guest_debug) { in kvm_arm_setup_debug()
171 save_guest_debug_regs(vcpu); in kvm_arm_setup_debug()
193 if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) { in kvm_arm_setup_debug()
194 *vcpu_cpsr(vcpu) |= DBG_SPSR_SS; in kvm_arm_setup_debug()
195 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1); in kvm_arm_setup_debug()
197 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1); in kvm_arm_setup_debug()
199 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1); in kvm_arm_setup_debug()
201 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1); in kvm_arm_setup_debug()
204 trace_kvm_arm_set_dreg32("SPSR_EL2", *vcpu_cpsr(vcpu)); in kvm_arm_setup_debug()
215 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) { in kvm_arm_setup_debug()
217 mdscr = vcpu_read_sys_reg(vcpu, MDSCR_EL1); in kvm_arm_setup_debug()
219 vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1); in kvm_arm_setup_debug()
221 vcpu->arch.debug_ptr = &vcpu->arch.external_debug_state; in kvm_arm_setup_debug()
222 vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY; in kvm_arm_setup_debug()
225 &vcpu->arch.debug_ptr->dbg_bcr[0], in kvm_arm_setup_debug()
226 &vcpu->arch.debug_ptr->dbg_bvr[0]); in kvm_arm_setup_debug()
229 &vcpu->arch.debug_ptr->dbg_wcr[0], in kvm_arm_setup_debug()
230 &vcpu->arch.debug_ptr->dbg_wvr[0]); in kvm_arm_setup_debug()
234 BUG_ON(!vcpu->guest_debug && in kvm_arm_setup_debug()
235 vcpu->arch.debug_ptr != &vcpu->arch.vcpu_debug_state); in kvm_arm_setup_debug()
238 if (vcpu_read_sys_reg(vcpu, MDSCR_EL1) & (DBG_MDSCR_KDE | DBG_MDSCR_MDE)) in kvm_arm_setup_debug()
239 vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY; in kvm_arm_setup_debug()
242 if (has_vhe() && orig_mdcr_el2 != vcpu->arch.mdcr_el2) in kvm_arm_setup_debug()
243 write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2); in kvm_arm_setup_debug()
245 trace_kvm_arm_set_dreg32("MDSCR_EL1", vcpu_read_sys_reg(vcpu, MDSCR_EL1)); in kvm_arm_setup_debug()
248 void kvm_arm_clear_debug(struct kvm_vcpu *vcpu) in kvm_arm_clear_debug() argument
250 trace_kvm_arm_clear_debug(vcpu->guest_debug); in kvm_arm_clear_debug()
252 if (vcpu->guest_debug) { in kvm_arm_clear_debug()
253 restore_guest_debug_regs(vcpu); in kvm_arm_clear_debug()
259 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) { in kvm_arm_clear_debug()
260 kvm_arm_reset_debug_ptr(vcpu); in kvm_arm_clear_debug()
263 &vcpu->arch.debug_ptr->dbg_bcr[0], in kvm_arm_clear_debug()
264 &vcpu->arch.debug_ptr->dbg_bvr[0]); in kvm_arm_clear_debug()
267 &vcpu->arch.debug_ptr->dbg_wcr[0], in kvm_arm_clear_debug()
268 &vcpu->arch.debug_ptr->dbg_wvr[0]); in kvm_arm_clear_debug()
273 void kvm_arch_vcpu_load_debug_state_flags(struct kvm_vcpu *vcpu) in kvm_arch_vcpu_load_debug_state_flags() argument
288 vcpu->arch.flags |= KVM_ARM64_DEBUG_STATE_SAVE_SPE; in kvm_arch_vcpu_load_debug_state_flags()
293 vcpu->arch.flags |= KVM_ARM64_DEBUG_STATE_SAVE_TRBE; in kvm_arch_vcpu_load_debug_state_flags()
296 void kvm_arch_vcpu_put_debug_state_flags(struct kvm_vcpu *vcpu) in kvm_arch_vcpu_put_debug_state_flags() argument
298 vcpu->arch.flags &= ~(KVM_ARM64_DEBUG_STATE_SAVE_SPE | in kvm_arch_vcpu_put_debug_state_flags()