Commit 71511b6
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
1 file changed
+72
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
0 commit comments