Skip to content

Commit 1e3e6b3

Browse files
author
Nicolas Pitre
committed
samples: zbus: msg_subscriber: Filter SMP from pool exhaustion tests
The "_too_small" test variants intentionally configure an isolated buffer pool with only 2 buffers to validate proper error handling when the pool is exhausted during notification of 16 msg_subscriber observers. These tests are likely to fail on SMP systems due to a buffer recycling race condition: Expected behavior (uniprocessor): Publisher Thread: 1. Allocate buf1 for bar_msg_sub1 ✓ 2. k_fifo_put(sub1_fifo, buf1) 3. Allocate buf2 for bar_msg_sub2 ✓ 4. k_fifo_put(sub2_fifo, buf2) 5. Try allocate buf3 for bar_msg_sub3 → FAIL -ENOMEM Subscriber threads process messages after notification completes, pool exhausts at subscriber #3 as expected. SMP race condition: CPU 0 (Publisher): CPU 1 (bar_msg_sub1): CPU 2 (bar_msg_sub2): ------------------ --------------------- --------------------- Alloc buf1 ✓ k_fifo_put(sub1, buf1) k_fifo_get() → buf1 zbus_sub_wait_msg() net_buf_unref() → buf1 FREED! Alloc buf2 ✓ (reuses buf1!) k_fifo_put(sub2, buf2) k_fifo_get() → buf2 net_buf_unref() → buf2 FREED! Alloc buf3 ✓ (reuses buf1 again!) ...continues... All 16 allocations succeed! On SMP systems, subscriber threads on other CPUs may consume and free buffers quickly enough that they are recycled back to the pool before the publisher's notification loop can exhaust it. The test's assumption that notification completes before subscribers run does not hold with parallel execution. Since this is a test design limitation (not a zbus bug), filter SMP configurations from these specific test variants rather than attempt to artificially slow down subscribers or change thread priorities. Fixes CI failures on Arm's FVP SMP configurations. Signed-off-by: Nicolas Pitre <[email protected]>
1 parent 136cdde commit 1e3e6b3

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

samples/subsys/zbus/msg_subscriber/sample.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ tests:
274274
integration_platforms:
275275
- qemu_x86
276276
sample.zbus.msg_subscriber_dynamic_isolated_too_small:
277+
filter: not CONFIG_SMP
277278
harness: console
278279
extra_configs:
279280
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
@@ -385,6 +386,7 @@ tests:
385386
integration_platforms:
386387
- qemu_x86
387388
sample.zbus.msg_subscriber_static_isolated_too_small:
389+
filter: not CONFIG_SMP
388390
harness: console
389391
extra_configs:
390392
- CONFIG_ZBUS_LOG_LEVEL_DBG=y

0 commit comments

Comments
 (0)