From: Jan Kiszka <[email protected]> This replaces the non-intuitive special case of irqchip_set_pending(NULL, ...) with an explicit one. The only case where irqchip_set_pending() was called like this was arch_ivshmem_trigger_interrupt(). All others already passed in a cpu_public pointer guaranteed to be non-NULL.
Signed-off-by: Jan Kiszka <[email protected]> --- hypervisor/arch/arm-common/include/asm/irqchip.h | 2 ++ hypervisor/arch/arm-common/irqchip.c | 14 +++++++------- hypervisor/arch/arm-common/ivshmem.c | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/hypervisor/arch/arm-common/include/asm/irqchip.h b/hypervisor/arch/arm-common/include/asm/irqchip.h index 9ac33465..b3fa6d3c 100644 --- a/hypervisor/arch/arm-common/include/asm/irqchip.h +++ b/hypervisor/arch/arm-common/include/asm/irqchip.h @@ -97,6 +97,8 @@ bool irqchip_has_pending_irqs(void); void irqchip_inject_pending(void); void irqchip_set_pending(struct public_per_cpu *cpu_public, u16 irq_id); +void irqchip_trigger_external_irq(u16 irq_id); + bool irqchip_irq_in_cell(struct cell *cell, unsigned int irq_id); #endif /* __ASSEMBLY__ */ diff --git a/hypervisor/arch/arm-common/irqchip.c b/hypervisor/arch/arm-common/irqchip.c index 6b6f7332..847758ae 100644 --- a/hypervisor/arch/arm-common/irqchip.c +++ b/hypervisor/arch/arm-common/irqchip.c @@ -228,13 +228,6 @@ void irqchip_set_pending(struct public_per_cpu *cpu_public, u16 irq_id) unsigned int new_tail; struct sgi sgi; - if (!cpu_public) { - /* Injection via GICD */ - mmio_write32(gicd_base + GICD_ISPENDR + (irq_id / 32) * 4, - 1 << (irq_id % 32)); - return; - } - if (local_injection && irqchip.inject_irq(irq_id, sender) != -EBUSY) return; @@ -311,6 +304,13 @@ void irqchip_inject_pending(void) irqchip.enable_maint_irq(false); } +void irqchip_trigger_external_irq(u16 irq_id) +{ + /* Injection via GICD */ + mmio_write32(gicd_base + GICD_ISPENDR + (irq_id / 32) * 4, + 1 << (irq_id % 32)); +} + int irqchip_send_sgi(struct sgi *sgi) { return irqchip.send_sgi(sgi); diff --git a/hypervisor/arch/arm-common/ivshmem.c b/hypervisor/arch/arm-common/ivshmem.c index 14e31da4..9f0a11dc 100644 --- a/hypervisor/arch/arm-common/ivshmem.c +++ b/hypervisor/arch/arm-common/ivshmem.c @@ -25,7 +25,7 @@ void arch_ivshmem_trigger_interrupt(struct ivshmem_endpoint *ive, */ memory_barrier(); - irqchip_set_pending(NULL, irq_id); + irqchip_trigger_external_irq(irq_id); } } -- 2.16.4 -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jailhouse-dev/d2becb4a22a7dc85cb237014796862a50f4cfc6d.1583516039.git.jan.kiszka%40siemens.com.
