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:22:01 UTC 2020


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

> Is it okay I directly call _Thread_Dispatch_enable while calling 
> SMP_Preempt (since the latter does not call it) on another processor? 
> This question is wrt the code at this line 
> <https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L245>. 
>
The thread dispatching works with locks unrelated to the scheduler. It 
is all right do do thread dispatching in parallel to the execution of 
scheduler code. The scheduler data structures are protected by the 
scheduler lock.
>
> This question has comes up because set_affinity does the following in 
> the order:
> _Scheduler_SMP_Preempt_and_schedule_highest_ready
> set_affinity
> enqueue.
>
> The strong APA's highest_ready preempt a different cpu and allocates a 
> thread. This CPU can again be preempted while calling the enqueue 
> corresponding to Strong APA, at which point it would require the 
> latest scheduled thread on it (the one just assigned it to by 
> highest_ready if it's the case).
The scheduler code should only use the scheduler internal data 
structures. It should define which thread should execute on which 
processor. That a thread actually executes on the processor happens 
asynchronously to the scheduler operations and is not the business of 
the scheduler. This is the job of the thread dispatch code.


More information about the devel mailing list