stmhal/pendsv: Disable interrupts during a thread switch.
We can actually handle interrupts during a thread switch (because we always have a valid stack), but only if those interrupts don't access any of the thread state (because the state may not correspond to the stack pointer). So to be on the safe side we disable interrupts during the very short period of the thread state+stack switch.
This commit is contained in:
parent
1a5c8d1053
commit
ebbaf7ee57
@ -106,11 +106,14 @@ void pendsv_isr_handler(void) {
|
||||
".no_obj:\n" // pendsv_object==NULL
|
||||
"push {r4-r11, lr}\n"
|
||||
"vpush {s16-s31}\n"
|
||||
"mrs r5, primask\n" // save PRIMASK in r5
|
||||
"cpsid i\n" // disable interrupts while we change stacks
|
||||
"mov r0, sp\n" // pass sp to save
|
||||
"mov r4, lr\n" // save lr because we are making a call
|
||||
"bl pyb_thread_next\n" // get next thread to execute
|
||||
"mov lr, r4\n" // restore lr
|
||||
"mov sp, r0\n" // switch stacks
|
||||
"msr primask, r5\n" // reenable interrupts
|
||||
"vpop {s16-s31}\n"
|
||||
"pop {r4-r11, lr}\n"
|
||||
"bx lr\n" // return from interrupt; will return to new thread
|
||||
|
Loading…
Reference in New Issue
Block a user