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

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


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

>     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.
>
> Okay. So, to deal with the unpredictable time is it okay if I use heir 
> instead of executing in the following place (my aim is to get the 
> latest executing thread / to be executed thread on a cpu):
>
>
> https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L243
> https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L467
> https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L248
>
In an SMP system you have to be very careful in which context you access 
which data. We definitely lack some formalized way to document this. You 
must not use the per-processor variables in your scheduler code. This 
would be completely wrong. For the scheduler it doesn't matter if the 
threads actually execute or not. The scheduler should use the chain of 
scheduled nodes to maintain the node to processor allocation.


More information about the devel mailing list