<div dir="ltr">Thank you for the clarification. </div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Aug 5, 2020 at 1:00 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 04/08/2020 17:57, Gedare Bloom wrote:<br>
> On Tue, Aug 4, 2020 at 8:14 AM Richi Dubey<<a href="mailto:richidubey@gmail.com" target="_blank">richidubey@gmail.com</a>>  wrote:<br>
>> Hi,<br>
>><br>
>> I have a quick doubt about the logic in the else part of the _Scheduler_SMP_Schedule_highest_ready function.<br>
>><br>
> I'll give my understanding. Only Sebastian really understands this stuff;)<br>
> <br>
>> We get the action == SCHEDULER_TRY_TO_SCHEDULE_DO_BLOCK if the node returned by get_highest_ready is already SCHEDULED and has a pinning level of 1 (or <=1). This means that the highest ready eligible node is already scheduled and pinned to a processor.<br>
>><br>
> This means that the highest ready node cannot be scheduled right now,<br>
> for some reason. It is the thread that is already scheduled, or the<br>
> node is busy helping.<br>
> <br>
>> Why do we then change its state to BLOCKED and remove it from the chain of ready nodes?<br>
>><br>
> If the thread that owns the node can't be scheduled right now (e.g.,<br>
> it is already scheduled on a different node), then the node should be<br>
> blocked so we can maybe pick a different node to schedule.<br>
<br>
Yes. I tried to improve the documentation a bit:<br>
<br>
<a href="https://lists.rtems.org/pipermail/devel/2020-August/061144.html" rel="noreferrer" target="_blank">https://lists.rtems.org/pipermail/devel/2020-August/061144.html</a><br>
<br>
What can be a bit confusing is that we have a scheduled state for <br>
threads and for scheduler nodes:<br>
<br>
/**<br>
  * @brief The thread state with respect to the scheduler.<br>
  */<br>
typedef enum {<br>
   /**<br>
    * @brief This thread is blocked with respect to the scheduler.<br>
    *<br>
    * This thread uses no scheduler nodes.<br>
    */<br>
   THREAD_SCHEDULER_BLOCKED,<br>
<br>
   /**<br>
    * @brief This thread is scheduled with respect to the scheduler.<br>
    *<br>
    * This thread executes using one of its scheduler nodes.  This could <br>
be its<br>
    * own scheduler node or in case it owns resources taking part in the<br>
    * scheduler helping protocol a scheduler node of another thread.<br>
    */<br>
   THREAD_SCHEDULER_SCHEDULED,<br>
<br>
   /**<br>
    * @brief This thread is ready with respect to the scheduler.<br>
    *<br>
    * None of the scheduler nodes of this thread is scheduled.<br>
    */<br>
   THREAD_SCHEDULER_READY<br>
} Thread_Scheduler_state;<br>
<br>
<br>
/**<br>
  * @brief SMP scheduler node states.<br>
  */<br>
typedef enum {<br>
   /**<br>
    * @brief This scheduler node is blocked.<br>
    *<br>
    * A scheduler node is blocked if the corresponding thread is not ready.<br>
    */<br>
   SCHEDULER_SMP_NODE_BLOCKED,<br>
<br>
   /**<br>
    * @brief The scheduler node is scheduled.<br>
    *<br>
    * A scheduler node is scheduled if the corresponding thread is ready <br>
and the<br>
    * scheduler allocated a processor for it.  A scheduled node is <br>
assigned to<br>
    * exactly one processor.  The count of scheduled nodes in this scheduler<br>
    * instance equals the processor count owned by the scheduler instance.<br>
    */<br>
   SCHEDULER_SMP_NODE_SCHEDULED,<br>
<br>
   /**<br>
    * @brief This scheduler node is ready.<br>
    *<br>
    * A scheduler node is ready if the corresponding thread is ready and the<br>
    * scheduler did not allocate a processor for it.<br>
    */<br>
   SCHEDULER_SMP_NODE_READY<br>
} Scheduler_SMP_Node_state;<br>
-- <br>
Sebastian Huber, embedded brains GmbH<br>
<br>
Address : Dornierstr. 4, D-82178 Puchheim, Germany<br>
Phone   : +49 89 189 47 41-16<br>
Fax     : +49 89 189 47 41-09<br>
E-Mail  : <a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-brains.de</a><br>
PGP     : Public key available on request.<br>
<br>
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.<br>
</blockquote></div>