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

Richi Dubey richidubey at gmail.com
Fri Aug 21 09:12:16 UTC 2020


Thanks for the quick response, I checked out the functions and I have some
idea now.
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>
.

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).

Please let me know.

On Fri, Aug 21, 2020 at 2:20 PM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> On 21/08/2020 10:40, Richi Dubey wrote:
>
> > While trying to debug my code, I realised that the heir set on another
> > processor does not become that cpu's per_cpu_control->executing after
> > some time.
> >
> > On checking the allocate_processor call that set the heir, I saw the
> > call trace as:
> >
> > _Scheduler_SMP_Allocate_processor_exact -> _Thread_Dispatch_update_heir :
> >
> > -------------------------------------
> > ...
> >   } else { (Here this gets executed since the current cpu is different
> > than the one that gets its executing changed)
> >     _Atomic_Fetch_or_ulong( &cpu_target->message, 0,
> > ATOMIC_ORDER_RELEASE );
> >     _CPU_SMP_Send_interrupt( _Per_CPU_Get_index( cpu_target ) );
> >   }
> >
> > ............................................
> >
> > So, how long does it take for heir to become executing on another cpu?
> > This question is wrt my code at this line
> > <
> https://github.com/richidubey/rtems/blob/03d08d02b3e61570f2022845caa44ec6a261f677/cpukit/score/src/schedulerstrongapa.c#L297>.
>
> > Is it okay if i use heir here instead of executing (To get the latest
> > thread intended to be scheduled on the cpu)? Would it mean the same
> > thing? Is heir==executing when thread_dispatch is set to false?
> The thread dispatching uses the per-processor variables executing, heir,
> and is_dispatch_necessary. Thread dispatching is always a per-processor
> operation. If you want to carry out a thread dispatch on another
> processor you have to use an inter-processor interrupt. For the control
> flow, see _Thread_Do_dispatch(). Check the variables on the other
> processor. After updating the variables you can set a break point to the
> inter-processor interrupt handler and check if it is called.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200821/ca5e8cce/attachment.html>


More information about the devel mailing list