On (07/04/18 01:31), Sergey Senozhatsky wrote:
> it might be the case that we can do
> 
>       serial_driver_handle_irq()
>       {
>               spin_loc(uart_port->lock);
> 
>               .. TX / RX
> 
>               spin_unlock(uart_port->lock);
> 
>               tty_flip_buffer_push(uart_port->tty_port);
>       }
> 
> This should break this chain
> 
>       uart_port->lock -> pool->lock   // -> sheduler/etc.
> 
> 
> Can we do it? What am I missing?

Hmm, and we actually have some serial drivers that do tty_filp_buffer_push()
outside of uart_port->lock. For instance, drivers/tty/serial/efm32-uart.c
irqreturn_t efm32_uart_rxirq().

        -ss

Reply via email to