Skip to content

Commit 96fad20

Browse files
authored
Merge pull request #1328 from kernelkit/cand/v25.08.x
Candidate backports for v25.08.2
2 parents 68e7167 + 0a3879f commit 96fad20

File tree

28 files changed

+1638
-330
lines changed

28 files changed

+1638
-330
lines changed

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ jobs:
125125
if echo $ver | grep -qE 'v[0-9.]+(-alpha|-beta|-rc)[0-9]*'; then
126126
echo "pre=true" >> $GITHUB_OUTPUT
127127
echo "latest=false" >> $GITHUB_OUTPUT
128-
elif echo $ver | grep -qE '^v[0-9.]+\.[0-9.]+(\.[0-9]+)?$'; then
128+
elif echo $ver | grep -qE '^v[0-9]+\.[0-9]+(\.0)?$'; then
129129
echo "pre=false" >> $GITHUB_OUTPUT
130130
echo "latest=true" >> $GITHUB_OUTPUT
131131
echo "cat=Releases" >> $GITHUB_OUTPUT

board/aarch64/linux_defconfig

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ CONFIG_WATCHDOG=y
401401
CONFIG_WATCHDOG_SYSFS=y
402402
CONFIG_SOFT_WATCHDOG=y
403403
CONFIG_GPIO_WATCHDOG=y
404+
CONFIG_ARM_SBSA_WATCHDOG=y
404405
CONFIG_ARMADA_37XX_WATCHDOG=y
405406
CONFIG_I6300ESB_WDT=y
406407
CONFIG_MFD_MAX77620=y
@@ -549,7 +550,14 @@ CONFIG_MAGIC_SYSRQ=y
549550
CONFIG_DEBUG_FS=y
550551
CONFIG_PANIC_ON_OOPS=y
551552
CONFIG_PANIC_TIMEOUT=20
552-
CONFIG_DETECT_HUNG_TASK=y
553+
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
554+
CONFIG_HARDLOCKUP_DETECTOR=y
555+
CONFIG_HARDLOCKUP_DETECTOR_PREFER_BUDDY=y
556+
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
557+
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
558+
CONFIG_WQ_WATCHDOG=y
559+
CONFIG_WQ_CPU_INTENSIVE_REPORT=y
560+
CONFIG_TEST_LOCKUP=m
553561
# CONFIG_SCHED_DEBUG is not set
554562
# CONFIG_RCU_TRACE is not set
555563
CONFIG_FUNCTION_TRACER=y
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
# Build a map of phandle -> device tree node path for all PHY nodes
6+
build_phandle_map()
7+
{
8+
for phy_node in /sys/firmware/devicetree/base/cp*/config-space*/mdio*/switch*/mdio/ethernet-phy@* \
9+
/sys/firmware/devicetree/base/cp*/config-space*/mdio*/ethernet-phy@*; do
10+
[ -f "$phy_node/phandle" ] || continue
11+
12+
phandle=$(od -An -t x4 -N 4 "$phy_node/phandle" 2>/dev/null | tr -d ' ')
13+
if [ -n "$phandle" ]; then
14+
echo "$phandle:$phy_node"
15+
fi
16+
done
17+
}
18+
19+
build_phy_map()
20+
{
21+
phandle_map=$(build_phandle_map)
22+
23+
# Build a mapping of PHY of_node path -> interface name
24+
for iface in /sys/class/net/*; do
25+
[ -d "$iface" ] || continue
26+
27+
iface_name=$(basename "$iface")
28+
29+
# Try regular phydev approach first (for non-DSA interfaces)
30+
if [ -L "$iface/phydev/of_node" ]; then
31+
phy_of_node=$(readlink -f "$iface/phydev/of_node" 2>/dev/null)
32+
if [ -n "$phy_of_node" ]; then
33+
echo "$phy_of_node:$iface_name"
34+
continue
35+
fi
36+
fi
37+
38+
# For DSA interfaces, resolve via of_node's phy-handle
39+
if [ -L "$iface/of_node" ]; then
40+
iface_of_node=$(readlink -f "$iface/of_node" 2>/dev/null)
41+
[ -n "$iface_of_node" ] || continue
42+
43+
# Try to read phy-handle property (4-byte phandle)
44+
if [ -f "$iface_of_node/phy-handle" ]; then
45+
phy_phandle=$(od -An -t x4 -N 4 "$iface_of_node/phy-handle" 2>/dev/null | tr -d ' ')
46+
47+
if [ -n "$phy_phandle" ]; then
48+
# Look up the PHY node path from our phandle map
49+
phy_of_node=$(echo "$phandle_map" | grep "^$phy_phandle:" | cut -d: -f2)
50+
if [ -n "$phy_of_node" ]; then
51+
echo "$phy_of_node:$iface_name"
52+
fi
53+
fi
54+
fi
55+
fi
56+
done
57+
}
58+
59+
zone_map()
60+
{
61+
type="$1"
62+
63+
case "$type" in
64+
ap-ic-thermal)
65+
echo "Application processor interconnect"
66+
;;
67+
ap-cpu[0-9]*-thermal)
68+
cpu=${type#ap-cpu}
69+
cpu=${cpu%-thermal}
70+
echo "Application processor core $cpu"
71+
;;
72+
cp[0-9]*-ic-thermal)
73+
cp=${type%%-*}
74+
cp=${cp#cp}
75+
echo "Communication processor $cp interconnect"
76+
;;
77+
*)
78+
echo "$type"
79+
;;
80+
esac
81+
}
82+
83+
thermal_zones()
84+
{
85+
echo "Thermal Zones"
86+
echo "============="
87+
echo
88+
89+
for zone in /sys/class/thermal/thermal_zone*; do
90+
[ -d "$zone" ] || continue
91+
92+
name=$(basename "$zone")
93+
type=$(cat "$zone/type" 2>/dev/null || echo "unknown")
94+
data=$(cat "$zone/temp" 2>/dev/null)
95+
desc=$(zone_map "$type")
96+
97+
if [ -n "$data" ] && [ "$data" != "N/A" ]; then
98+
# Convert millidegrees to degrees Celsius
99+
temp_c=$(awk "BEGIN {printf \"%.1f\", $data / 1000}")
100+
printf "%-20s %8s°C %s\n" "$name" "$temp_c" "$desc"
101+
else
102+
printf "%-20s %8s %s\n" "$name" "N/A" "$desc"
103+
fi
104+
done
105+
echo
106+
}
107+
108+
hwmon()
109+
{
110+
tmpfile=$(mktemp)
111+
112+
echo "Hardware Monitors"
113+
echo "================="
114+
echo
115+
116+
phy_map=$(build_phy_map)
117+
118+
for hwmon in /sys/class/hwmon/hwmon*; do
119+
[ -d "$hwmon" ] || continue
120+
121+
name=$(basename "$hwmon")
122+
data=$(cat "$hwmon/temp1_input" 2>/dev/null)
123+
124+
# Try to find the associated network interface
125+
iface=
126+
if [ -L "$hwmon/of_node" ]; then
127+
hwmon_of_node=$(readlink -f "$hwmon/of_node" 2>/dev/null)
128+
if [ -n "$hwmon_of_node" ]; then
129+
iface=$(echo "$phy_map" | grep "^$hwmon_of_node:" | cut -d: -f2)
130+
fi
131+
fi
132+
133+
if [ -n "$iface" ]; then
134+
description="Phy $iface temperature"
135+
else
136+
description="N/A"
137+
fi
138+
139+
if [ -n "$data" ] && [ "$data" != "N/A" ]; then
140+
# Convert millidegrees to degrees Celsius
141+
temp_c=$(awk "BEGIN {printf \"%.1f\", $data / 1000}")
142+
# Format: sortkey|hwmon|temp|description (sortkey for natural sort by interface)
143+
printf "%s|%-20s %8s°C %s\n" "$iface" "$name" "$temp_c" "$description" >> "$tmpfile"
144+
else
145+
printf "%s|%-20s %8s %s\n" "$iface" "$name" "N/A" "$description" >> "$tmpfile"
146+
fi
147+
done
148+
149+
# Sort by interface name naturally (e2 before e10), with N/A entries at the end
150+
# Then strip the sort key before displaying
151+
sort -V -t'|' -k1,1 "$tmpfile" | cut -d'|' -f2-
152+
rm -f "$tmpfile"
153+
echo
154+
}
155+
156+
[ -n "$1" ] || { echo "usage: $0 OUT-DIR"; exit 1; }
157+
work="$1"/system
158+
mkdir -p "${work}"
159+
160+
thermal_zones > "${work}"/temperature.txt
161+
hwmon >> "${work}"/temperature.txt
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
ecc_stat()
6+
{
7+
local chan=
8+
local base=
9+
10+
for chan in 0 1; do
11+
base=$((0xf0020360 + 0x200 * chan))
12+
13+
echo "DRAM Channel $chan ECC Status"
14+
echo -n " Log config: "; devmem $((base + 0x0)) 32
15+
echo -n " 1b errors: "; devmem $((base + 0x4)) 32
16+
echo -n " Info 0: "; devmem $((base + 0x8)) 32
17+
echo -n " Info 1: "; devmem $((base + 0xc)) 32
18+
echo
19+
done
20+
}
21+
22+
[ -n "$1" ] || { echo "usage: $0 OUT-DIR"; exit 1; }
23+
work="$1"/marvell-cn913x
24+
mkdir -p "${work}"
25+
26+
ecc_stat >"${work}"/ecc-stat

board/common/rootfs/etc/watchdogd.conf

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ reset-reason {
9090

9191
# Monitors file descriptor leaks based on /proc/sys/fs/file-nr
9292
filenr {
93-
# enabled = true
94-
interval = 300
95-
logmark = false
93+
enabled = true
94+
interval = 3600
95+
logmark = true
9696
warning = 0.9
9797
critical = 1.0
9898
# script = "/path/to/alt-reboot-action.sh"
@@ -102,33 +102,42 @@ filenr {
102102
# The script is called with fsmon as the first argument and there
103103
# are two environment variables FSMON_NAME, for the monitored path,
104104
# and FSMON_TYPE indicating either 'blocks' or 'inodes'.
105-
#fsmon /var {
106-
# enabled = true
107-
# interval = 300
108-
# logmark = false
109-
# warning = 0.95
110-
# critical = 1.0
105+
fsmon /var {
106+
enabled = true
107+
interval = 3600
108+
logmark = true
109+
warning = 0.95
110+
critical = 1.0
111111
# script = "/path/to/alt-reboot-action.sh"
112-
#}
112+
}
113+
114+
fsmon /tmp {
115+
enabled = true
116+
interval = 3600
117+
logmark = true
118+
warning = 0.95
119+
critical = 1.0
120+
# script = "/path/to/alt-reboot-action.sh"
121+
}
113122

114123
# Monitors load average based on sysinfo() from /proc/loadavg
115124
# The level is composed from the average of the 1 and 5 min marks.
116-
loadavg {
125+
#loadavg {
117126
# enabled = true
118-
interval = 300
119-
logmark = false
120-
warning = 1.0
121-
critical = 2.0
127+
# interval = 300
128+
# logmark = true
129+
# warning = 1.0
130+
# critical = 2.0
122131
# script = "/path/to/alt-reboot-action.sh"
123-
}
132+
#}
124133

125134
# Monitors free RAM based on data from /proc/meminfo
126135
meminfo {
127-
# enabled = true
128-
interval = 300
129-
logmark = false
136+
enabled = true
137+
interval = 3600
138+
logmark = true
130139
warning = 0.9
131-
critical = 0.95
140+
critical = 0.97
132141
# script = "/path/to/alt-reboot-action.sh"
133142
}
134143

board/riscv64/linux_defconfig

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,16 @@ CONFIG_DEBUG_FS=y
461461
# CONFIG_SLUB_DEBUG is not set
462462
CONFIG_DEBUG_RODATA_TEST=y
463463
CONFIG_DEBUG_WX=y
464-
CONFIG_SOFTLOCKUP_DETECTOR=y
464+
CONFIG_PANIC_ON_OOPS=y
465+
CONFIG_PANIC_TIMEOUT=20
466+
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
467+
CONFIG_HARDLOCKUP_DETECTOR=y
468+
CONFIG_HARDLOCKUP_DETECTOR_PREFER_BUDDY=y
469+
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
470+
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
465471
CONFIG_WQ_WATCHDOG=y
472+
CONFIG_WQ_CPU_INTENSIVE_REPORT=y
473+
CONFIG_TEST_LOCKUP=m
466474
# CONFIG_SCHED_DEBUG is not set
467475
CONFIG_STACKTRACE=y
468476
CONFIG_RCU_CPU_STALL_TIMEOUT=60

board/x86_64/linux_defconfig

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,13 @@ CONFIG_MAGIC_SYSRQ=y
266266
CONFIG_DEBUG_FS=y
267267
CONFIG_PANIC_ON_OOPS=y
268268
CONFIG_PANIC_TIMEOUT=20
269-
CONFIG_DETECT_HUNG_TASK=y
269+
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
270+
CONFIG_HARDLOCKUP_DETECTOR=y
271+
CONFIG_HARDLOCKUP_DETECTOR_PREFER_BUDDY=y
272+
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
270273
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
274+
CONFIG_WQ_WATCHDOG=y
275+
CONFIG_WQ_CPU_INTENSIVE_REPORT=y
276+
CONFIG_TEST_LOCKUP=m
271277
CONFIG_FUNCTION_TRACER=y
272278
CONFIG_UNWINDER_FRAME_POINTER=y

configs/aarch64_defconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ BR2_PACKAGE_RAUC_JSON=y
111111
BR2_PACKAGE_SYSKLOGD=y
112112
BR2_PACKAGE_SYSKLOGD_LOGGER=y
113113
BR2_PACKAGE_WATCHDOGD=y
114+
BR2_PACKAGE_WATCHDOGD_GENERIC=y
115+
BR2_PACKAGE_WATCHDOGD_LOADAVG=y
116+
BR2_PACKAGE_WATCHDOGD_FILENR=y
117+
BR2_PACKAGE_WATCHDOGD_MEMINFO=y
118+
BR2_PACKAGE_WATCHDOGD_FSMON=y
119+
BR2_PACKAGE_WATCHDOGD_TEMPMON
114120
BR2_PACKAGE_LESS=y
115121
BR2_PACKAGE_MG=y
116122
BR2_PACKAGE_NANO=y

configs/aarch64_minimal_defconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ BR2_PACKAGE_RAUC_JSON=y
9494
BR2_PACKAGE_SYSKLOGD=y
9595
BR2_PACKAGE_SYSKLOGD_LOGGER=y
9696
BR2_PACKAGE_WATCHDOGD=y
97+
BR2_PACKAGE_WATCHDOGD_GENERIC=y
98+
BR2_PACKAGE_WATCHDOGD_LOADAVG=y
99+
BR2_PACKAGE_WATCHDOGD_FILENR=y
100+
BR2_PACKAGE_WATCHDOGD_MEMINFO=y
101+
BR2_PACKAGE_WATCHDOGD_FSMON=y
102+
BR2_PACKAGE_WATCHDOGD_TEMPMON
97103
BR2_PACKAGE_LESS=y
98104
BR2_PACKAGE_MG=y
99105
BR2_PACKAGE_NANO=y

configs/riscv64_defconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ BR2_PACKAGE_RAUC_JSON=y
123123
BR2_PACKAGE_SYSKLOGD=y
124124
BR2_PACKAGE_SYSKLOGD_LOGGER=y
125125
BR2_PACKAGE_WATCHDOGD=y
126+
BR2_PACKAGE_WATCHDOGD_GENERIC=y
127+
BR2_PACKAGE_WATCHDOGD_LOADAVG=y
128+
BR2_PACKAGE_WATCHDOGD_FILENR=y
129+
BR2_PACKAGE_WATCHDOGD_MEMINFO=y
130+
BR2_PACKAGE_WATCHDOGD_FSMON=y
131+
BR2_PACKAGE_WATCHDOGD_TEMPMON
126132
BR2_PACKAGE_LESS=y
127133
BR2_PACKAGE_MG=y
128134
BR2_PACKAGE_NANO=y

0 commit comments

Comments
 (0)