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