Skip to content

Commit 17f67e7

Browse files
authored
Merge pull request #400 from smuppand/Bluetooth-fix
Reduce false BT and shmbridge failures caused by kernel log flooding
2 parents 88afca7 + 2f66790 commit 17f67e7

3 files changed

Lines changed: 104 additions & 53 deletions

File tree

Runner/suites/Connectivity/Bluetooth/BT_FW_KMD_Service/run.sh

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/sh
22
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
3-
# SPDX-License-Identifier: BSD-3-Clause#
3+
# SPDX-License-Identifier: BSD-3-Clause
44
# BT_FW_KMD_Service - Bluetooth FW + KMD + service + controller infra validation
55
# Non-expect version, using lib_bluetooth.sh helpers.
66

@@ -38,7 +38,7 @@ fi
3838

3939
# ---------- CLI / env parameters ----------
4040
BT_ADAPTER="${BT_ADAPTER-}"
41-
41+
4242
while [ "$#" -gt 0 ]; do
4343
case "$1" in
4444
--adapter)
@@ -72,8 +72,8 @@ inc_warn() { WARN_COUNT=$((WARN_COUNT + 1)); }
7272
log_info "------------------------------------------------------------"
7373
log_info "Starting $TESTNAME"
7474

75-
log_info "Checking dependencies: bluetoothctl hciconfig dmesg lsmod"
76-
if ! check_dependencies bluetoothctl hciconfig dmesg lsmod; then
75+
log_info "Checking dependencies: bluetoothctl hciconfig lsmod"
76+
if ! check_dependencies bluetoothctl hciconfig lsmod; then
7777
echo "$TESTNAME SKIP" > "$RES_FILE"
7878
exit 0
7979
fi
@@ -87,13 +87,13 @@ else
8787
fi
8888

8989
# ---------- DT node / compatible ----------
90-
BT_COMPAT_LIST="
91-
qcom,wcn7850-bt
92-
qcom,wcn6855-bt
93-
qcom,bluetooth
94-
"
95-
96-
if dt_confirm_node_or_compatible_all "BT" "$BT_COMPAT_LIST"; then
90+
# ---------- DT node / compatible ----------
91+
if dt_confirm_node_or_compatible_all \
92+
"qcom,wcn7850-bt" \
93+
"qcom,wcn6855-bt" \
94+
"qcom,wcn6750-bt" \
95+
"qcom,bluetooth"
96+
then
9797
log_pass "DT node/compatible for BT present (at least one entry matched)."
9898
else
9999
log_fail "DT node/compatible for BT NOT found."
@@ -108,26 +108,53 @@ else
108108
inc_warn
109109
fi
110110

111-
# ---------- Firmware load dmesg ----------
111+
# ---------- Firmware load kernel log ----------
112112
if command -v btfwloaded >/dev/null 2>&1; then
113113
btfwloaded
114114
rc=$?
115115
case "$rc" in
116116
0)
117-
log_pass "Firmware load/setup appears completed (dmesg)."
117+
log_pass "Firmware load/setup appears completed (kernel log)."
118118
;;
119119
2)
120-
log_warn "Firmware load/setup completed after retry, transient errors seen earlier (dmesg)."
120+
log_warn "Firmware load/setup completed after retry, transient errors seen earlier (kernel log)."
121121
inc_warn
122122
;;
123123
*)
124-
log_fail "Firmware load/setup does NOT look clean (see recent Bluetooth/QCA/WCN dmesg lines above)."
125-
inc_fail
124+
runtime_bt_ok=1
125+
fallback_adapter="$BT_ADAPTER"
126+
127+
if [ -z "$fallback_adapter" ] && findhcisysfs >/dev/null 2>&1; then
128+
fallback_adapter="$(findhcisysfs 2>/dev/null || true)"
129+
fi
130+
131+
if ! btkmdpresent; then
132+
runtime_bt_ok=0
133+
fi
134+
if ! bthcipresent; then
135+
runtime_bt_ok=0
136+
fi
137+
if ! btsvcactive; then
138+
runtime_bt_ok=0
139+
fi
140+
if [ -n "$fallback_adapter" ]; then
141+
if ! btbdok "$fallback_adapter"; then
142+
runtime_bt_ok=0
143+
fi
144+
fi
145+
146+
if [ "$runtime_bt_ok" -eq 1 ]; then
147+
log_warn "No retained BT firmware-load signature found, but BT runtime state is healthy."
148+
inc_warn
149+
else
150+
log_fail "Firmware load/setup does NOT look clean and BT runtime state is also unhealthy."
151+
inc_fail
152+
fi
126153
;;
127154
esac
128155
else
129156
# No SKIP: continue test, just warn.
130-
log_warn "btfwloaded() helper not available firmware-load dmesg validation not performed."
157+
log_warn "btfwloaded() helper not available; firmware-load kernel-log validation not performed."
131158
inc_warn
132159
fi
133160

@@ -166,7 +193,7 @@ elif findhcisysfs >/dev/null 2>&1; then
166193
else
167194
ADAPTER=""
168195
fi
169-
196+
170197
if [ -z "$ADAPTER" ]; then
171198
log_warn "No HCI adapter found; skipping BT FW/KMD test."
172199
echo "$TESTNAME SKIP" > "./$TESTNAME.res"

Runner/suites/Kernel/Baseport/shmbridge/run.sh

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/sh
2-
2+
33
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4-
# SPDX-License-Identifier: BSD-3-Clause
4+
# SPDX-License-Identifier: BSD-3-Clause
55
# Locate and source init_env
66
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
77
INIT_ENV=""
@@ -13,15 +13,15 @@ while [ "$SEARCH" != "/" ]; do
1313
fi
1414
SEARCH=$(dirname "$SEARCH")
1515
done
16-
16+
1717
if [ -z "$INIT_ENV" ]; then
1818
echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2
1919
exit 1
2020
fi
21-
21+
2222
# shellcheck disable=SC1090
2323
. "$INIT_ENV"
24-
24+
2525
# shellcheck disable=SC1090,SC1091
2626
. "$TOOLS/functestlib.sh"
2727

@@ -36,8 +36,8 @@ log_info "==== Test Initialization ===="
3636

3737
log_info "Checking if required tools are available"
3838

39-
if ! check_dependencies zcat grep dmesg; then
40-
log_skip "$TESTNAME SKIP - missing one or more of zcat grep dmesg utils"
39+
if ! check_dependencies grep; then
40+
log_skip "$TESTNAME SKIP - missing required grep utility"
4141
echo "$TESTNAME SKIP" >"$res_file"
4242
exit 0
4343
fi
@@ -48,22 +48,37 @@ if ! check_kernel_config "CONFIG_QCOM_SCM"; then
4848
echo "$TESTNAME SKIP" > "$res_file"
4949
exit 0
5050
fi
51-
52-
log_info "Scanning dmesg logs for qcom_scm initialization"
5351

54-
if dmesg | grep -q 'qcom_scm'; then
55-
if ! scan_dmesg_errors . "" ""; then
56-
log_pass "$TESTNAME : Test Passed (qcom_scm present and no probe failures)"
57-
echo "$TESTNAME PASS" > "$res_file"
58-
else
59-
log_fail "FAIL: 'probe failure' detected in dmesg."
60-
echo "$TESTNAME FAIL" > "$res_file"
61-
fi
52+
log_info "Checking qcom_scm presence using sysfs/current-boot kernel log"
53+
54+
if [ -d /sys/module/qcom_scm ]; then
55+
log_pass "qcom_scm driver is present in sysfs."
56+
elif get_kernel_log 2>/dev/null | grep -qi '\bqcom_scm\b'; then
57+
log_pass "qcom_scm present in current-boot kernel log."
6258
else
63-
log_fail "FAIL: 'qcom_scm' not found in dmesg."
59+
log_fail "FAIL: qcom_scm not found in sysfs or current-boot kernel log."
60+
echo "$TESTNAME FAIL" > "$res_file"
61+
exit 0
62+
fi
63+
64+
scm_log="./qcom_scm_kernel.log"
65+
scm_err="./qcom_scm_errors.log"
66+
err_patterns='probe failed|fail(ed)?|error|timed out|not found|invalid|corrupt|abort|panic|oops|unhandled'
67+
68+
log_info "Scanning current-boot kernel log for qcom_scm-related errors"
69+
get_kernel_log > "$scm_log" 2>/dev/null || true
70+
grep -iE "qcom_scm.*($err_patterns)" "$scm_log" > "$scm_err" || true
71+
72+
if [ -s "$scm_err" ]; then
73+
while IFS= read -r line; do
74+
[ -n "$line" ] || continue
75+
log_info "[kernel] $line"
76+
done < "$scm_err"
77+
log_fail "FAIL: qcom_scm-related errors detected in current-boot kernel log."
6478
echo "$TESTNAME FAIL" > "$res_file"
79+
else
80+
log_pass "$TESTNAME : Test Passed (qcom_scm present and no qcom_scm-related kernel errors)"
81+
echo "$TESTNAME PASS" > "$res_file"
6582
fi
6683

6784
log_info "-------------------Completed $TESTNAME Testcase----------------------------"
68-
69-

Runner/utils/lib_bluetooth.sh

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1903,16 +1903,25 @@ btfwloaded() {
19031903
# Retry/transient hints: if success exists and we see these, we likely want WARN.
19041904
transient_re="${BTFW_TRANSIENT_RE:-Retry BT power ON|retry bt power on|reset|re-init|reinit|failed.*\\(-110\\)}"
19051905

1906-
# ---- Collect recent relevant dmesg ----
1907-
# Filter for BT/QCA/WCN related lines; keep a reasonable window.
1908-
out="$(
1909-
dmesg 2>/dev/null \
1910-
| grep -i -E 'Bluetooth|hci[0-9]|QCA|wcn|btqca|WCN' \
1911-
| tail -n "${BTFW_DMESG_TAIL:-600}"
1912-
)"
1906+
# ---- Collect recent relevant current-boot kernel log ----
1907+
# Prefer get_kernel_log() so we can use journalctl -k -b when available
1908+
# instead of relying only on the live dmesg ring buffer.
1909+
if command -v get_kernel_log >/dev/null 2>&1; then
1910+
out="$(
1911+
get_kernel_log 2>/dev/null \
1912+
| grep -i -E 'Bluetooth|hci[0-9]|QCA|wcn|btqca|WCN' \
1913+
| tail -n "${BTFW_DMESG_TAIL:-600}"
1914+
)"
1915+
else
1916+
out="$(
1917+
dmesg 2>/dev/null \
1918+
| grep -i -E 'Bluetooth|hci[0-9]|QCA|wcn|btqca|WCN' \
1919+
| tail -n "${BTFW_DMESG_TAIL:-600}"
1920+
)"
1921+
fi
19131922

19141923
if [ -z "$out" ]; then
1915-
log_warn "btfwloaded: no recent Bluetooth/QCA/WCN messages in dmesg."
1924+
log_warn "btfwloaded: no Bluetooth/QCA/WCN messages found in current-boot kernel log."
19161925
return 1
19171926
fi
19181927

@@ -1922,15 +1931,15 @@ btfwloaded() {
19221931
printf '%s\n' "$out" \
19231932
| awk -v IGNORECASE=1 -v re="$success_re" '
19241933
$0 ~ re { n=NR }
1925-
END { if (n>0) print n; else print 0 }
1934+
END { if (n > 0) print n; else print 0 }
19261935
'
19271936
)"
19281937

19291938
last_fatal="$(
19301939
printf '%s\n' "$out" \
19311940
| awk -v IGNORECASE=1 -v re="$fatal_re" '
19321941
$0 ~ re { n=NR }
1933-
END { if (n>0) print n; else print 0 }
1942+
END { if (n > 0) print n; else print 0 }
19341943
'
19351944
)"
19361945

@@ -1945,32 +1954,32 @@ btfwloaded() {
19451954

19461955
# ---- Decision tree ----
19471956
if [ "$last_success" -eq 0 ]; then
1948-
log_warn "btfwloaded: no final success marker found (pattern: $success_re). Recent tail:"
1957+
log_warn "btfwloaded: no final success marker found (pattern: $success_re). Recent kernel-log tail:"
19491958
printf '%s\n' "$out" | tail -n 30 >&2
19501959
return 1
19511960
fi
19521961

19531962
# Fatal after success => FAIL (setup looked done, but then errors happened later)
19541963
if [ "$last_fatal" -gt "$last_success" ]; then
1955-
log_warn "btfwloaded: fatal BT/QCA errors occurred after final setup marker; treating as FAIL."
1964+
log_warn "btfwloaded: fatal BT/QCA errors occurred after final setup marker in kernel log, treating as FAIL."
19561965
printf '%s\n' "$out" | tail -n 40 >&2
19571966
return 1
19581967
fi
19591968

19601969
# Fatal before success OR transient hints => WARN (retry scenario)
19611970
if [ "$last_fatal" -gt 0 ] && [ "$last_fatal" -lt "$last_success" ]; then
1962-
log_warn "btfwloaded: transient errors occurred before final setup marker; treating as WARN."
1971+
log_warn "btfwloaded: transient errors occurred before final setup marker in kernel log, treating as WARN."
19631972
printf '%s\n' "$out" | tail -n 30 >&2
19641973
return 2
19651974
fi
19661975

19671976
if [ "$saw_transient" -eq 1 ]; then
1968-
log_warn "btfwloaded: retry/transient indicators seen; final setup marker present; treating as WARN."
1977+
log_warn "btfwloaded: retry/transient indicators seen in kernel log, final setup marker present, treating as WARN."
19691978
printf '%s\n' "$out" | tail -n 30 >&2
19701979
return 2
19711980
fi
19721981

1973-
log_info "btfwloaded: firmware load/setup completed cleanly (no fatal errors after final setup marker)."
1982+
log_info "btfwloaded: firmware load/setup completed cleanly from current-boot kernel log (no fatal errors after final setup marker)."
19741983
return 0
19751984
}
19761985

0 commit comments

Comments
 (0)