Commit ebbaf7ee authored by Damien George's avatar Damien George
Browse files

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.
parent 1a5c8d10
......@@ -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
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment