Lines Matching refs:vcpu
42 static unsigned long kvm_psci_vcpu_suspend(struct kvm_vcpu *vcpu) in kvm_psci_vcpu_suspend() argument
57 kvm_vcpu_block(vcpu); in kvm_psci_vcpu_suspend()
62 static void kvm_psci_vcpu_off(struct kvm_vcpu *vcpu) in kvm_psci_vcpu_off() argument
64 vcpu->arch.pause = true; in kvm_psci_vcpu_off()
70 struct kvm_vcpu *vcpu = NULL; in kvm_psci_vcpu_on() local
80 vcpu = kvm_mpidr_to_vcpu(kvm, cpu_id); in kvm_psci_vcpu_on()
86 if (!vcpu) in kvm_psci_vcpu_on()
88 if (!vcpu->arch.pause) { in kvm_psci_vcpu_on()
98 kvm_reset_vcpu(vcpu); in kvm_psci_vcpu_on()
101 if (vcpu_mode_is_32bit(vcpu) && (target_pc & 1)) { in kvm_psci_vcpu_on()
103 vcpu_set_thumb(vcpu); in kvm_psci_vcpu_on()
108 kvm_vcpu_set_be(vcpu); in kvm_psci_vcpu_on()
110 *vcpu_pc(vcpu) = target_pc; in kvm_psci_vcpu_on()
115 *vcpu_reg(vcpu, 0) = context_id; in kvm_psci_vcpu_on()
116 vcpu->arch.pause = false; in kvm_psci_vcpu_on()
119 wq = kvm_arch_vcpu_wq(vcpu); in kvm_psci_vcpu_on()
125 static unsigned long kvm_psci_vcpu_affinity_info(struct kvm_vcpu *vcpu) in kvm_psci_vcpu_affinity_info() argument
132 struct kvm *kvm = vcpu->kvm; in kvm_psci_vcpu_affinity_info()
135 target_affinity = *vcpu_reg(vcpu, 1); in kvm_psci_vcpu_affinity_info()
136 lowest_affinity_level = *vcpu_reg(vcpu, 2); in kvm_psci_vcpu_affinity_info()
161 static void kvm_prepare_system_event(struct kvm_vcpu *vcpu, u32 type) in kvm_prepare_system_event() argument
175 kvm_for_each_vcpu(i, tmp, vcpu->kvm) { in kvm_prepare_system_event()
180 memset(&vcpu->run->system_event, 0, sizeof(vcpu->run->system_event)); in kvm_prepare_system_event()
181 vcpu->run->system_event.type = type; in kvm_prepare_system_event()
182 vcpu->run->exit_reason = KVM_EXIT_SYSTEM_EVENT; in kvm_prepare_system_event()
185 static void kvm_psci_system_off(struct kvm_vcpu *vcpu) in kvm_psci_system_off() argument
187 kvm_prepare_system_event(vcpu, KVM_SYSTEM_EVENT_SHUTDOWN); in kvm_psci_system_off()
190 static void kvm_psci_system_reset(struct kvm_vcpu *vcpu) in kvm_psci_system_reset() argument
192 kvm_prepare_system_event(vcpu, KVM_SYSTEM_EVENT_RESET); in kvm_psci_system_reset()
195 int kvm_psci_version(struct kvm_vcpu *vcpu) in kvm_psci_version() argument
197 if (test_bit(KVM_ARM_VCPU_PSCI_0_2, vcpu->arch.features)) in kvm_psci_version()
203 static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu) in kvm_psci_0_2_call() argument
206 unsigned long psci_fn = *vcpu_reg(vcpu, 0) & ~((u32) 0); in kvm_psci_0_2_call()
219 val = kvm_psci_vcpu_suspend(vcpu); in kvm_psci_0_2_call()
222 kvm_psci_vcpu_off(vcpu); in kvm_psci_0_2_call()
227 val = kvm_psci_vcpu_on(vcpu); in kvm_psci_0_2_call()
231 val = kvm_psci_vcpu_affinity_info(vcpu); in kvm_psci_0_2_call()
242 kvm_psci_system_off(vcpu); in kvm_psci_0_2_call()
257 kvm_psci_system_reset(vcpu); in kvm_psci_0_2_call()
270 *vcpu_reg(vcpu, 0) = val; in kvm_psci_0_2_call()
274 static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu) in kvm_psci_0_1_call() argument
276 unsigned long psci_fn = *vcpu_reg(vcpu, 0) & ~((u32) 0); in kvm_psci_0_1_call()
281 kvm_psci_vcpu_off(vcpu); in kvm_psci_0_1_call()
285 val = kvm_psci_vcpu_on(vcpu); in kvm_psci_0_1_call()
292 *vcpu_reg(vcpu, 0) = val; in kvm_psci_0_1_call()
310 int kvm_psci_call(struct kvm_vcpu *vcpu) in kvm_psci_call() argument
312 switch (kvm_psci_version(vcpu)) { in kvm_psci_call()
314 return kvm_psci_0_2_call(vcpu); in kvm_psci_call()
316 return kvm_psci_0_1_call(vcpu); in kvm_psci_call()