arm64: core: force data synchronization between context switch
This patch fixes memory corruption that can happen when running in multi-thread and multi-core environment with heavy scheduling stress. In SMP configuration, we must ensure that all thread's context is stored before writing the switch_handle flag. Otherwise some of the thread context writes could be delayed after another CPU begins to schedule this thread which could lead to memory corruptions. Signed-off-by: Sylvain Chouleur <schouleur@snapchat.com>
This commit is contained in:
parent
71ef6c6979
commit
a8b3238437
1 changed files with 7 additions and 0 deletions
|
@ -74,6 +74,13 @@ SECTION_FUNC(TEXT, z_arm64_context_switch)
|
|||
ldp x0, x1, [sp], #16
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/* Write barrier: ensure all preceding writes are executed
|
||||
* before writing the switch handle
|
||||
*/
|
||||
dmb sy
|
||||
#endif
|
||||
|
||||
/* save old thread into switch handle which is required by
|
||||
* z_sched_switch_spin()
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue