Skip to contentSkip to conversation

patch "serial: mvebu-uart: free the IRQ in ->shutdown()" added to tty-next

PATCH [email protected] 1 participant 1 message Jun 26, 2016

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

    serial: mvebu-uart: free the IRQ in ->shutdown()

to my tty git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
in the tty-next branch.

The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)

The patch will also be merged in the next major kernel release during the merge window.

If you have any questions about this process, please let me know.

Quoted 1 line

From c2c1659b4f8f9e19fe82a4fd06cca4b3d59090ce Mon Sep 17 00:00:00 2001

From: Thomas Petazzoni <[email protected]>
Date: Thu, 16 Jun 2016 16:48:52 +0200
Subject: serial: mvebu-uart: free the IRQ in ->shutdown()

As suggested by the serial port infrastructure documentation, the IRQ is requested in ->startup(). However, it is never freed in the ->shutdown() hook.

With simple systems that open the serial port once for all and always have at least one process that keep the serial port opened, there was no problem. But with a more complicated system (*cough* systemd *cough*), the serial port is opened/closed many times, which at some point no processes having the serial port open at all. Due to this ->startup() gets called again, tries to request_irq() again, which fails.

Fixes 30530791a7a0 ("serial: mvebu-uart: initial support for Armada-3700 serial port")
Cc Ofer Heifetz <[email protected]>
---
 drivers/tty/serial/mvebu-uart.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/tty/serial/mvebu-uart.c +2 -0
index ce362bd51de7..45b57c294d13 100644
@@ -300,6 +300,8 @@ static int mvebu_uart_startup(struct uart_port *port)
 static void mvebu_uart_shutdown(struct uart_port *port)
 {
 	writel(0, port->membase + UART_CTRL);
+
+	free_irq(port->irq, port);
 }
 
 static void mvebu_uart_set_termios(struct uart_port *port,
Signature · 1 line
2.9.0