serial: pic32: restore disabled irqs in pic32_uart_startup()
authorJiri Slaby <jslaby@suse.cz>
Tue, 3 May 2022 06:31:22 +0000 (08:31 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 May 2022 20:39:20 +0000 (22:39 +0200)
pic32_uart_startup() disables interrupts by local_irq_save(). But the
function never enables them. The serial core only holds a mutex, so irqs
are not restored.

So how could this driver work? This irq handling was already present in
the driver's initial commit 157b9394709ed (serial: pic32_uart: Add PIC32
UART driver).

So is it a candidate for removal? Anyone has a contact to the author:
Andrei Pistirica (I believe the one below -- @microchip.com -- will
bounce)? Or to someone else @microchip.com?

Cc: Andrei Pistirica <andrei.pistirica@microchip.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20220503063122.20957-12-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/pic32_uart.c

index c5584628f8c44820eeb230d5ebe6f23966bd8f88..b399aac530fe6bd7dce7dd30060c844f55f84797 100644 (file)
@@ -564,6 +564,8 @@ static int pic32_uart_startup(struct uart_port *port)
        /* enable all interrupts and eanable uart */
        pic32_uart_en_and_unmask(port);
 
+       local_irq_restore(flags);
+
        enable_irq(sport->irq_rx);
 
        return 0;