When does heir become executing on calling _Thread_Dispatch_request from another cpu?

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Aug 21 09:42:07 UTC 2020


On 21/08/2020 11:34, Richi Dubey wrote:

> _SMP_Preempt calls _Thread_Dispatch_update_heir which 
> calls _Thread_Dispatch_request which sends an interrupt 
> with _CPU_SMP_Send_interrupt.
Yes.
> This interrupt would have set the executing equal to heir but would've 
> taken unpredictable time,
Yes, this is how it works. The scheduler asks for a thread dispatch, but 
when it takes place is out of the control of the scheduler.
> but explicitly calling _Thread_Dispatch_enable(other_cpu) right after 
> _SMP_Preempt(...node_on_other_cpu...) sets the executing corresponding 
> to the other_cpu's cpu control right away, is that correct?
No, this would be completely wrong. You should never call 
_Thread_Dispatch_enable(other_cpu) and you should never modify the 
thread dispatch level inside the scheduler code. The only thing you can 
do is to update the heir and send requests via an inter-processor interrupt.


More information about the devel mailing list