<div dir="ltr">I understand, Thank you for the clarification. <br><div><br></div><div>Last question: </div><div><br></div><div>_SMP_Preempt calls _Thread_Dispatch_update_heir which calls _Thread_Dispatch_request which sends an interrupt with _CPU_SMP_Send_interrupt.</div><div>This interrupt would have set the executing equal to heir but would've taken unpredictable time, 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?</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 21, 2020 at 2:52 PM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 21/08/2020 11:12, Richi Dubey wrote:<br>
<br>
> Is it okay I directly call _Thread_Dispatch_enable while calling <br>
> SMP_Preempt (since the latter does not call it) on another processor? <br>
> This question is wrt the code at this line <br>
> <<a href="https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L245" rel="noreferrer" target="_blank">https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L245</a>>. <br>
><br>
The thread dispatching works with locks unrelated to the scheduler. It <br>
is all right do do thread dispatching in parallel to the execution of <br>
scheduler code. The scheduler data structures are protected by the <br>
scheduler lock.<br>
><br>
> This question has comes up because set_affinity does the following in <br>
> the order:<br>
> _Scheduler_SMP_Preempt_and_schedule_highest_ready<br>
> set_affinity<br>
> enqueue.<br>
><br>
> The strong APA's highest_ready preempt a different cpu and allocates a <br>
> thread. This CPU can again be preempted while calling the enqueue <br>
> corresponding to Strong APA, at which point it would require the <br>
> latest scheduled thread on it (the one just assigned it to by <br>
> highest_ready if it's the case).<br>
The scheduler code should only use the scheduler internal data <br>
structures. It should define which thread should execute on which <br>
processor. That a thread actually executes on the processor happens <br>
asynchronously to the scheduler operations and is not the business of <br>
the scheduler. This is the job of the thread dispatch code.<br>
</blockquote></div>