diff options
| author | Frédéric Desbiens <[email protected]> | 2026-09-09 09:10:36 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-09-09 09:10:36 -0400 |
| commit | 515ab8aba1a42a9d85e18288e1a76e579b177831 (patch) | |
| tree | e58d43c22704b1ccfc93d2913033cae07e7b6094 /common_modules/module_manager/utilities/module_binary_to_c_array.c | |
| parent | e99f0d42073c6418881e89ff0d98e9b9f7cee2d3 (diff) | |
Added the missing memory barrier so ARMv7-A SMP schedulers no longer miss preemptions (#704)
_tx_thread_schedule stores the newly selected thread into
_tx_thread_current_ptr[core] and then reloads _tx_thread_execute_ptr[core]
to detect a concurrent scheduling decision made by another core. On the
other side, _tx_thread_smp_core_interrupt stores the execute pointer and
then reads the current pointer to decide whether an inter-core interrupt is
required. This is a store-buffer pattern: without a barrier both cores can
observe stale values, the interrupt is skipped, and a ready thread with the
highest priority is never scheduled.
The barrier was added to the ARMv8-A SMP scheduler in 6.2.1, but the
ARMv7-A SMP ports were left untouched even though they implement the same
protocol. This adds the corresponding DMB to the Cortex-A5, Cortex-A7 and
Cortex-A9 SMP schedulers for both the AC5 and GNU toolchains.
The GNU variants were verified by assembling them with arm-none-eabi-gcc
13.2.1 for their respective cores.
Refs #209
Assisted-by: Copilot (Opus 5) <[email protected]>
Diffstat (limited to 'common_modules/module_manager/utilities/module_binary_to_c_array.c')
0 files changed, 0 insertions, 0 deletions
