Lines Matching refs:vcpu
79 static int kvm_vcpu_enable_sve(struct kvm_vcpu *vcpu) in kvm_vcpu_enable_sve() argument
84 vcpu->arch.sve_max_vl = kvm_sve_max_vl; in kvm_vcpu_enable_sve()
91 vcpu_set_flag(vcpu, GUEST_HAS_SVE); in kvm_vcpu_enable_sve()
100 static int kvm_vcpu_finalize_sve(struct kvm_vcpu *vcpu) in kvm_vcpu_finalize_sve() argument
107 vl = vcpu->arch.sve_max_vl; in kvm_vcpu_finalize_sve()
118 reg_sz = vcpu_sve_state_size(vcpu); in kvm_vcpu_finalize_sve()
129 vcpu->arch.sve_state = buf; in kvm_vcpu_finalize_sve()
130 vcpu_set_flag(vcpu, VCPU_SVE_FINALIZED); in kvm_vcpu_finalize_sve()
134 int kvm_arm_vcpu_finalize(struct kvm_vcpu *vcpu, int feature) in kvm_arm_vcpu_finalize() argument
138 if (!vcpu_has_sve(vcpu)) in kvm_arm_vcpu_finalize()
141 if (kvm_arm_vcpu_sve_finalized(vcpu)) in kvm_arm_vcpu_finalize()
144 return kvm_vcpu_finalize_sve(vcpu); in kvm_arm_vcpu_finalize()
150 bool kvm_arm_vcpu_is_finalized(struct kvm_vcpu *vcpu) in kvm_arm_vcpu_is_finalized() argument
152 if (vcpu_has_sve(vcpu) && !kvm_arm_vcpu_sve_finalized(vcpu)) in kvm_arm_vcpu_is_finalized()
158 void kvm_arm_vcpu_destroy(struct kvm_vcpu *vcpu) in kvm_arm_vcpu_destroy() argument
160 void *sve_state = vcpu->arch.sve_state; in kvm_arm_vcpu_destroy()
162 kvm_vcpu_unshare_task_fp(vcpu); in kvm_arm_vcpu_destroy()
163 kvm_unshare_hyp(vcpu, vcpu + 1); in kvm_arm_vcpu_destroy()
165 kvm_unshare_hyp(sve_state, sve_state + vcpu_sve_state_size(vcpu)); in kvm_arm_vcpu_destroy()
167 kfree(vcpu->arch.ccsidr); in kvm_arm_vcpu_destroy()
170 static void kvm_vcpu_reset_sve(struct kvm_vcpu *vcpu) in kvm_vcpu_reset_sve() argument
172 if (vcpu_has_sve(vcpu)) in kvm_vcpu_reset_sve()
173 memset(vcpu->arch.sve_state, 0, vcpu_sve_state_size(vcpu)); in kvm_vcpu_reset_sve()
176 static int kvm_vcpu_enable_ptrauth(struct kvm_vcpu *vcpu) in kvm_vcpu_enable_ptrauth() argument
183 if (!test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) || in kvm_vcpu_enable_ptrauth()
184 !test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features) || in kvm_vcpu_enable_ptrauth()
188 vcpu_set_flag(vcpu, GUEST_HAS_PTRAUTH); in kvm_vcpu_enable_ptrauth()
210 int kvm_reset_vcpu(struct kvm_vcpu *vcpu) in kvm_reset_vcpu() argument
217 spin_lock(&vcpu->arch.mp_state_lock); in kvm_reset_vcpu()
218 reset_state = vcpu->arch.reset_state; in kvm_reset_vcpu()
219 vcpu->arch.reset_state.reset = false; in kvm_reset_vcpu()
220 spin_unlock(&vcpu->arch.mp_state_lock); in kvm_reset_vcpu()
223 kvm_pmu_vcpu_reset(vcpu); in kvm_reset_vcpu()
226 loaded = (vcpu->cpu != -1); in kvm_reset_vcpu()
228 kvm_arch_vcpu_put(vcpu); in kvm_reset_vcpu()
231 if (vcpu_has_nv(vcpu) && vcpu_has_feature(vcpu, KVM_ARM_VCPU_SVE)) { in kvm_reset_vcpu()
236 if (!kvm_arm_vcpu_sve_finalized(vcpu)) { in kvm_reset_vcpu()
237 if (test_bit(KVM_ARM_VCPU_SVE, vcpu->arch.features)) { in kvm_reset_vcpu()
238 ret = kvm_vcpu_enable_sve(vcpu); in kvm_reset_vcpu()
243 kvm_vcpu_reset_sve(vcpu); in kvm_reset_vcpu()
246 if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) || in kvm_reset_vcpu()
247 test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features)) { in kvm_reset_vcpu()
248 if (kvm_vcpu_enable_ptrauth(vcpu)) { in kvm_reset_vcpu()
254 if (vcpu_el1_is_32bit(vcpu)) in kvm_reset_vcpu()
256 else if (vcpu_has_nv(vcpu)) in kvm_reset_vcpu()
261 if (kvm_vcpu_has_pmu(vcpu) && !kvm_arm_support_pmu_v3()) { in kvm_reset_vcpu()
267 memset(vcpu_gp_regs(vcpu), 0, sizeof(*vcpu_gp_regs(vcpu))); in kvm_reset_vcpu()
268 memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); in kvm_reset_vcpu()
269 vcpu->arch.ctxt.spsr_abt = 0; in kvm_reset_vcpu()
270 vcpu->arch.ctxt.spsr_und = 0; in kvm_reset_vcpu()
271 vcpu->arch.ctxt.spsr_irq = 0; in kvm_reset_vcpu()
272 vcpu->arch.ctxt.spsr_fiq = 0; in kvm_reset_vcpu()
273 vcpu_gp_regs(vcpu)->pstate = pstate; in kvm_reset_vcpu()
276 kvm_reset_sys_regs(vcpu); in kvm_reset_vcpu()
286 if (vcpu_mode_is_32bit(vcpu) && (target_pc & 1)) { in kvm_reset_vcpu()
288 vcpu_set_thumb(vcpu); in kvm_reset_vcpu()
293 kvm_vcpu_set_be(vcpu); in kvm_reset_vcpu()
295 *vcpu_pc(vcpu) = target_pc; in kvm_reset_vcpu()
296 vcpu_set_reg(vcpu, 0, reset_state.r0); in kvm_reset_vcpu()
300 ret = kvm_timer_vcpu_reset(vcpu); in kvm_reset_vcpu()
303 kvm_arch_vcpu_load(vcpu, smp_processor_id()); in kvm_reset_vcpu()