<div dir="ltr">I understand what you're saying. Accessing the chain of scheduled node to figure out which node is scheduled on which processor is a more formal and safer way to do it than directly accessing a cpu's variable.<div><br></div><div>I'll refactor my code. Thank you.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 21, 2020 at 4:12 PM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">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:54, Richi Dubey wrote:<br>
<br>
>     No, this would be completely wrong. You should never call<br>
>     _Thread_Dispatch_enable(other_cpu) and you should never modify the<br>
>     thread dispatch level inside the scheduler code. The only thing<br>
>     you can<br>
>     do is to update the heir and send requests via an inter-processor<br>
>     interrupt.<br>
><br>
> Okay. So, to deal with the unpredictable time is it okay if I use heir <br>
> instead of executing in the following place (my aim is to get the <br>
> latest executing thread / to be executed thread on a cpu):<br>
><br>
><br>
> <a href="https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L243" rel="noreferrer" target="_blank">https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L243</a><br>
> <a href="https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L467" rel="noreferrer" target="_blank">https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L467</a><br>
> <a href="https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L248" rel="noreferrer" target="_blank">https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L248</a><br>
><br>
In an SMP system you have to be very careful in which context you access <br>
which data. We definitely lack some formalized way to document this. You <br>
must not use the per-processor variables in your scheduler code. This <br>
would be completely wrong. For the scheduler it doesn't matter if the <br>
threads actually execute or not. The scheduler should use the chain of <br>
scheduled nodes to maintain the node to processor allocation.<br>
</blockquote></div>