Skip to content

Commit 71511b6

Browse files
committed
tests: Sprint 1 + two-phase init achieves 70.6% pass rate (24/34 tests).
Test Results Summary: - 24/34 tests passed (70.6%) - 10/34 tests failed (29.4%) - Firmware: v1.26.0-preview.323.g57456a5acc Comparison to Baselines: - Sprint 1 only (without two-phase): 6/33 passed (18.2%) - Current (Sprint 1 + two-phase): 24/34 passed (70.6%) - Improvement: +18 tests (+52.4 percentage points) Sprint 1 Fixes Applied (commits 2032aa2, 724f018, 57456a5): 1. PRIMASK interrupt masking: arch_irq_lock() now masks ALL interrupts 2. Removed GC test instrumentation: Eliminated gc_recently_run causing MemoryErrors 3. PendSV delegation: Proper context switching via z_arm_pendsv Two-Phase Initialization: - Phase 1 (early): mp_thread_set_state() before gc_init() for MP_STATE_THREAD access - Phase 2 (after GC): Allocate thread structures on GC heap with canary protection - Required due to circular dependency: gc_init() needs thread state, mp_thread_init() needs GC heap Tests Now Passing (vs Sprint 1 baseline): - disable_irq, mutate_dict, mutate_instance, mutate_list, mutate_set - stress_aes, thread_create_basic, thread_exc1, thread_exc2 - thread_exit1, thread_exit2, thread_gc1, thread_heap_lock - thread_ident1, thread_lock1, thread_lock2, thread_lock5 - thread_shared1, thread_shared2, thread_sleep2, thread_stacksize1 - thread_start1, thread_start2, thread_stdin Remaining Failures (10 tests): - mutate_bytearray: Memory corruption during bytearray mutation - stress_create, stress_heap, stress_recurse, stress_schedule: Resource exhaustion under heavy load - thread_coop: Cooperative scheduling issues - thread_lock3, thread_lock4: Advanced lock timeout/context manager scenarios - thread_qstr1: QSTR allocation in threads - thread_sleep1: Sleep precision/behavior Known Issues from Code Review (ZEPHYR_THREADING_CODE_REVIEW.md): 1. Thread initialization race (Phase 2, Finding #1): Thread started with K_NO_WAIT before all fields initialized. If GC runs between k_thread_create() and field initialization, it scans garbage pointers. FIX: Initialize all fields before k_thread_create() or use K_FOREVER then k_thread_start(). 2. Static name buffer race (Phase 2, Finding #2): Single static char name[16] shared across all threads causes corruption under concurrent creation. FIX: Allocate per-thread or embed in mp_thread_t structure. 3. Stack scanning fallback bug (Phase 2, Finding #3): On PSP corruption, falls back to scanning entire stack including garbage. FIX: Skip thread or halt, don't scan garbage. Next Steps: - Address thread initialization race (highest impact) - Fix static name buffer race - Investigate remaining 10 test failures - Consider simplification to reduce maintenance burden (667 lines vs 308 in ports/zephyr) Test Command: cd ~/micropython/tests && \ env RESET='pyocd reset --probe 066CFF495177514867213407' \ ./run-tests.py -t port:/dev/serial/by-id/usb-STMicroelectronics_STM32_STLink_066CFF495177514867213407-if02 \ ~/micropython/tests/thread/*.py Signed-off-by: Andrew Leech <[email protected]>
1 parent 57456a5 commit 71511b6

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

sprint1_two_phase_test_results.txt

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
platform=pyboard arch=armv7emsp inlineasm=thumb
2+
pass /home/corona/micropython/tests/thread/disable_irq.py
3+
Resetting device...
4+
FAIL /home/corona/micropython/tests/thread/mutate_bytearray.py
5+
Resetting device...
6+
pass /home/corona/micropython/tests/thread/mutate_dict.py
7+
Resetting device...
8+
pass /home/corona/micropython/tests/thread/mutate_instance.py
9+
Resetting device...
10+
pass /home/corona/micropython/tests/thread/mutate_list.py
11+
Resetting device...
12+
pass /home/corona/micropython/tests/thread/mutate_set.py
13+
Resetting device...
14+
pass /home/corona/micropython/tests/thread/stress_aes.py
15+
Resetting device...
16+
FAIL /home/corona/micropython/tests/thread/stress_create.py
17+
Resetting device...
18+
FAIL /home/corona/micropython/tests/thread/stress_heap.py
19+
Resetting device...
20+
FAIL /home/corona/micropython/tests/thread/stress_recurse.py
21+
Resetting device...
22+
FAIL /home/corona/micropython/tests/thread/stress_schedule.py
23+
Resetting device...
24+
FAIL /home/corona/micropython/tests/thread/thread_coop.py
25+
Resetting device...
26+
pass /home/corona/micropython/tests/thread/thread_create_basic.py
27+
Resetting device...
28+
pass /home/corona/micropython/tests/thread/thread_exc1.py
29+
Resetting device...
30+
pass /home/corona/micropython/tests/thread/thread_exc2.py
31+
Resetting device...
32+
pass /home/corona/micropython/tests/thread/thread_exit1.py
33+
Resetting device...
34+
pass /home/corona/micropython/tests/thread/thread_exit2.py
35+
Resetting device...
36+
pass /home/corona/micropython/tests/thread/thread_gc1.py
37+
Resetting device...
38+
pass /home/corona/micropython/tests/thread/thread_heap_lock.py
39+
Resetting device...
40+
pass /home/corona/micropython/tests/thread/thread_ident1.py
41+
Resetting device...
42+
pass /home/corona/micropython/tests/thread/thread_lock1.py
43+
Resetting device...
44+
pass /home/corona/micropython/tests/thread/thread_lock2.py
45+
Resetting device...
46+
FAIL /home/corona/micropython/tests/thread/thread_lock3.py
47+
Resetting device...
48+
FAIL /home/corona/micropython/tests/thread/thread_lock4.py
49+
Resetting device...
50+
pass /home/corona/micropython/tests/thread/thread_lock5.py
51+
Resetting device...
52+
FAIL /home/corona/micropython/tests/thread/thread_qstr1.py
53+
Resetting device...
54+
pass /home/corona/micropython/tests/thread/thread_shared1.py
55+
Resetting device...
56+
pass /home/corona/micropython/tests/thread/thread_shared2.py
57+
Resetting device...
58+
FAIL /home/corona/micropython/tests/thread/thread_sleep1.py
59+
Resetting device...
60+
pass /home/corona/micropython/tests/thread/thread_sleep2.py
61+
Resetting device...
62+
pass /home/corona/micropython/tests/thread/thread_stacksize1.py
63+
Resetting device...
64+
pass /home/corona/micropython/tests/thread/thread_start1.py
65+
Resetting device...
66+
pass /home/corona/micropython/tests/thread/thread_start2.py
67+
Resetting device...
68+
pass /home/corona/micropython/tests/thread/thread_stdin.py
69+
Resetting device...
70+
34 tests performed (153 individual testcases)
71+
24 tests passed
72+
10 tests failed: mutate_bytearray stress_create stress_heap stress_recurse stress_schedule thread_coop thread_lock3 thread_lock4 thread_qstr1 thread_sleep1

0 commit comments

Comments
 (0)