Lines Matching refs:vcpu

44 static unsigned long kvm_psci_vcpu_suspend(struct kvm_vcpu *vcpu)  in kvm_psci_vcpu_suspend()  argument
59 kvm_vcpu_block(vcpu); in kvm_psci_vcpu_suspend()
64 static void kvm_psci_vcpu_off(struct kvm_vcpu *vcpu) in kvm_psci_vcpu_off() argument
66 vcpu->arch.power_off = true; in kvm_psci_vcpu_off()
72 struct kvm_vcpu *vcpu = NULL; in kvm_psci_vcpu_on() local
82 vcpu = kvm_mpidr_to_vcpu(kvm, cpu_id); in kvm_psci_vcpu_on()
88 if (!vcpu) in kvm_psci_vcpu_on()
90 if (!vcpu->arch.power_off) { in kvm_psci_vcpu_on()
100 kvm_reset_vcpu(vcpu); in kvm_psci_vcpu_on()
103 if (vcpu_mode_is_32bit(vcpu) && (target_pc & 1)) { in kvm_psci_vcpu_on()
105 vcpu_set_thumb(vcpu); in kvm_psci_vcpu_on()
110 kvm_vcpu_set_be(vcpu); in kvm_psci_vcpu_on()
112 *vcpu_pc(vcpu) = target_pc; in kvm_psci_vcpu_on()
117 vcpu_set_reg(vcpu, 0, context_id); in kvm_psci_vcpu_on()
118 vcpu->arch.power_off = false; in kvm_psci_vcpu_on()
121 wq = kvm_arch_vcpu_wq(vcpu); in kvm_psci_vcpu_on()
127 static unsigned long kvm_psci_vcpu_affinity_info(struct kvm_vcpu *vcpu) in kvm_psci_vcpu_affinity_info() argument
134 struct kvm *kvm = vcpu->kvm; in kvm_psci_vcpu_affinity_info()
137 target_affinity = vcpu_get_reg(vcpu, 1); in kvm_psci_vcpu_affinity_info()
138 lowest_affinity_level = vcpu_get_reg(vcpu, 2); in kvm_psci_vcpu_affinity_info()
167 static void kvm_prepare_system_event(struct kvm_vcpu *vcpu, u32 type) in kvm_prepare_system_event() argument
181 kvm_for_each_vcpu(i, tmp, vcpu->kvm) { in kvm_prepare_system_event()
186 memset(&vcpu->run->system_event, 0, sizeof(vcpu->run->system_event)); in kvm_prepare_system_event()
187 vcpu->run->system_event.type = type; in kvm_prepare_system_event()
188 vcpu->run->exit_reason = KVM_EXIT_SYSTEM_EVENT; in kvm_prepare_system_event()
191 static void kvm_psci_system_off(struct kvm_vcpu *vcpu) in kvm_psci_system_off() argument
193 kvm_prepare_system_event(vcpu, KVM_SYSTEM_EVENT_SHUTDOWN); in kvm_psci_system_off()
196 static void kvm_psci_system_reset(struct kvm_vcpu *vcpu) in kvm_psci_system_reset() argument
198 kvm_prepare_system_event(vcpu, KVM_SYSTEM_EVENT_RESET); in kvm_psci_system_reset()
201 int kvm_psci_version(struct kvm_vcpu *vcpu) in kvm_psci_version() argument
203 if (test_bit(KVM_ARM_VCPU_PSCI_0_2, vcpu->arch.features)) in kvm_psci_version()
209 static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu) in kvm_psci_0_2_call() argument
212 unsigned long psci_fn = vcpu_get_reg(vcpu, 0) & ~((u32) 0); in kvm_psci_0_2_call()
225 val = kvm_psci_vcpu_suspend(vcpu); in kvm_psci_0_2_call()
228 kvm_psci_vcpu_off(vcpu); in kvm_psci_0_2_call()
233 val = kvm_psci_vcpu_on(vcpu); in kvm_psci_0_2_call()
237 val = kvm_psci_vcpu_affinity_info(vcpu); in kvm_psci_0_2_call()
248 kvm_psci_system_off(vcpu); in kvm_psci_0_2_call()
263 kvm_psci_system_reset(vcpu); in kvm_psci_0_2_call()
276 vcpu_set_reg(vcpu, 0, val); in kvm_psci_0_2_call()
280 static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu) in kvm_psci_0_1_call() argument
282 unsigned long psci_fn = vcpu_get_reg(vcpu, 0) & ~((u32) 0); in kvm_psci_0_1_call()
287 kvm_psci_vcpu_off(vcpu); in kvm_psci_0_1_call()
291 val = kvm_psci_vcpu_on(vcpu); in kvm_psci_0_1_call()
298 vcpu_set_reg(vcpu, 0, val); in kvm_psci_0_1_call()
316 int kvm_psci_call(struct kvm_vcpu *vcpu) in kvm_psci_call() argument
318 switch (kvm_psci_version(vcpu)) { in kvm_psci_call()
320 return kvm_psci_0_2_call(vcpu); in kvm_psci_call()
322 return kvm_psci_0_1_call(vcpu); in kvm_psci_call()