|
@@ -72,3 +72,28 @@ void its_free_vcpu_irqs(struct its_vm *vm)
|
|
|
irq_domain_remove(vm->domain);
|
|
|
irq_domain_free_fwnode(vm->fwnode);
|
|
|
}
|
|
|
+
|
|
|
+static int its_send_vpe_cmd(struct its_vpe *vpe, struct its_cmd_info *info)
|
|
|
+{
|
|
|
+ return irq_set_vcpu_affinity(vpe->irq, info);
|
|
|
+}
|
|
|
+
|
|
|
+int its_schedule_vpe(struct its_vpe *vpe, bool on)
|
|
|
+{
|
|
|
+ struct its_cmd_info info;
|
|
|
+
|
|
|
+ WARN_ON(preemptible());
|
|
|
+
|
|
|
+ info.cmd_type = on ? SCHEDULE_VPE : DESCHEDULE_VPE;
|
|
|
+
|
|
|
+ return its_send_vpe_cmd(vpe, &info);
|
|
|
+}
|
|
|
+
|
|
|
+int its_invall_vpe(struct its_vpe *vpe)
|
|
|
+{
|
|
|
+ struct its_cmd_info info = {
|
|
|
+ .cmd_type = INVALL_VPE,
|
|
|
+ };
|
|
|
+
|
|
|
+ return its_send_vpe_cmd(vpe, &info);
|
|
|
+}
|