From 046adc0e9421cdee352dc08016bb3bacedbafb40 Mon Sep 17 00:00:00 2001 From: Oleksii Moisieiev Date: Thu, 23 Apr 2026 16:11:42 +0000 Subject: [PATCH] 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 Reviewed-by: Michal Orzel --- xen/drivers/char/exynos4210-uart.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xen/drivers/char/exynos4210-uart.c b/xen/drivers/char/exynos4210-uart.c index 58901df554..7addc11c2c 100644 --- a/xen/drivers/char/exynos4210-uart.c +++ b/xen/drivers/char/exynos4210-uart.c @@ -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);