FAILED: patch "[PATCH] fsl_lpuart: Don't enable interrupts too early" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 401fb66a355eb0f22096cf26864324f8e63c7d78 Mon Sep 17 00:00:00 2001
From: Indan Zupancic <[email protected]>
Date: Thu, 5 May 2022 13:47:50 +0200
Subject: [PATCH] fsl_lpuart: Don't enable interrupts too early
If an irq is pending when devm_request_irq() is called, the irq handler will cause a NULL pointer access because initialisation is not done yet.
Fixes 9d7ee0e28da59 ("tty: serial: lpuart: avoid report NULL interrupt")
Cc stable <[email protected]>
Signed-off-by Indan Zupancic <[email protected]>
Signed-off-by Greg Kroah-Hartman <[email protected]>
drivers/tty/serial/fsl_lpuart.c +9 -9
@@ -2664,6 +2664,7 @@ static int lpuart_probe(struct platform_device *pdev)struct device_node *np = pdev->dev.of_node;struct lpuart_port *sport;struct resource *res; +irq_handler_t handler;int ret; sport =devm_kzalloc (&pdev->dev,sizeof (*sport),GFP_KERNEL );
@@ -2741,17 +2742,11 @@ static int lpuart_probe(struct platform_device *pdev)if (lpuart_is_32 (sport)) { lpuart_reg.cons =LPUART32_CONSOLE ; - ret =devm_request_irq (&pdev->dev, sport->port.irq, lpuart32_int,0 , -DRIVER_NAME , sport); + handler = lpuart32_int; }else { lpuart_reg.cons =LPUART_CONSOLE ; - ret =devm_request_irq (&pdev->dev, sport->port.irq, lpuart_int,0 , -DRIVER_NAME , sport); + handler = lpuart_int; } - -if (ret) - goto failed_irq_request; - ret =uart_add_one_port (&lpuart_reg, &sport->port);if (ret) goto failed_attach_port;
@@ -2773,13 +2768,18 @@ static int lpuart_probe(struct platform_device *pdev) sport->port.rs485_config (&sport->port, &sport->port.rs485); + ret =devm_request_irq (&pdev->dev, sport->port.irq, handler,0 , +DRIVER_NAME , sport); +if (ret) + goto failed_irq_request; +return 0 ; +failed_irq_request: failed_get_rs485: failed_reset:uart_remove_one_port (&lpuart_reg, &sport->port); failed_attach_port: -failed_irq_request:lpuart_disable_clks (sport); failed_clock_enable: failed_out_of_range: