Loading drivers/irqchip/irq-gic-v4.c +25 −0 Original line number Diff line number Diff line Loading @@ -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); } include/linux/irqchip/arm-gic-v4.h +2 −0 Original line number Diff line number Diff line Loading @@ -93,5 +93,7 @@ struct its_cmd_info { int its_alloc_vcpu_irqs(struct its_vm *vm); void its_free_vcpu_irqs(struct its_vm *vm); int its_schedule_vpe(struct its_vpe *vpe, bool on); int its_invall_vpe(struct its_vpe *vpe); #endif Loading
drivers/irqchip/irq-gic-v4.c +25 −0 Original line number Diff line number Diff line Loading @@ -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); }
include/linux/irqchip/arm-gic-v4.h +2 −0 Original line number Diff line number Diff line Loading @@ -93,5 +93,7 @@ struct its_cmd_info { int its_alloc_vcpu_irqs(struct its_vm *vm); void its_free_vcpu_irqs(struct its_vm *vm); int its_schedule_vpe(struct its_vpe *vpe, bool on); int its_invall_vpe(struct its_vpe *vpe); #endif