mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/drivers/char: fix exynos4210 IRQ registration failure propagation
In exynos4210_uart_init_postirq(), when setup_irq() returns an error the failure was only logged via dprintk() and execution continued, unconditionally clearing UINTM and setting UMCON_INT_EN. This enabled receive and transmit interrupt lines with no handler registered. On platforms where the GIC receives these asserted lines, the result is either repeated spurious-interrupt warnings or an unhandled interrupt fault. Add an early return in the setup_irq() error branch so that the interrupt-enable writes to UINTM and UMCON are skipped when IRQ registration fails. Signed-off-by: Oleksii Moisieiev <oleksii_moisieiev@epam.com> Reviewed-by: Michal Orzel <michal.orzel@amd.com>
This commit is contained in:
1 parent
d075ab7f25
commit
046adc0e94
1 file changed
+5
-1
@@ -199,8 +199,12 @@ static void __init exynos4210_uart_init_postirq(struct serial_port *port)
|
||||
uart->irqaction.dev_id = port;
|
||||
|
||||
if ( (rc = setup_irq(uart->irq, 0, &uart->irqaction)) != 0 )
|
||||
dprintk(XENLOG_ERR, "Failed to allocated exynos4210_uart IRQ %d\n",
|
||||
{
|
||||
dprintk(XENLOG_ERR, "Failed to allocated exynos4210_uart IRQ %u\n",
|
||||
uart->irq);
|
||||
/* Do not unmask interrupts if irq handler wasn't set */
|
||||
return;
|
||||
}
|
||||
|
||||
/* Unmask interrupts */
|
||||
exynos4210_write(uart, UINTM, ~UINTM_ALLI);
|
||||
|
||||