From: Marek Szyprowski <m.szyprowski@samsung.com>
To: Petr Mladek <pmladek@suse.com>
Cc: John Ogness <john.ogness@linutronix.de>,
Sergey Senozhatsky <senozhatsky@chromium.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-amlogic@lists.infradead.org
Subject: Re: [PATCH printk v5 1/1] printk: extend console_lock for per-console locking
Date: Tue, 3 May 2022 01:13:19 +0200 [thread overview]
Message-ID: <45849b63-d7a8-5cc3-26ad-256a28d09991@samsung.com> (raw)
In-Reply-To: <Ym/Z7PYPqvWPEjuL@alley>
Hi Petr,
On 02.05.2022 15:17, Petr Mladek wrote:
> On Mon 2022-05-02 11:19:07, Marek Szyprowski wrote:
>> On 30.04.2022 18:00, John Ogness wrote:
>>> On 2022-04-29, Marek Szyprowski <m.szyprowski@samsung.com> wrote:
>>>> The same issue happens if I boot with init=/bin/bash
>>> Very interesting. Since you are seeing all the output up until you try
>>> doing something, I guess receiving UART data is triggering the issue.
>> Right, this is how it looks like.
>>
>>>> I found something really interesting. When lockup happens, I'm still
>>>> able to log via ssh and trigger any magic sysrq action via
>>>> /proc/sysrq-trigger.
>>> If you boot the system and directly login via ssh (without sending any
>>> data via serial), can you trigger printk output on the UART? For
>>> example, with:
>>>
>>> echo hello > /dev/kmsg
>>>
>>> (You might need to increase your loglevel to see it.)
>> Data written to /dev/kmsg and all kernel logs were always displayed
>> correctly. Also data written directly to /dev/ttyAML0 is displayed
>> properly on the console. The latter doesn't however trigger the input
>> related activity.
>>
>> It looks that the data read from the uart is delivered only if other
>> activity happens on the kernel console. If I type 'reboot' and press
>> enter, nothing happens immediately. If I type 'date >/dev/ttyAML0' via
>> ssh then, I only see the date printed on the console. However if I type
>> 'date >/dev/kmsg', the the date is printed and reboot happens.
> This is really interesting.
>
> 'date >/dev/kmsg' should be handled like a normal printk().
> It should get pushed to the console using printk kthread,
> that calls call_console_driver() that calls con->write()
> callback. In our case, it should be meson_serial_console_write().
>
> I am not sure if meson_serial_console_write() is used also
> when writing via /dev/ttyAML0.
>
>>>> It turned out that the UART console is somehow blocked, but it
>>>> receives and buffers all the input. For example after issuing "echo
>>>> >/proc/sysrq-trigger" from the ssh console, the UART console has been
>>>> updated and I see the magic sysrq banner and then all the commands I
>>>> blindly typed in the UART console! However this doesn't unblock the
>>>> console.
>>> sysrq falls back to direct printing. This would imply that the kthread
>>> printer is somehow unable to print.
>>>
>>>> Here is the output of 't' magic sys request:
>>>>
>>>> https://protect2.fireeye.com/v1/url?k=8649f24d-e73258c4-86487902-74fe48600034-a2ca6bb18361467d&q=1&e=1bc4226f-a422-42b9-95e8-128845b8609f&u=https%3A%2F%2Fpastebin.com%2FfjbRuy4f
>>> It looks like the call trace for the printing kthread (pr/ttyAML0) is
>>> corrupt.
>> Right, good catch. For comparison, here is a 't' sysrq result from the
>> 'working' serial console (next-20220429), which happens usually 1 of 4
>> boots:
>>
>> https://protect2.fireeye.com/v1/url?k=610106f1-008a13b6-61008dbe-000babff99aa-11083c39c44861df&q=1&e=2eafad9e-c5d2-4696-9d78-f3b5885256dc&u=https%3A%2F%2Fpastebin.com%2Fmp8zGFbW
> Strange. The backtrace is weird here too:
>
> [ 50.514509] task:pr/ttyAML0 state:R running task stack: 0 pid: 65 ppid: 2 flags:0x00000008
> [ 50.514540] Call trace:
> [ 50.514548] __switch_to+0xe8/0x160
> [ 50.514561] meson_serial_console+0x78/0x118
>
> There should be kthread() and printk_kthread_func() on the stack.
>
> Hmm, meson_serial_console+0x78/0x118 is weird on its own.
> meson_serial_console is the name of the structure. I would
> expect a name of the .write callback, like
> meson_serial_console_write()
Well, this sounds a bit like a stack corruption. For the reference, I've
checked what magic sysrq 't' reports for my other test boards:
RaspberryPi4:
[ 166.702431] task:pr/ttyS0 state:R stack: 0 pid: 64
ppid: 2 flags:0x00000008
[ 166.711069] Call trace:
[ 166.713647] __switch_to+0xe8/0x160
[ 166.717216] __schedule+0x2f4/0x9f0
[ 166.720862] log_wait+0x0/0x50
[ 166.724081] task:vfio-irqfd-clea state:I stack: 0 pid: 65
ppid: 2 flags:0x00000008
[ 166.732698] Call trace:
ARM Juno R1:
[ 74.356562] task:pr/ttyAMA0 state:R running task stack: 0
pid: 47 ppid: 2 flags:0x00000008
[ 74.356605] Call trace:
[ 74.356617] __switch_to+0xe8/0x160
[ 74.356637] amba_console+0x78/0x118
[ 74.356657] task:kworker/2:1 state:I stack: 0 pid: 48
ppid: 2 flags:0x00000008
[ 74.356695] Workqueue: 0x0 (mm_percpu_wq)
[ 74.356738] Call trace:
QEMU virt/arm64:
[ 174.155760] task:pr/ttyAMA0 state:S stack: 0 pid: 26
ppid: 2 flags:0x00000008
[ 174.156305] Call trace:
[ 174.156529] __switch_to+0xe8/0x160
[ 174.157131] 0xffff5ebbbfdd62d8
In the last case it doesn't happen always. In the other runs I got the
following log from QEMU virt/arm64:
[ 200.537579] task:pr/ttyAMA0 state:S stack: 0 pid: 26
ppid: 2 flags:0x00000008
[ 200.538121] Call trace:
[ 200.538341] __switch_to+0xe8/0x160
[ 200.538583] __schedule+0x2f4/0x9f0
[ 200.538822] schedule+0x54/0xd0
[ 200.539047] printk_kthread_func+0x2d8/0x3bc
[ 200.539301] kthread+0x118/0x11c
[ 200.539523] ret_from_fork+0x10/0x20
I hope that at least the qemu case will let you to analyze it by
yourself. I run my test system with the following command:
qemu-system-aarch64 -kernel virt/Image -append "console=ttyAMA0
root=/dev/vda rootwait" -M virt -cpu cortex-a57 -smp 2 -m 1024 -device
virtio-blk-device,drive=virtio-blk0 -drive
file=qemu-virt-rootfs.raw,id=virtio-blk0,if=none,format=raw -netdev
user,id=user -device virtio-net-device,netdev=user -display none
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
next prev parent reply other threads:[~2022-05-02 23:13 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20220421212250.565456-1-john.ogness@linutronix.de>
[not found] ` <20220421212250.565456-15-john.ogness@linutronix.de>
[not found] ` <878rrs6ft7.fsf@jogness.linutronix.de>
[not found] ` <Ymfgis0EAw0Oxoa5@alley>
[not found] ` <Ymfwk+X0CHq6ex3s@alley>
[not found] ` <CGME20220427070833eucas1p27a32ce7c41c0da26f05bd52155f0031c@eucas1p2.samsung.com>
2022-04-27 7:08 ` Marek Szyprowski
2022-04-27 7:38 ` Petr Mladek
2022-04-27 11:44 ` Marek Szyprowski
2022-04-27 16:15 ` John Ogness
2022-04-27 16:48 ` Petr Mladek
2022-04-28 14:54 ` Petr Mladek
2022-04-29 13:53 ` Marek Szyprowski
2022-04-30 16:00 ` John Ogness
2022-05-02 9:19 ` Marek Szyprowski
2022-05-02 13:11 ` John Ogness
2022-05-02 22:29 ` Marek Szyprowski
2022-05-04 5:56 ` John Ogness
2022-05-04 6:52 ` Marek Szyprowski
2022-06-08 15:10 ` Geert Uytterhoeven
2022-06-09 11:19 ` John Ogness
2022-06-09 11:58 ` Jason A. Donenfeld
2022-06-09 12:18 ` Dmitry Vyukov
2022-06-09 12:27 ` Jason A. Donenfeld
2022-06-09 12:32 ` Dmitry Vyukov
2022-06-17 16:51 ` Sebastian Andrzej Siewior
2022-06-09 12:18 ` Jason A. Donenfeld
2022-05-02 13:17 ` Petr Mladek
2022-05-02 23:13 ` Marek Szyprowski [this message]
2022-05-03 6:49 ` Petr Mladek
2022-05-04 6:05 ` Marek Szyprowski
2022-05-04 21:11 ` John Ogness
2022-05-04 22:42 ` John Ogness
2022-05-05 22:33 ` John Ogness
2022-05-06 6:43 ` Marek Szyprowski
2022-05-06 7:55 ` Neil Armstrong
2022-05-08 11:02 ` John Ogness
2022-05-06 8:16 ` Petr Mladek
2022-05-06 9:20 ` John Ogness
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45849b63-d7a8-5cc3-26ad-256a28d09991@samsung.com \
--to=m.szyprowski@samsung.com \
--cc=gregkh@linuxfoundation.org \
--cc=john.ogness@linutronix.de \
--cc=linux-amlogic@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®