• Mark Rutland's avatar
    irq: mips: stop (ab)using handle_domain_irq() · bab4ff1e
    Mark Rutland authored
    On MIPS, the only user of handle_domain_irq() is octeon_irq_ciu3_ip2(),
    which is called from the platform-specific plat_irq_dispatch() function
    invoked from the early assembly code.
    
    No other irqchip relevant to arch/mips uses handle_domain_irq():
    
    * No other plat_irq_dispatch() function transitively calls
      handle_domain_irq().
    
    * No other vectored IRQ dispatch function registered with
      set_vi_handler() calls handle_domain_irq().
    
    * No chained irqchip handlers call handle_domain_irq(), which makes
      sense as this is meant to only be used by root irqchip handlers.
    
    Currently octeon_irq_ciu3_ip2() passes NULL as the `regs` argument to
    handle_domain_irq(), and as handle_domain_irq() will pass this to
    set_irq_regs(), any invoked IRQ handlers will erroneously see a NULL
    pt_regs if they call get_pt_regs().
    
    Fix this by calling generic_handle_domain_irq() directly, and performing
    the necessary irq_{enter,exit}() logic directly in
    octeon_irq_ciu3_ip2(). At the same time, deselect HANDLE_DOMAIN_IRQ,
    which subsequent patches will remove.
    
    Other than the corrected behaviour of get_pt_regs(), there should be no
    functional change as a result of this patch.
    
    Fixes: ce210d35 ("MIPS: OCTEON: Add support for OCTEON III interrupt controller.")
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
    Acked-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    bab4ff1e
octeon-irq.c 73.5 KB