The -rt patch triggers a lockdep warning for serial drivers if tty_flip_buffer_push() is called with uart_port->lock locked. This never shows up on UP kernels.
Release the port lock before calling tty_flip_buffer_push() and reacquire it after the call.
Similar stuff was already done for few other drivers in the past, like:
commit 2389b272168ceec056ca1d8a870a97fa9c26e11a Author: Thomas Gleixner tglx@linutronix.de Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
This is neither tested nor compiled. I was working on Samsung's Arndale board and so was required to samsung serial driver. Then thought why not others :)
Rebased over: v3.11-rc5
Cc: Bryan Huntsman bryanh@codeaurora.org Cc: Daniel Walker dwalker@fifo99.com Cc: David Brown davidb@codeaurora.org Cc: Stephen Warren swarren@wwwdotorg.org Cc: Tobias Klauser tklauser@distanz.ch Cc: Tony Prisk linux@prisktech.co.nz
Viresh Kumar (25): tty: serial: altera_jtag: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: altera: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: apbuart: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: ar933x: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: arc: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: bcm63xx: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: bfin_sport: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: efm32: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: icom: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: lpc32xx_hs: don't call tty_flip_buffer_push() twice tty: serial: lpc32xx_hs: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: m32r_sio: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: mcf: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: mfd: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: mpsc: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: msm: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: netx: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: nwpserial: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: pnx8xxx: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: rp2: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: sa1100: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: samsung: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: tegra: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: sirfsoc: drop uart_port->lock before calling tty_flip_buffer_push() tty: serial: vt8500: drop uart_port->lock before calling tty_flip_buffer_push()
drivers/tty/serial/altera_jtaguart.c | 2 ++ drivers/tty/serial/altera_uart.c | 2 ++ drivers/tty/serial/apbuart.c | 2 ++ drivers/tty/serial/ar933x_uart.c | 2 ++ drivers/tty/serial/arc_uart.c | 2 ++ drivers/tty/serial/bcm63xx_uart.c | 2 ++ drivers/tty/serial/bfin_sport_uart.c | 5 +++-- drivers/tty/serial/efm32-uart.c | 4 ++-- drivers/tty/serial/icom.c | 3 +++ drivers/tty/serial/lpc32xx_hs.c | 7 ++++--- drivers/tty/serial/m32r_sio.c | 3 +++ drivers/tty/serial/mcf.c | 2 ++ drivers/tty/serial/mfd.c | 14 ++++++++++---- drivers/tty/serial/mpsc.c | 11 ++++++++--- drivers/tty/serial/msm_serial.c | 5 +++++ drivers/tty/serial/netx-serial.c | 6 ++++-- drivers/tty/serial/nwpserial.c | 3 +++ drivers/tty/serial/pnx8xxx_uart.c | 3 +++ drivers/tty/serial/rp2.c | 2 ++ drivers/tty/serial/sa1100.c | 3 +++ drivers/tty/serial/samsung.c | 5 ++++- drivers/tty/serial/serial-tegra.c | 10 ++++++++-- drivers/tty/serial/sirfsoc_uart.c | 3 +++ drivers/tty/serial/vt8500_serial.c | 2 ++ 24 files changed, 84 insertions(+), 19 deletions(-)