Lines Matching refs:vcpu
76 static int kvm_vcpu_enable_sve(struct kvm_vcpu *vcpu) in kvm_vcpu_enable_sve() argument
81 vcpu->arch.sve_max_vl = kvm_sve_max_vl; in kvm_vcpu_enable_sve()
88 vcpu_set_flag(vcpu, GUEST_HAS_SVE); in kvm_vcpu_enable_sve()
97 static int kvm_vcpu_finalize_sve(struct kvm_vcpu *vcpu) in kvm_vcpu_finalize_sve() argument
104 vl = vcpu->arch.sve_max_vl; in kvm_vcpu_finalize_sve()
115 reg_sz = vcpu_sve_state_size(vcpu); in kvm_vcpu_finalize_sve()
126 vcpu->arch.sve_state = buf; in kvm_vcpu_finalize_sve()
127 vcpu_set_flag(vcpu, VCPU_SVE_FINALIZED); in kvm_vcpu_finalize_sve()
131 int kvm_arm_vcpu_finalize(struct kvm_vcpu *vcpu, int feature) in kvm_arm_vcpu_finalize() argument
135 if (!vcpu_has_sve(vcpu)) in kvm_arm_vcpu_finalize()
138 if (kvm_arm_vcpu_sve_finalized(vcpu)) in kvm_arm_vcpu_finalize()
141 return kvm_vcpu_finalize_sve(vcpu); in kvm_arm_vcpu_finalize()
147 bool kvm_arm_vcpu_is_finalized(struct kvm_vcpu *vcpu) in kvm_arm_vcpu_is_finalized() argument
149 if (vcpu_has_sve(vcpu) && !kvm_arm_vcpu_sve_finalized(vcpu)) in kvm_arm_vcpu_is_finalized()
155 void kvm_arm_vcpu_destroy(struct kvm_vcpu *vcpu) in kvm_arm_vcpu_destroy() argument
157 void *sve_state = vcpu->arch.sve_state; in kvm_arm_vcpu_destroy()
159 kvm_vcpu_unshare_task_fp(vcpu); in kvm_arm_vcpu_destroy()
160 kvm_unshare_hyp(vcpu, vcpu + 1); in kvm_arm_vcpu_destroy()
162 kvm_unshare_hyp(sve_state, sve_state + vcpu_sve_state_size(vcpu)); in kvm_arm_vcpu_destroy()
164 kfree(vcpu->arch.ccsidr); in kvm_arm_vcpu_destroy()
167 static void kvm_vcpu_reset_sve(struct kvm_vcpu *vcpu) in kvm_vcpu_reset_sve() argument
169 if (vcpu_has_sve(vcpu)) in kvm_vcpu_reset_sve()
170 memset(vcpu->arch.sve_state, 0, vcpu_sve_state_size(vcpu)); in kvm_vcpu_reset_sve()
173 static int kvm_vcpu_enable_ptrauth(struct kvm_vcpu *vcpu) in kvm_vcpu_enable_ptrauth() argument
180 if (!test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) || in kvm_vcpu_enable_ptrauth()
181 !test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features) || in kvm_vcpu_enable_ptrauth()
185 vcpu_set_flag(vcpu, GUEST_HAS_PTRAUTH); in kvm_vcpu_enable_ptrauth()
207 int kvm_reset_vcpu(struct kvm_vcpu *vcpu) in kvm_reset_vcpu() argument
214 spin_lock(&vcpu->arch.mp_state_lock); in kvm_reset_vcpu()
215 reset_state = vcpu->arch.reset_state; in kvm_reset_vcpu()
216 vcpu->arch.reset_state.reset = false; in kvm_reset_vcpu()
217 spin_unlock(&vcpu->arch.mp_state_lock); in kvm_reset_vcpu()
220 kvm_pmu_vcpu_reset(vcpu); in kvm_reset_vcpu()
223 loaded = (vcpu->cpu != -1); in kvm_reset_vcpu()
225 kvm_arch_vcpu_put(vcpu); in kvm_reset_vcpu()
228 if (vcpu_has_nv(vcpu) && vcpu_has_feature(vcpu, KVM_ARM_VCPU_SVE)) { in kvm_reset_vcpu()
233 if (!kvm_arm_vcpu_sve_finalized(vcpu)) { in kvm_reset_vcpu()
234 if (test_bit(KVM_ARM_VCPU_SVE, vcpu->arch.features)) { in kvm_reset_vcpu()
235 ret = kvm_vcpu_enable_sve(vcpu); in kvm_reset_vcpu()
240 kvm_vcpu_reset_sve(vcpu); in kvm_reset_vcpu()
243 if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) || in kvm_reset_vcpu()
244 test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features)) { in kvm_reset_vcpu()
245 if (kvm_vcpu_enable_ptrauth(vcpu)) { in kvm_reset_vcpu()
251 if (vcpu_el1_is_32bit(vcpu)) in kvm_reset_vcpu()
253 else if (vcpu_has_nv(vcpu)) in kvm_reset_vcpu()
258 if (kvm_vcpu_has_pmu(vcpu) && !kvm_arm_support_pmu_v3()) { in kvm_reset_vcpu()
264 memset(vcpu_gp_regs(vcpu), 0, sizeof(*vcpu_gp_regs(vcpu))); in kvm_reset_vcpu()
265 memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); in kvm_reset_vcpu()
266 vcpu->arch.ctxt.spsr_abt = 0; in kvm_reset_vcpu()
267 vcpu->arch.ctxt.spsr_und = 0; in kvm_reset_vcpu()
268 vcpu->arch.ctxt.spsr_irq = 0; in kvm_reset_vcpu()
269 vcpu->arch.ctxt.spsr_fiq = 0; in kvm_reset_vcpu()
270 vcpu_gp_regs(vcpu)->pstate = pstate; in kvm_reset_vcpu()
273 kvm_reset_sys_regs(vcpu); in kvm_reset_vcpu()
283 if (vcpu_mode_is_32bit(vcpu) && (target_pc & 1)) { in kvm_reset_vcpu()
285 vcpu_set_thumb(vcpu); in kvm_reset_vcpu()
290 kvm_vcpu_set_be(vcpu); in kvm_reset_vcpu()
292 *vcpu_pc(vcpu) = target_pc; in kvm_reset_vcpu()
293 vcpu_set_reg(vcpu, 0, reset_state.r0); in kvm_reset_vcpu()
297 ret = kvm_timer_vcpu_reset(vcpu); in kvm_reset_vcpu()
300 kvm_arch_vcpu_load(vcpu, smp_processor_id()); in kvm_reset_vcpu()