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()
201 static int kvm_set_vm_width(struct kvm_vcpu *vcpu) in kvm_set_vm_width() argument
203 struct kvm *kvm = vcpu->kvm; in kvm_set_vm_width()
206 is32bit = vcpu_has_feature(vcpu, KVM_ARM_VCPU_EL1_32BIT); in kvm_set_vm_width()
229 if (vcpu_has_nv(vcpu) && is32bit) in kvm_set_vm_width()
258 int kvm_reset_vcpu(struct kvm_vcpu *vcpu) in kvm_reset_vcpu() argument
265 mutex_lock(&vcpu->kvm->lock); in kvm_reset_vcpu()
266 ret = kvm_set_vm_width(vcpu); in kvm_reset_vcpu()
268 reset_state = vcpu->arch.reset_state; in kvm_reset_vcpu()
269 WRITE_ONCE(vcpu->arch.reset_state.reset, false); in kvm_reset_vcpu()
271 mutex_unlock(&vcpu->kvm->lock); in kvm_reset_vcpu()
277 kvm_pmu_vcpu_reset(vcpu); in kvm_reset_vcpu()
280 loaded = (vcpu->cpu != -1); in kvm_reset_vcpu()
282 kvm_arch_vcpu_put(vcpu); in kvm_reset_vcpu()
285 if (vcpu_has_nv(vcpu) && vcpu_has_feature(vcpu, KVM_ARM_VCPU_SVE)) { in kvm_reset_vcpu()
290 if (!kvm_arm_vcpu_sve_finalized(vcpu)) { in kvm_reset_vcpu()
291 if (test_bit(KVM_ARM_VCPU_SVE, vcpu->arch.features)) { in kvm_reset_vcpu()
292 ret = kvm_vcpu_enable_sve(vcpu); in kvm_reset_vcpu()
297 kvm_vcpu_reset_sve(vcpu); in kvm_reset_vcpu()
300 if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) || in kvm_reset_vcpu()
301 test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features)) { in kvm_reset_vcpu()
302 if (kvm_vcpu_enable_ptrauth(vcpu)) { in kvm_reset_vcpu()
308 switch (vcpu->arch.target) { in kvm_reset_vcpu()
310 if (vcpu_el1_is_32bit(vcpu)) { in kvm_reset_vcpu()
312 } else if (vcpu_has_nv(vcpu)) { in kvm_reset_vcpu()
318 if (kvm_vcpu_has_pmu(vcpu) && !kvm_arm_support_pmu_v3()) { in kvm_reset_vcpu()
326 memset(vcpu_gp_regs(vcpu), 0, sizeof(*vcpu_gp_regs(vcpu))); in kvm_reset_vcpu()
327 memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); in kvm_reset_vcpu()
328 vcpu->arch.ctxt.spsr_abt = 0; in kvm_reset_vcpu()
329 vcpu->arch.ctxt.spsr_und = 0; in kvm_reset_vcpu()
330 vcpu->arch.ctxt.spsr_irq = 0; in kvm_reset_vcpu()
331 vcpu->arch.ctxt.spsr_fiq = 0; in kvm_reset_vcpu()
332 vcpu_gp_regs(vcpu)->pstate = pstate; in kvm_reset_vcpu()
335 kvm_reset_sys_regs(vcpu); in kvm_reset_vcpu()
345 if (vcpu_mode_is_32bit(vcpu) && (target_pc & 1)) { in kvm_reset_vcpu()
347 vcpu_set_thumb(vcpu); in kvm_reset_vcpu()
352 kvm_vcpu_set_be(vcpu); in kvm_reset_vcpu()
354 *vcpu_pc(vcpu) = target_pc; in kvm_reset_vcpu()
355 vcpu_set_reg(vcpu, 0, reset_state.r0); in kvm_reset_vcpu()
359 ret = kvm_timer_vcpu_reset(vcpu); in kvm_reset_vcpu()
362 kvm_arch_vcpu_load(vcpu, smp_processor_id()); in kvm_reset_vcpu()