[ldv-project] [question] Is it possible to remove an active port (without shutdown)?

Greg KH gregkh at linuxfoundation.org
Fri Jun 11 12:47:08 MSK 2021


On Fri, Jun 11, 2021 at 03:03:42PM +0530, Saubhik Mukherjee wrote:
> Consider the following events involving drivers/tty/serial/owl-uart.c:
> 
> Suppose the driver is registered, and the owl_uart_probe() was called.
> Then uart_startup() can be called in serial core. This calls
> owl_uart_startup() which registers the interrupt handler owl_uart_irq.
> 
> Now suppose uart_remove_one_port() in serial core is called. This
> detaches port from the core. This calls owl_uart_release_port(port).
> This writes NULL to port->membase after iounmap of port->membase from
> port->dev.
> 
> During this point, an interrupt is triggered and the interrupt callback
> owl_uart_irq() is called (parallel with uart_remove_one_port()). This
> tries to read port->membase to send or receive chars (with spinlock on
> port->lock). This introduces a race condition on port->membase.
> 
> QUESTION: Is it possible to remove an active port (without shutdown)?

You can remove it, if the driver is set up to do so properly.  Odds are
the owl-uart code is not written to expect that to ever happen.

How are you "removing" an active port?  What triggers this action?

thanks,

greg k-h



More information about the ldv-project mailing list