From ec7ae56db699d4749e305c83396d40ad093ce652 Mon Sep 17 00:00:00 2001 From: "Michael C. Ferguson" Date: Wed, 2 Sep 2026 21:35:56 -0500 Subject: [PATCH 1/3] =?UTF-8?q?rt:=20netconsole=20(dynamic,=20configfs)=20?= =?UTF-8?q?and=20sysrq=20in=20the=207.2=20kernel=20fragment=20=E2=80=94=20?= =?UTF-8?q?the=20board's=20only=20way=20to=20say=20why=20it=20rebooted?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A whole-board reboot during a PSX session on 2026-09-02 left no trace: the serial console is disabled, pstore has no RAM reservation, and /tmp died with the reboot. NETCONSOLE=y with the DYNAMIC target so the listener address stays in the rig's out-of-band config, never in this tree; MAGIC_SYSRQ for a live dump while the board is wedged but reachable. RT/7.2 fragment only; the 6.18 stock-parity kernel is untouched. Leaves with the other debug options when a shipping 7.2 kernel is cut. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_012AZB1JmCKWaJt1ka22oex3 --- board/mister/de10nano/linux-rt.fragment | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/board/mister/de10nano/linux-rt.fragment b/board/mister/de10nano/linux-rt.fragment index fb425da..e68ce75 100644 --- a/board/mister/de10nano/linux-rt.fragment +++ b/board/mister/de10nano/linux-rt.fragment @@ -141,3 +141,26 @@ CONFIG_PSTORE_PMSG=y # the safe default wanted. Do not "enable" it here — enabling is a userspace # decision (open the device and feed it), and adding symbols would only create # the appearance of a beta-only capability that is not beta-only. + +# --- Troubleshooting channels (RT/7.2 variant ONLY; the 6.18 stock-parity kernel +# is untouched). Leave with the other debug options when a shipping 7.2 kernel +# is cut. +# CONFIG_NETCONSOLE send printk (incl. an oops/panic) over UDP to a +# listener; the ONLY way kernel text leaves this +# board: the serial console is disabled and the +# pstore backend above has no RAM reservation yet. +# CONFIG_NETCONSOLE_DYNAMIC configure the target at RUNTIME through configfs +# (/sys/kernel/config/netconsole) from the rig's own +# out-of-band config -- no listener address is ever +# baked into this tree. +# CONFIG_MAGIC_SYSRQ sysrq over /proc/sysrq-trigger for a live +# backtrace/state dump when the board is wedged but +# still reachable. +# Measured need: a whole-board reboot during a PSX session on 2026-09-02 left no +# trace anywhere (kernel.panic=15 fired; logs on tmpfs died with it). +CONFIG_NETCONSOLE=y +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_CONFIGFS_FS=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 + From 66c1b501ef5a5bea3c0e271231fd81883a3574ea Mon Sep 17 00:00:00 2001 From: "Michael C. Ferguson" Date: Wed, 2 Sep 2026 21:47:31 -0500 Subject: [PATCH 2/3] rt fragment: keep only the RT-only deltas; sysrq mask stays inherited Copilot review on #140: CONFIGFS_FS=y and MAGIC_SYSRQ=y already come from the shared linux.config, and MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 is the kernel default the stock-parity 6.18 kernel also has; restating them in the RT fragment blurred what is RT-only. Dropped; the comment now says they are inherited. Deliberately NOT narrowing the sysrq mask to 0x8: 0x1 (= all functions) is what stock ships, and diverging RT from stock on a debug knob buys nothing. Merging old vs new fragment onto the 7.2.3 RT .config yields the same symbol values. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01FYjrnzEEu4HzJSPWNAaRvm --- board/mister/de10nano/linux-rt.fragment | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/board/mister/de10nano/linux-rt.fragment b/board/mister/de10nano/linux-rt.fragment index e68ce75..9574199 100644 --- a/board/mister/de10nano/linux-rt.fragment +++ b/board/mister/de10nano/linux-rt.fragment @@ -153,14 +153,17 @@ CONFIG_PSTORE_PMSG=y # (/sys/kernel/config/netconsole) from the rig's own # out-of-band config -- no listener address is ever # baked into this tree. -# CONFIG_MAGIC_SYSRQ sysrq over /proc/sysrq-trigger for a live -# backtrace/state dump when the board is wedged but -# still reachable. +# (inherited, NOT set here) CONFIGFS_FS=y and MAGIC_SYSRQ=y already come from +# the shared linux.config, so /sys/kernel/config +# exists for the dynamic target and sysrq over +# /proc/sysrq-trigger gives a live backtrace/state +# dump when the board is wedged but reachable. +# MAGIC_SYSRQ_DEFAULT_ENABLE stays at the kernel +# default 0x1 (= ALL functions), the same as the +# stock-parity 6.18 kernel -- narrowing it here +# would make RT diverge from stock for no gain. # Measured need: a whole-board reboot during a PSX session on 2026-09-02 left no # trace anywhere (kernel.panic=15 fired; logs on tmpfs died with it). CONFIG_NETCONSOLE=y CONFIG_NETCONSOLE_DYNAMIC=y -CONFIG_CONFIGFS_FS=y -CONFIG_MAGIC_SYSRQ=y -CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 From abd67bed910c48e6f55182e78db04450e0a7a92f Mon Sep 17 00:00:00 2001 From: "Michael C. Ferguson" Date: Wed, 2 Sep 2026 21:49:47 -0500 Subject: [PATCH 3/3] rt fragment: netconsole is the live off-board channel; ramoops is provisioned Copilot review on #140: the comment claimed the pstore backend had no RAM reservation, but the RT series carries 0046-dts-ramoops.patch (1 MiB at 0x1FE00000) and PSTORE_RAM=y. Reworded: ramoops is the on-board post-mortem channel that needs a successful warm reboot to read back; netconsole streams printk off the board live, which is what a hang or power cycle leaves you. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01FYjrnzEEu4HzJSPWNAaRvm --- board/mister/de10nano/linux-rt.fragment | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/board/mister/de10nano/linux-rt.fragment b/board/mister/de10nano/linux-rt.fragment index 9574199..d4340e2 100644 --- a/board/mister/de10nano/linux-rt.fragment +++ b/board/mister/de10nano/linux-rt.fragment @@ -146,9 +146,17 @@ CONFIG_PSTORE_PMSG=y # is untouched). Leave with the other debug options when a shipping 7.2 kernel # is cut. # CONFIG_NETCONSOLE send printk (incl. an oops/panic) over UDP to a -# listener; the ONLY way kernel text leaves this -# board: the serial console is disabled and the -# pstore backend above has no RAM reservation yet. +# listener AS IT HAPPENS -- the LIVE, off-board +# channel. It complements, not replaces, the +# on-board post-mortem channel: pstore/ramoops IS +# provisioned on this kernel (0046-dts-ramoops.patch +# reserves 1 MiB at 0x1FE00000; PSTORE_RAM=y above), +# but ramoops only helps if the board comes back +# from a warm reboot so /sys/fs/pstore can be read, +# and it dies with a power cycle or a hang that +# never reboots. With the serial console disabled, +# netconsole is the one channel that gets the last +# lines OFF the board while it is still dying. # CONFIG_NETCONSOLE_DYNAMIC configure the target at RUNTIME through configfs # (/sys/kernel/config/netconsole) from the rig's own # out-of-band config -- no listener address is ever