Lines Matching defs:vcpu
34 static inline struct pi_desc *vcpu_to_pi_desc(struct kvm_vcpu *vcpu)
36 return &(to_vmx(vcpu)->pi_desc);
53 void vmx_vcpu_pi_load(struct kvm_vcpu *vcpu, int cpu)
55 struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
56 struct vcpu_vmx *vmx = to_vmx(vcpu);
66 if (!enable_apicv || !lapic_in_kernel(vcpu))
74 if (pi_desc->nv != POSTED_INTR_WAKEUP_VECTOR && vcpu->cpu == cpu) {
92 raw_spin_lock(&per_cpu(wakeup_vcpus_on_cpu_lock, vcpu->cpu));
94 raw_spin_unlock(&per_cpu(wakeup_vcpus_on_cpu_lock, vcpu->cpu));
107 * handle task migration (@cpu != vcpu->cpu).
146 static void pi_enable_wakeup_handler(struct kvm_vcpu *vcpu)
148 struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
149 struct vcpu_vmx *vmx = to_vmx(vcpu);
155 raw_spin_lock(&per_cpu(wakeup_vcpus_on_cpu_lock, vcpu->cpu));
157 &per_cpu(wakeup_vcpus_on_cpu, vcpu->cpu));
158 raw_spin_unlock(&per_cpu(wakeup_vcpus_on_cpu_lock, vcpu->cpu));
183 static bool vmx_needs_pi_wakeup(struct kvm_vcpu *vcpu)
193 return vmx_can_use_ipiv(vcpu) || vmx_can_use_vtd_pi(vcpu->kvm);
196 void vmx_vcpu_pi_put(struct kvm_vcpu *vcpu)
198 struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
200 if (!vmx_needs_pi_wakeup(vcpu))
203 if (kvm_vcpu_is_blocking(vcpu) && !vmx_interrupt_blocked(vcpu))
204 pi_enable_wakeup_handler(vcpu);
211 if (vcpu->preempted)
229 kvm_vcpu_wake_up(&vmx->vcpu);
240 bool pi_has_pending_interrupt(struct kvm_vcpu *vcpu)
242 struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
278 struct kvm_vcpu *vcpu;
314 if (!kvm_intr_is_single_vcpu(kvm, &irq, &vcpu) ||
331 vcpu_info.pi_desc_addr = __pa(vcpu_to_pi_desc(vcpu));
334 trace_kvm_pi_irte_update(host_irq, vcpu->vcpu_id, e->gsi,