---
.../dynamic_debug/dyndbg_selftest.sh | 35 +++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/tools/testing/selftests/dynamic_debug/dyndbg_selftest.sh
b/tools/testing/selftests/dynamic_debug/dyndbg_selftest.sh
index 09937dca3056..5c35d7cc5ecf 100755
--- a/tools/testing/selftests/dynamic_debug/dyndbg_selftest.sh
+++ b/tools/testing/selftests/dynamic_debug/dyndbg_selftest.sh
@@ -350,12 +350,47 @@ function test_mod_submod {
ifrmmod test_dynamic_debug
}
+function test_negated_keywords {
+ echo -e "${GREEN}# TEST_NEGATED_KEYWORDS ${NC}"
+
+ # Test 1: Disable negated subset from enabled set
+ # Enables all 6 in init/main.c, then pulses ONLY those that are NOT
run_init_process (the 2 blacklist sites) OFF.
+ ddcmd =_
+ ddcmd file init/main.c +p
+ check_match_ct 'init/main.c:.*=p' 6 -r
+ ddcmd file init/main.c func !run_init_process -p
+ # Result: 6 - 2 = 4 sites (run_init_process) remain enabled.
+ check_match_ct 'init/main.c:.*=p' 4 -r
+ check_match_ct 'run_init_process' 4 -r
+
+ # Test 2: Enable negated subset from clean slate
+ # Negation !run_init_process should match the 2 blacklist sites.
+ ddcmd =_
+ ddcmd file init/main.c func !run_init_process +p
+ # Verify exactly 2 sites enabled
+ check_match_ct 'init/main.c:.*=p' 2 -r
+ check_match_ct 'initcall_blacklist[[:space:]]' 1 -r
+ check_match_ct 'initcall_blacklisted[[:space:]]' 1 -r
+
+ # Test 3: Enable negated subset with wildcard
+ # Negation !run_init_* should match the same 2 blacklist sites.
+ ddcmd =_
+ ddcmd file init/main.c func !run_init_* +p
+ # Verify exactly 2 sites enabled
+ check_match_ct 'init/main.c:.*=p' 2 -r
+ check_match_ct 'initcall_blacklist[[:space:]]' 1 -r
+ check_match_ct 'initcall_blacklisted[[:space:]]' 1 -r
+
+ ddcmd =_
+}
+
tests_list=(
basic_tests
# these require test_dynamic_debug*.ko
comma_terminator_tests
test_percent_splitting
test_mod_submod
+ test_negated_keywords
)
# Run tests
--
2.53.0