<div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">During system startup the application configuration defines which<br>processor is available to RTEMS. Every configured and present processor<br>gets an idle thread assigned which is managed by a scheduler. This is<br>the starting point of the system. If someone calls<br>rtems_scheduler_remove_processor(), then a processor gets removed from a<br>scheduler instance. This processor still has to execute code. For this a<br>idle thread is used. This idle thread is not managed by a scheduler. If<br>someone uses rtems_scheduler_add_processor() this idle thread is again<br>controlled by a scheduler.</blockquote><div>This makes sense. Thanks.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jul 16, 2020 at 9:17 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 15/07/2020 14:55, Richi Dubey wrote:<br>
<br>
> On Wed, Jul 15, 2020 at 5:57 PM Richi Dubey <<a href="mailto:richidubey@gmail.com" target="_blank">richidubey@gmail.com</a> <br>
> <mailto:<a href="mailto:richidubey@gmail.com" target="_blank">richidubey@gmail.com</a>>> wrote:<br>
><br>
>     Hi,<br>
><br>
>     I had a small question. The scheduler struct inside percpu.h looks<br>
>     like:<br>
>     ------------------------------------------------------------------------------------------------------<br>
>         struct {<br>
>           /**<br>
>            * @brief The scheduler control of the scheduler owning this<br>
>     processor.<br>
>            *<br>
>            * This pointer is NULL in case this processor is currently<br>
>     not used by a<br>
>            * scheduler instance.<br>
>            */<br>
>           const struct _Scheduler_Control *control;<br>
><br>
>           /**<br>
>            * @brief The scheduler context of the scheduler owning this<br>
>     processor.<br>
>            *<br>
>            * This pointer is NULL in case this processor is currently<br>
>     not used by a<br>
>            * scheduler instance.<br>
>            */<br>
>           const struct Scheduler_Context *context;<br>
><br>
>           /**<br>
>            * @brief The idle thread for this processor in case it is<br>
>     online and<br>
>            * currently not used by a scheduler instance.<br>
>            */<br>
>           struct _Thread_Control *idle_if_online_and_unused;<br>
>         } Scheduler;<br>
>     ------------------------------------------------------------------------------------------------------<br>
>     So, does this mean a CPU when active is always either executing an<br>
>     idle thread and is not being used by a scheduler (so has a thread<br>
>     attribute in the idle_if_online_and_unused), or is used by a<br>
>     scheduler and is executing a task ( which can not be an idle<br>
>     task)? Another equivalent question is do we have an idle scheduler<br>
>     node, like we have idle predefined threads that run on a CPU?<br>
><br>
During system startup the application configuration defines which <br>
processor is available to RTEMS. Every configured and present processor <br>
gets an idle thread assigned which is managed by a scheduler. This is <br>
the starting point of the system. If someone calls <br>
rtems_scheduler_remove_processor(), then a processor gets removed from a <br>
scheduler instance. This processor still has to execute code. For this a <br>
idle thread is used. This idle thread is not managed by a scheduler. If <br>
someone uses rtems_scheduler_add_processor() this idle thread is again <br>
controlled by a scheduler.<br>
<br>
</blockquote></div>