[PATCH stalld 00/52] Test suite hardening, correctness fixes, and BPF optimization

Wander Lairson Costa <[email protected]> Mon, 8 Jun 2026 15:31:10 -0300
Newsgroups org.kernel.vger.linux-rt-users
Message-ID <[email protected]>
This series improves stalld reliability across three areas: the test
infrastructure, the BPF backend, and the core daemon code.

The test suite is overhauled to eliminate false-passing tests and
reduce runtime. An assertion framework replaces ad-hoc conditional
checks, sleep-based synchronization gives way to event-driven waits,
and helpers for common patterns like starvation detection and process
lifecycle reduce boilerplate. Tests that silently swallowed failures
in subshells or matched stale log lines are fixed. The cumulative
effect is a suite that fails fast on real regressions and completes
in a fraction of the previous wall-clock time.

The BPF queue_track backend replaces its per-CPU linear array with a
hash map keyed by CPU and PID, turning the O(n) task lookup on every
sched_wakeup into O(1). This eliminates a 2us latency penalty that
consumed a significant portion of the 10us real-time budget on Telco
workloads.

The remaining patches address a range of correctness issues in the
daemon: data races on shared variables are fixed with C11 atomics,
buffer underflows and uninitialized buffer uses are guarded, the
signal handler is made async-signal-safe, starvation timing is
migrated from wall-clock time to CLOCK_MONOTONIC, format string
mismatches and NULL pointer dereferences are corrected, pthread_create
return values are checked, and a signed integer overflow in the
SCHED_DEADLINE period calculation is resolved.

Wander Lairson Costa (52):
  stalld: Reject --force_fifo in single-threaded mode
  tests: Introduce test_section() helper
  tests: Introduce cleanup_scenario() helper
  tests: Introduce starvation and boost asserts
  tests: Introduce find_starved_child() helper
  tests: Fix task exit timing in test_boost_restoration
  tests: Consolidate and adopt init_functional_test()
  tests: Introduce assert_stalld_rejects() helper
  tests: Fix boost verification in runtime and duration tests
  tests: Fix subshell swallowing test results
  tests: Fix repeated log match finding same line
  chore: Remove legacy test infrastructure and stale docs
  tests: Add assertions to SCHED_OTHER restoration test
  tests: Fix CPU selection grep substring matches
  tests: Add idle CPU skipping assertion
  tests: Remove redundant pkill from cleanup
  tests: Introduce and adopt assert_log_contains() helper
  tests: Remove weak, redundant, and assertion-free test blocks
  tests: Introduce and adopt assert_success() helper
  tests: Replace wait conditionals with asserts
  tests: Remove if-wrappers around assert calls
  tests: Abort immediately on test failure
  tests: Remove dead code after making fail() fatal
  tests: Introduce and adopt process helpers
  tests: Extract wait_for_process_exit helper
  tests: Reduce default wait timeouts
  tests: Reduce starvation_gen durations
  tests: Replace init sleeps in test_affinity
  tests: Drop redundant sleeps in test_pidfile
  tests: Remove redundant sleeps after start_stalld
  tests: Reduce timing and replace sleeps with event waits
  tests: Fix async-signal-unsafe handler
  bpf: Replace linear task scan with hash map
  stalld: fix data race on thread_running
  stalld: fix inverted DAEMON_UMASK value
  stalld: fix uninitialized buffer use in find_debugfs_mount_point
  stalld: fix buffer underflow in read_proc_stat
  stalld: fix buffer underflow in sched_debug_get
  stalld: check pthread_create return in aggressive_main
  stalld: check pthread_create return in conservative_main
  stalld: fix signed integer overflow in set_reservation
  stalld: fix data race on config_buffer_size
  stalld: remove async-signal-unsafe calls from signal handler
  stalld: use CLOCK_MONOTONIC for starvation detection
  stalld: fix format string type mismatch for time_t
  stalld: fix type mismatches in detect_task_format
  stalld: remove NULL deref in fill_waiting_task error handler
  stalld: guard nextline() returns in sched_debug parsing
  stalld: fix missing null-termination in is_runnable
  stalld: fix snprintf truncation check in is_runnable
  stalld: fix error return in queue_track_get_cpu
  stalld: fix format string type mismatch in set_cpu_affinity

 .claude/CLAUDE.md                             |  585 ---------
 .claude/agents/agent-prompt-engineer.md       |  135 --
 .claude/agents/c-expert.md                    |   53 -
 .claude/agents/code-reviewer.md               |  104 --
 .claude/agents/get-agent-hash                 |   99 --
 .claude/agents/git-scm-master.md              | 1154 -----------------
 .claude/agents/kernel-hacker.md               |  231 ----
 .claude/agents/plan-validator.md              |  130 --
 .claude/agents/project-historian.md           |  285 ----
 .claude/agents/project-librarian.md           |  604 ---------
 .claude/agents/project-manager.md             |  388 ------
 .claude/agents/project-scope-guardian.md      |  326 -----
 .claude/agents/python-expert.md               |   57 -
 .claude/agents/test-specialist.md             |  656 ----------
 .claude/agents/update-agent-hashes            |   96 --
 .claude/context-snapshot.json                 |  103 --
 .claude/rules                                 |   42 -
 .gitignore                                    |    5 +-
 bpf/stalld.bpf.c                              |  206 ++-
 src/queue_track.c                             |   99 +-
 src/queue_track.h                             |  107 +-
 src/sched_debug.c                             |   46 +-
 src/stalld.c                                  |   51 +-
 src/stalld.h                                  |   20 +-
 src/utils.c                                   |   33 +-
 tests/BACKEND_USAGE.md                        |  269 ----
 tests/CONTEXT_SNAPSHOT_2025-10-31.md          |  231 ----
 tests/Makefile                                |   29 +-
 tests/README.md                               |   29 +-
 tests/TODO.md                                 |  727 -----------
 tests/functional/test_affinity.sh             |  178 +--
 tests/functional/test_backend_selection.sh    |   24 +-
 tests/functional/test_boost_duration.sh       |  164 +--
 tests/functional/test_boost_period.sh         |  151 +--
 tests/functional/test_boost_restoration.sh    |  310 +----
 tests/functional/test_boost_runtime.sh        |  179 +--
 tests/functional/test_cpu_selection.sh        |   76 +-
 tests/functional/test_deadline_boosting.sh    |  266 +---
 tests/functional/test_fifo_boosting.sh        |  269 +---
 .../test_fifo_priority_starvation.sh          |  197 +--
 tests/functional/test_force_fifo.sh           |  196 +--
 tests/functional/test_foreground.sh           |   65 +-
 tests/functional/test_idle_detection.sh       |  195 +--
 tests/functional/test_log_only.sh             |   30 +-
 tests/functional/test_logging_destinations.sh |   38 +-
 tests/functional/test_pidfile.sh              |  166 +--
 tests/functional/test_runqueue_parsing.sh     |  417 ------
 tests/functional/test_starvation_detection.sh |  281 +---
 tests/functional/test_starvation_threshold.sh |  138 +-
 tests/functional/test_task_merging.sh         |  161 +--
 tests/helpers/starvation_gen.c                |    2 +-
 tests/helpers/test_helpers.sh                 |  356 +++--
 tests/legacy/README.md                        |  169 ---
 tests/legacy/test01.c                         |  506 --------
 tests/legacy/test01_wrapper.sh                |  161 ---
 tests/run_tests.sh                            |  149 +--
 56 files changed, 964 insertions(+), 10780 deletions(-)
 delete mode 100644 .claude/CLAUDE.md
 delete mode 100644 .claude/agents/agent-prompt-engineer.md
 delete mode 100644 .claude/agents/c-expert.md
 delete mode 100644 .claude/agents/code-reviewer.md
 delete mode 100755 .claude/agents/get-agent-hash
 delete mode 100644 .claude/agents/git-scm-master.md
 delete mode 100644 .claude/agents/kernel-hacker.md
 delete mode 100644 .claude/agents/plan-validator.md
 delete mode 100644 .claude/agents/project-historian.md
 delete mode 100644 .claude/agents/project-librarian.md
 delete mode 100644 .claude/agents/project-manager.md
 delete mode 100644 .claude/agents/project-scope-guardian.md
 delete mode 100644 .claude/agents/python-expert.md
 delete mode 100644 .claude/agents/test-specialist.md
 delete mode 100755 .claude/agents/update-agent-hashes
 delete mode 100644 .claude/context-snapshot.json
 delete mode 100644 .claude/rules
 delete mode 100644 tests/BACKEND_USAGE.md
 delete mode 100644 tests/CONTEXT_SNAPSHOT_2025-10-31.md
 delete mode 100644 tests/TODO.md
 delete mode 100755 tests/functional/test_runqueue_parsing.sh
 delete mode 100644 tests/legacy/README.md
 delete mode 100644 tests/legacy/test01.c
 delete mode 100755 tests/legacy/test01_wrapper.sh

-- 
2.54.0