irqchip/riscv-intc: Add empty irq_eoi() for chained irq handlers
We add empty irq_eoi() in RISC-V INTC driver for child irqchip drivers (such as PLIC, SBI IPI, CLINT, APLIC, IMSIC, etc) which implement chained handlers for parent per-HART local interrupts. This hels us avoid unnecessary mask/unmask of per-HART local interrupts at the time of handling interrupts. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Acked-by: Palmer Dabbelt <palmer@rivosinc.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20230328035223.1480939-8-apatel@ventanamicro.com
This commit is contained in:
parent
6279228432
commit
f8415f2def
|
@ -46,10 +46,27 @@ static void riscv_intc_irq_unmask(struct irq_data *d)
|
|||
csr_set(CSR_IE, BIT(d->hwirq));
|
||||
}
|
||||
|
||||
static void riscv_intc_irq_eoi(struct irq_data *d)
|
||||
{
|
||||
/*
|
||||
* The RISC-V INTC driver uses handle_percpu_devid_irq() flow
|
||||
* for the per-HART local interrupts and child irqchip drivers
|
||||
* (such as PLIC, SBI IPI, CLINT, APLIC, IMSIC, etc) implement
|
||||
* chained handlers for the per-HART local interrupts.
|
||||
*
|
||||
* In the absence of irq_eoi(), the chained_irq_enter() and
|
||||
* chained_irq_exit() functions (used by child irqchip drivers)
|
||||
* will do unnecessary mask/unmask of per-HART local interrupts
|
||||
* at the time of handling interrupts. To avoid this, we provide
|
||||
* an empty irq_eoi() callback for RISC-V INTC irqchip.
|
||||
*/
|
||||
}
|
||||
|
||||
static struct irq_chip riscv_intc_chip = {
|
||||
.name = "RISC-V INTC",
|
||||
.irq_mask = riscv_intc_irq_mask,
|
||||
.irq_unmask = riscv_intc_irq_unmask,
|
||||
.irq_eoi = riscv_intc_irq_eoi,
|
||||
};
|
||||
|
||||
static int riscv_intc_domain_map(struct irq_domain *d, unsigned int irq,
|
||||
|
|
Loading…
Reference in New Issue