Lines Matching full:vpe
55 * with the actual vPE affinity, and not the braindead concept of
65 * The choice made here is that each vcpu (VPE in old northern GICv4
68 * interrupt becomes a handle for the VPE, and that the hypervisor
72 * contain an irq domain where each interrupt maps to a VPE. In
78 * - irq_set_affinity is used to move a VPE from one redistributor to
82 * creating a new sub-API, namely scheduling/descheduling a VPE
119 static int its_alloc_vcpu_sgis(struct its_vpe *vpe, int idx) in its_alloc_vcpu_sgis() argument
131 vpe->fwnode = irq_domain_alloc_named_id_fwnode(name, idx); in its_alloc_vcpu_sgis()
132 if (!vpe->fwnode) in its_alloc_vcpu_sgis()
138 vpe->sgi_domain = irq_domain_create_linear(vpe->fwnode, 16, in its_alloc_vcpu_sgis()
139 sgi_domain_ops, vpe); in its_alloc_vcpu_sgis()
140 if (!vpe->sgi_domain) in its_alloc_vcpu_sgis()
143 sgi_base = irq_domain_alloc_irqs(vpe->sgi_domain, 16, NUMA_NO_NODE, vpe); in its_alloc_vcpu_sgis()
150 if (vpe->sgi_domain) in its_alloc_vcpu_sgis()
151 irq_domain_remove(vpe->sgi_domain); in its_alloc_vcpu_sgis()
152 if (vpe->fwnode) in its_alloc_vcpu_sgis()
153 irq_domain_free_fwnode(vpe->fwnode); in its_alloc_vcpu_sgis()
162 vm->fwnode = irq_domain_alloc_named_id_fwnode("GICv4-vpe", in its_alloc_vcpu_irqs()
229 static int its_send_vpe_cmd(struct its_vpe *vpe, struct its_cmd_info *info) in its_send_vpe_cmd() argument
231 return irq_set_vcpu_affinity(vpe->irq, info); in its_send_vpe_cmd()
234 int its_make_vpe_non_resident(struct its_vpe *vpe, bool db) in its_make_vpe_non_resident() argument
236 struct irq_desc *desc = irq_to_desc(vpe->irq); in its_make_vpe_non_resident()
249 enable_irq(vpe->irq); in its_make_vpe_non_resident()
252 ret = its_send_vpe_cmd(vpe, &info); in its_make_vpe_non_resident()
254 vpe->resident = false; in its_make_vpe_non_resident()
256 vpe->ready = false; in its_make_vpe_non_resident()
261 int its_make_vpe_resident(struct its_vpe *vpe, bool g0en, bool g1en) in its_make_vpe_resident() argument
274 disable_irq_nosync(vpe->irq); in its_make_vpe_resident()
277 ret = its_send_vpe_cmd(vpe, &info); in its_make_vpe_resident()
279 vpe->resident = true; in its_make_vpe_resident()
284 int its_commit_vpe(struct its_vpe *vpe) in its_commit_vpe() argument
293 ret = its_send_vpe_cmd(vpe, &info); in its_commit_vpe()
295 vpe->ready = true; in its_commit_vpe()
301 int its_invall_vpe(struct its_vpe *vpe) in its_invall_vpe() argument
307 return its_send_vpe_cmd(vpe, &info); in its_invall_vpe()
388 pr_err("ITS: No GICv4 VPE domain allocated\n"); in its_init_v4()