FAILED: patch "[PATCH] tty: serial: meson: fix hard LOCKUP on crtscts mode" failed to apply to 4.19-stable tree
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-4.19.y
git checkout FETCH_HEAD
git cherry-pick -x 2a1d728f20edeee7f26dc307ed9df4e0d23947ab
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023112236-requisite-chomp-8664@gregkh' --subject-prefix 'PATCH 4.19.y' HEAD^..
Possible dependencies:
2a1d728f20ed ("tty: serial: meson: fix hard LOCKUP on crtscts mode") 5b6806198347 ("serial: meson: Use platform_get_irq() to get the interrupt") 27d44e05d7b8 ("tty: serial: meson: retrieve port FIFO size from DT") 021212f53352 ("serial: meson: remove redundant initialization of variable id") dca3ac8d3bc9 ("tty/serial: Migrate meson_uart to use has_sysrq") a26988e8fef4 ("tty: serial: meson: if no alias specified use an available id")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 2a1d728f20edeee7f26dc307ed9df4e0d23947ab Mon Sep 17 00:00:00 2001
From: Pavel Krasavin <[email protected]>
Date: Sat, 14 Oct 2023 11:39:26 +0000
Subject: [PATCH] tty: serial: meson: fix hard LOCKUP on crtscts mode
There might be hard lockup if we set crtscts mode on port without RTS/CTS configured:
# stty -F /dev/ttyAML6 crtscts; echo 1 > /dev/ttyAML6; echo 2 > /dev/ttyAML6 [ 95.890386] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks: [ 95.890857] rcu: 3-...0: (201 ticks this GP) idle=e33c/1/0x4000000000000000 softirq=5844/5846 fqs=4984 [ 95.900212] rcu: (detected by 2, t=21016 jiffies, g=7753, q=296 ncpus=4) [ 95.906972] Task dump for CPU 3: [ 95.910178] task:bash state:R running task stack:0 pid:205 ppid:1 flags:0x00000202 [ 95.920059] Call trace: [ 95.922485] __switch_to+0xe4/0x168 [ 95.925951] 0xffffff8003477508 [ 95.974379] watchdog: Watchdog detected hard LOCKUP on cpu 3 [ 95.974424] Modules linked in: 88x2cs(O) rtc_meson_vrtc
Possible solution would be to not allow to setup crtscts on such port.
Tested on S905X3 based board.
v6: stable tag added
v5: https://lore.kernel.org/lkml/[email protected]/
added missed Reviewed-by tags, Fixes tag added according to Dmitry and Neil notes
v4: https://lore.kernel.org/lkml/[email protected]/
More correct patch subject according to Jiri's note
v3: https://lore.kernel.org/lkml/[email protected]/
"From:" line added to the mail
v2: https://lore.kernel.org/lkml/[email protected]/
braces for single statement removed according to Dmitry's note
v1: https://lore.kernel.org/lkml/[email protected]/
drivers/tty/serial/meson_uart.c +11 -3
@@ -380,10 +380,14 @@ static void meson_uart_set_termios(struct uart_port *port,else val |=AML_UART_STOP_BIT_1SB ; -if (cflags &CRTSCTS ) - val &= ~AML_UART_TWO_WIRE_EN ; -else +if (cflags &CRTSCTS ) { +if (port->flags &UPF_HARD_FLOW ) + val &= ~AML_UART_TWO_WIRE_EN ; +else + termios->c_cflag &= ~CRTSCTS ; + }else { val |=AML_UART_TWO_WIRE_EN ; + }writel (val, port->membase +AML_UART_CONTROL );
@@ -705,6 +709,7 @@ static int meson_uart_probe(struct platform_device *pdev)u32 fifosize =64 ;/* Default is 64, 128 for EE UART_0 */ int ret =0 ;int irq; +bool has_rtscts;if (pdev->dev.of_node) pdev->id =of_alias_get_id (pdev->dev.of_node,"serial" );
@@ -732,6 +737,7 @@ static int meson_uart_probe(struct platform_device *pdev)return irq;of_property_read_u32 (pdev->dev.of_node,"fifo-size" , &fifosize); + has_rtscts =of_property_read_bool (pdev->dev.of_node,"uart-has-rtscts" );if (meson_ports[pdev->id]) { return dev_err_probe(&pdev->dev, -EBUSY,
@@ -762,6 +768,8 @@ static int meson_uart_probe(struct platform_device *pdev) port->mapsize =resource_size (res_mem); port->irq = irq; port->flags =UPF_BOOT_AUTOCONF |UPF_LOW_LATENCY ; +if (has_rtscts) + port->flags |=UPF_HARD_FLOW ; port->has_sysrq =IS_ENABLED (CONFIG_SERIAL_MESON_CONSOLE ); port->dev = &pdev->dev; port->line = pdev->id;