On 2024-04-05 at 08:08:23 +0200, Jiri Slaby (SUSE) wrote:..
Switch from struct circ_buf to proper kfifo. kfifo provides much better
API, esp. when wrap-around of the buffer needs to be taken into account.
Look at pl011_dma_tx_refill() or cpm_uart_tx_pump() changes for example.
Greeting!..
I used syzkaller and Internal v6.9-rc4 kernel which include Linux next kernel,
and found deadlock in console_flush_all issue, bisected the commit is:
"
1788cf6a91d9 tty: serial: switch from circ_buf to kfifo
"
[ 17.841628] ======================================================..
[ 17.841631] WARNING: possible circular locking dependency detected
[ 17.841632] 6.9.0-rc4-df0b4fecf9eb+ #1 Not tainted
[ 17.841636] ------------------------------------------------------
[ 17.841638] repro/726 is trying to acquire lock:
[ 17.841641] ffffffff86d6da80 (console_owner){....}-{0:0}, at: console_flush_all+0x51a/0xc40
[ 17.841665]
[ 17.841665] but task is already holding lock:
[ 17.841667] ffffffff89aa52b8 (&port_lock_key){-...}-{2:2}, at: uart_put_char+0x118/0x510
[ 17.841684]
[ 17.841684] which lock already depends on the new lock.
[ 17.842133] stack backtrace:..
[ 17.842461] handle_bug+0xa2/0x130
[ 17.842469] exc_invalid_op+0x3c/0x80
[ 17.842479] asm_exc_invalid_op+0x1f/0x30
[ 17.842487] RIP: 0010:uart_put_char+0x3ac/0x510
[ 17.879899] WARNING: CPU: 0 PID: 726 at drivers/tty/serial/serial_core.c:561 uart_put_char+0x3ac/0x510
Hope reproduced code and bisection is helpful.