Need help debugging sp16.exe

Richi Dubey richidubey at gmail.com
Fri Oct 9 16:27:05 UTC 2020


Hi,

The scheduler doesnt seem to be involved in rtems_task_exit. I believe the
scheduler is doing something wrong during the execution of rtems_yield for
TA1.  Is it related to isr_level? Please find the stacktrace below for
execution of TA5 after TA1 yields:

(gdb)
0x00103c28 in Task5 (argument=0) at
/home/richi/quick-start/src/rtems/c/src/../../testsuites/sptests/sp16/task5.c:53
53  status = rtems_region_get_segment(
(gdb)
60  puts_nocr( "TA5 - got segment from region 1 - " );
(gdb) ni
0x00103c2e 60  puts_nocr( "TA5 - got segment from region 1 - " );
(gdb)
0x00103c32 60  puts_nocr( "TA5 - got segment from region 1 - " );
(gdb)
61  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c38 61  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c3a 61  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c3e 61  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c42 61  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c44 61  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c46 61  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c4a 61  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c4e 61  Put_address_from_area_1( segment_address_2 );
(gdb)
62  new_line;
(gdb)
0x00103c56 62  new_line;
(gdb)
0x00103c5a 62  new_line;
(gdb)
64  status = rtems_region_return_segment( Region_id[ 1 ], segment_address_2
);
(gdb)
0x00103c62 64  status = rtems_region_return_segment( Region_id[ 1 ],
segment_address_2 );
(gdb) ni
0x00103c66 64  status = rtems_region_return_segment( Region_id[ 1 ],
segment_address_2 );
(gdb)
0x00103c68 64  status = rtems_region_return_segment( Region_id[ 1 ],
segment_address_2 );
(gdb)
0x00103c6a 64  status = rtems_region_return_segment( Region_id[ 1 ],
segment_address_2 );
(gdb)
0x00103c6c 64  status = rtems_region_return_segment( Region_id[ 1 ],
segment_address_2 );
(gdb)
0x00103c6e 64  status = rtems_region_return_segment( Region_id[ 1 ],
segment_address_2 );
(gdb)
0x00103c72 64  status = rtems_region_return_segment( Region_id[ 1 ],
segment_address_2 );
(gdb)
65  puts_nocr(
(gdb)
0x00103c78 65  puts_nocr(
(gdb)
0x00103c7c 65  puts_nocr(
(gdb)
68  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c82 68  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c84 68  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c88 68  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c8c 68  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c8e 68  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c90 68  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c94 68  Put_address_from_area_1( segment_address_2 );
(gdb)
0x00103c98 68  Put_address_from_area_1( segment_address_2 );
(gdb)
69  new_line;
(gdb)
0x00103ca0 69  new_line;
(gdb)
0x00103ca4 69  new_line;
(gdb)
71  puts( "TA5 - rtems_task_exit" );
(gdb)
0x00103cac 71  puts( "TA5 - rtems_task_exit" );
(gdb)
0x00103cb0 71  puts( "TA5 - rtems_task_exit" );
(gdb)
72  rtems_task_exit();
(gdb) si
rtems_task_exit () at
/home/richi/quick-start/src/rtems/c/src/../../cpukit/rtems/src/taskexit.c:23
23 {
(gdb) ni
0x0010ab42 23 {
(gdb)
0x0010ab44 23 {
(gdb)
27  cpu_self = _Thread_Dispatch_disable();
(gdb)
0x0010ab4a 27  cpu_self = _Thread_Dispatch_disable();
(gdb)
28  executing = _Per_CPU_Get_executing( cpu_self );
(gdb)
0x0010ab4e 28  executing = _Per_CPU_Get_executing( cpu_self );
(gdb)
0x0010ab52 28  executing = _Per_CPU_Get_executing( cpu_self );
(gdb)
30  _Thread_Exit(
(gdb) si
0x0010ab56 30  _Thread_Exit(
(gdb)
0x0010ab58 30  _Thread_Exit(
(gdb)
0x0010ab5a 30  _Thread_Exit(
(gdb)
_Thread_Exit (executing=0x2057c0 <_Per_CPU_Information>,
set=THREAD_LIFE_PROTECTED, exit_value=0x0) at
/home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/threadrestart.c:537
537 {
(gdb) ni
0x00110da4 537 {
(gdb)
0x00110da6 537 {
(gdb)
0x00110da8 537 {
(gdb)
0x00110daa 537 {
(gdb)
0x00110dac 537 {
(gdb)
548  _Thread_State_acquire( executing, &lock_context );
(gdb)
0x00110db2 548  _Thread_State_acquire( executing, &lock_context );
(gdb)
0x00110db4 548  _Thread_State_acquire( executing, &lock_context );
(gdb)
0x00110db6 548  _Thread_State_acquire( executing, &lock_context );
(gdb)
549  _Thread_Set_exit_value( executing, exit_value );
(gdb)
0x00110dbc 549  _Thread_Set_exit_value( executing, exit_value );
(gdb)
0x00110dbe 549  _Thread_Set_exit_value( executing, exit_value );
(gdb)
550  _Thread_Change_life_locked(
(gdb) si
0x00110dc4 550  _Thread_Change_life_locked(
(gdb)
0x00110dc6 550  _Thread_Change_life_locked(
(gdb)
0x00110dc8 550  _Thread_Change_life_locked(
(gdb)
0x00110dca 550  _Thread_Change_life_locked(
(gdb)
_Thread_Change_life_locked (the_thread=0x1101e5 <_Thread_State_acquire+28>,
clear=(unknown: 2158976), set=(THREAD_LIFE_CHANGE_DEFERRED |
THREAD_LIFE_DETACHED | unknown: 2103264), ignore=(THREAD_LIFE_TERMINATING |
unknown: 2159008)) at
/home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/threadrestart.c:245
245 {
(gdb)
0x001109bc 245 {
(gdb) ni
0x001109be 245 {
(gdb)
0x001109c0 245 {
(gdb)
0x001109c2 245 {
(gdb)
0x001109c4 245 {
(gdb)
0x001109c6 245 {
(gdb)
249  previous = the_thread->Life.state;
(gdb)
0x001109ca 249  previous = the_thread->Life.state;
(gdb)
0x001109ce 249  previous = the_thread->Life.state;
(gdb)
250  state = previous;
(gdb)
0x001109d2 250  state = previous;
(gdb)
251  state &= ~clear;
(gdb)
0x001109d6 251  state &= ~clear;
(gdb)
0x001109d8 251  state &= ~clear;
(gdb)
0x001109da 251  state &= ~clear;
(gdb)
0x001109dc 251  state &= ~clear;
(gdb)
252  state |= set;
(gdb)
0x001109e0 252  state |= set;
(gdb)
0x001109e2 252  state |= set;
(gdb)
0x001109e4 252  state |= set;
(gdb)
253  the_thread->Life.state = state;
(gdb)
0x001109e8 253  the_thread->Life.state = state;
(gdb)
0x001109ea 253  the_thread->Life.state = state;
(gdb)
255  state &= ~ignore;
(gdb)
0x001109f0 255  state &= ~ignore;
(gdb)
0x001109f2 255  state &= ~ignore;
(gdb)
0x001109f4 255  state &= ~ignore;
(gdb)
0x001109f6 255  state &= ~ignore;
(gdb)
258    _Thread_Is_life_change_allowed( state )
(gdb)
0x001109fa 258    _Thread_Is_life_change_allowed( state )
(gdb)
0x001109fe 258    _Thread_Is_life_change_allowed( state )
(gdb)
257  if (
(gdb)
0x00110a02 257  if (
(gdb)
259      && _Thread_Is_life_changing( state )
(gdb)
0x00110a06 259      && _Thread_Is_life_changing( state )
(gdb)
0x00110a0a 259      && _Thread_Is_life_changing( state )
(gdb)
0x00110a0c 259      && _Thread_Is_life_changing( state )
(gdb)
0x00110a0e 259      && _Thread_Is_life_changing( state )
(gdb)
261    the_thread->is_preemptible   = the_thread->Start.is_preemptible;
(gdb)
0x00110a12 261    the_thread->is_preemptible   =
the_thread->Start.is_preemptible;
(gdb)
0x00110a16 261    the_thread->is_preemptible   =
the_thread->Start.is_preemptible;
(gdb)
0x00110a18 261    the_thread->is_preemptible   =
the_thread->Start.is_preemptible;
(gdb)
262    the_thread->budget_algorithm = the_thread->Start.budget_algorithm;
(gdb)
0x00110a1e 262    the_thread->budget_algorithm =
the_thread->Start.budget_algorithm;
(gdb)
0x00110a22 262    the_thread->budget_algorithm =
the_thread->Start.budget_algorithm;
(gdb)
0x00110a24 262    the_thread->budget_algorithm =
the_thread->Start.budget_algorithm;
(gdb)
263    the_thread->budget_callout   = the_thread->Start.budget_callout;
(gdb)
0x00110a2a 263    the_thread->budget_callout   =
the_thread->Start.budget_callout;
(gdb)
0x00110a2e 263    the_thread->budget_callout   =
the_thread->Start.budget_callout;
(gdb)
0x00110a30 263    the_thread->budget_callout   =
the_thread->Start.budget_callout;
(gdb)
265    _Thread_Add_post_switch_action(
(gdb)
0x00110a36 265    _Thread_Add_post_switch_action(
(gdb)
0x00110a3a 265    _Thread_Add_post_switch_action(
(gdb)
0x00110a3e 265    _Thread_Add_post_switch_action(
(gdb)
0x00110a42 265    _Thread_Add_post_switch_action(
(gdb)
0x00110a44 265    _Thread_Add_post_switch_action(
(gdb)
0x00110a46 265    _Thread_Add_post_switch_action(
(gdb)
272  return previous;
(gdb)
273 }
(gdb)
0x00110a4e 273 }
(gdb)
0x00110a50 273 }
(gdb)
0x00110a52 273 }
(gdb)
_Thread_Exit (executing=0x2017f8 <_RTEMS_tasks_Objects+2576>,
set=(THREAD_LIFE_TERMINATING | THREAD_LIFE_DETACHED), exit_value=0x0) at
/home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/threadrestart.c:556
556  _Thread_State_release( executing, &lock_context );
(gdb)
0x00110dd2 556  _Thread_State_release( executing, &lock_context );
(gdb)
0x00110dd4 556  _Thread_State_release( executing, &lock_context );
(gdb) so
source command requires file name of file to source.
(gdb)
source command requires file name of file to source.
(gdb) si
0x00110dd6 556  _Thread_State_release( executing, &lock_context );
(gdb)
_Thread_State_release (the_thread=0x0, lock_context=0x14) at
/home/richi/quick-start/src/rtems/cpukit/include/rtems/score/threadimpl.h:570
570 {
(gdb)
0x0011023e 570 {
(gdb) ni
0x00110240 570 {
(gdb)
0x00110242 570 {
(gdb)
0x00110244 570 {
(gdb)
571  _Thread_State_release_critical( the_thread, lock_context );
(gdb)
0x00110248 571  _Thread_State_release_critical( the_thread, lock_context );
(gdb)
0x0011024a 571  _Thread_State_release_critical( the_thread, lock_context );
(gdb)
572  _ISR_lock_ISR_enable( lock_context );
(gdb)
0x00110250 572  _ISR_lock_ISR_enable( lock_context );
(gdb)
0x00110252 572  _ISR_lock_ISR_enable( lock_context );
(gdb)
0x00110254 572  _ISR_lock_ISR_enable( lock_context );
(gdb)
573 }
(gdb)
0x0011025a 573 }
(gdb)
0x0011025c 573 }
(gdb)
0x0011025e 573 }
(gdb)
_Thread_Exit (executing=0x2017f8 <_RTEMS_tasks_Objects+2576>,
set=(THREAD_LIFE_TERMINATING | THREAD_LIFE_DETACHED), exit_value=0x0) at
/home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/threadrestart.c:557
557 }
(gdb)
0x00110ddc 557 }
(gdb)
0x00110dde 557 }
(gdb)
0x00110de0 557 }
(gdb)
rtems_task_exit () at
/home/richi/quick-start/src/rtems/c/src/../../cpukit/rtems/src/taskexit.c:36
36  _Thread_Dispatch_direct( cpu_self );
(gdb)
0x0010ab60 36  _Thread_Dispatch_direct( cpu_self );
(gdb) si
_Thread_Dispatch_direct (cpu_self=0x2017f8 <_RTEMS_tasks_Objects+2576>) at
/home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/threaddispatch.c:351
351 {
(gdb)
0x0010ec7e 351 {
(gdb)
0x0010ec80 351 {
(gdb)
0x0010ec82 351 {
(gdb) ni
354  if ( cpu_self->thread_dispatch_disable_level != 1 ) {
(gdb)
0x0010ec86 354  if ( cpu_self->thread_dispatch_disable_level != 1 ) {
(gdb)
0x0010ec88 354  if ( cpu_self->thread_dispatch_disable_level != 1 ) {
(gdb)
0x0010ec8a 354  if ( cpu_self->thread_dispatch_disable_level != 1 ) {
(gdb)
358  _ISR_Local_disable( level );
(gdb)
0x0010ec96 358  _ISR_Local_disable( level );
(gdb)
359  _Thread_Do_dispatch( cpu_self, level );
(gdb)
0x0010ec9a 359  _Thread_Do_dispatch( cpu_self, level );
(gdb)
0x0010ec9c 359  _Thread_Do_dispatch( cpu_self, level );
(gdb) si
_Thread_Do_dispatch (cpu_self=0x1, level=20) at
/home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/threaddispatch.c:260
260 {
(gdb)
0x0010ebb6 260 {
(gdb)
0x0010ebb8 260 {
(gdb)
0x0010ebba 260 {
(gdb)
0x0010ebbc 260 {
(gdb)
267    !_ISR_Is_enabled( level )
(gdb)
0x0010ebc0 267    !_ISR_Is_enabled( level )
(gdb) ni
0x0010ebc4 267    !_ISR_Is_enabled( level )
(gdb)
0x0010ebc6 267    !_ISR_Is_enabled( level )
(gdb)
0x0010ebca 267    !_ISR_Is_enabled( level )
(gdb)
266  if (
(gdb)
0x0010ebce 266  if (
(gdb)
276  executing = cpu_self->executing;
(gdb)
0x0010ebd8 276  executing = cpu_self->executing;
(gdb)
0x0010ebda 276  executing = cpu_self->executing;
(gdb)
281    level = _Thread_Preemption_intervention( executing, cpu_self, level
);
(gdb)
0x0010ebde 281    level = _Thread_Preemption_intervention( executing,
cpu_self, level );
(gdb)
0x0010ebe0 281    level = _Thread_Preemption_intervention( executing,
cpu_self, level );
(gdb)
0x0010ebe2 281    level = _Thread_Preemption_intervention( executing,
cpu_self, level );
(gdb)
0x0010ebe6 281    level = _Thread_Preemption_intervention( executing,
cpu_self, level );
(gdb)
282    heir = _Thread_Get_heir_and_make_it_executing( cpu_self );
(gdb)
0x0010ebea 282    heir = _Thread_Get_heir_and_make_it_executing( cpu_self );
(gdb)
0x0010ebee 282    heir = _Thread_Get_heir_and_make_it_executing( cpu_self );
(gdb)
289    if ( heir == executing )
(gdb)
0x0010ebf2 289    if ( heir == executing )
(gdb)
0x0010ebf4 289    if ( heir == executing )
(gdb)
0x0010ebf6 289    if ( heir == executing )
(gdb)
290      goto post_switch;
(gdb)
323  cpu_self->thread_dispatch_disable_level = 0;
(gdb)
0x0010ec5c 323  cpu_self->thread_dispatch_disable_level = 0;
(gdb)
0x0010ec5e 323  cpu_self->thread_dispatch_disable_level = 0;
(gdb)
324  _Profiling_Thread_dispatch_enable( cpu_self, 0 );
(gdb)
0x0010ec62 324  _Profiling_Thread_dispatch_enable( cpu_self, 0 );
(gdb)
0x0010ec64 324  _Profiling_Thread_dispatch_enable( cpu_self, 0 );
(gdb)
326  _ISR_Local_enable( level );
(gdb)
0x0010ec6a 326  _ISR_Local_enable( level );
(gdb)
328  _Thread_Run_post_switch_actions( executing );
(gdb)
0x0010ec70 328  _Thread_Run_post_switch_actions( executing );
(gdb)

and now an infinite loop.

Before this, during the stack trace of rtems_yield by TA1, everything
seemed normal and It gave control of the CPU to TA5 (Stack trace attached).
What might be wrong?

On Fri, Oct 9, 2020 at 9:03 PM Richi Dubey <richidubey at gmail.com> wrote:

> Okay, I'm gonna do that. Thanks for the help.
>
> On Thu, Oct 8, 2020 at 9:47 PM Gedare Bloom <gedare at rtems.org> wrote:
>
>> On Thu, Oct 8, 2020 at 9:38 AM Richi Dubey <richidubey at gmail.com> wrote:
>> >
>> > Hi,
>> >
>> > I have been trying to debug sp16 for the last few days. I am using the
>> new Strong APA scheduler we worked on during this GSoC. The scheduler fails
>> only for the following tests:
>> >
>> >  sp02.exe
>> >  sp16.exe
>> >  sp30.exe
>> >  sp31.exe
>> >  sp37.exe
>> >  sp42.exe
>> >  spfatal29.exe
>> >  tm24.exe
>> >
>> > On executing sp16.exe, I get the following output:
>> >
>> > *** BEGIN OF TEST SP 16 ***
>> > *** TEST VERSION:
>> 5.0.0.61ccb9c05dcd695114541960aa6bfc1315f30514-modified
>> > *** TEST STATE: EXPECTED_PASS
>> > *** TEST BUILD: RTEMS_NETWORKING RTEMS_POSIX_API RTEMS_SMP
>> > *** TEST TOOLS: 7.5.0 20191114 (RTEMS 5, RSB 5 (0b7e87143b76), Newlib
>> fbaa096)
>> > TA1 - rtems_region_ident - rnid => 32010001
>> > TA1 - rtems_region_get_segment - wait on 1000 byte segment from region 2
>> > TA1 - got segment from region 2 - 0x00000040
>> > TA1 - rtems_region_get_segment - wait on 3K segment from region 3
>> > TA1 - got segment from region 3 - 0x00000080
>> > TA1 - rtems_region_get_segment - get 3080 byte segment from region 1 -
>> NO_WAIT
>> > TA1 - got segment from region 1 - 0x00000040
>> > TA1 - rtems_task_wake_after - yield processor
>> > TA2 - rtems_region_get_segment - wait on 2K segment from region 1
>> > TA1 - rtems_region_return_segment - return segment to region 1 -
>> 0x00000040
>> > TA1 - rtems_region_get_segment - wait 10 seconds for 3K segment from
>> region 1
>> > TA2 - got segment from region 1 - 0x00000040
>> > TA2 - rtems_region_return_segment - return segment to region 1 -
>> 0x00000040
>> > TA2 - rtems_task_set_priority - make self highest priority task
>> > TA2 - rtems_region_get_segment - wait on 3750 byte segment
>> > TA1 - got segment from region 1 - 0x00000040
>> > TA1 - rtems_region_return_segment - return segment to region 2 -
>> 0x00000040
>> > TA2 - got segment from region 2 - 0x00000040
>> > TA2 - rtems_region_return_segment - return segment to region 2 -
>> 0x00000040
>> > TA2 - rtems_task_exit
>> > TA1 - rtems_task_wake_after - yield processor
>> > TA3 - rtems_region_get_segment - wait on 3750 byte segment from region 2
>> > TA3 - got segment from region 2 - 0x00000040
>> > TA3 - rtems_region_get_segment - wait on 2K segment from region 3
>> > TA1 - rtems_task_delete - delete TA3
>> > TA1 - rtems_task_wake_after - yield processor
>> > TA4 - rtems_region_get_segment - wait on 1.5K segment from region 1
>> > TA5 - rtems_region_get_segment - wait on 1.5K segment from region 1
>> > TA1 - rtems_region_return_segment - return segment to region 1 -
>> 0x00000040
>> > TA1 - rtems_task_wake_after - yield processor
>> > TA4 - got and returned 0x00000040
>> > TA5 - got and returned 0x000006c0
>> > TA1 - rtems_region_get_segment - wait 10 seconds for 3K segment from
>> region 1
>> > TA1 - got segment from region 1 - 0x00000040
>> > TA1 - rtems_task_wake_after - yield processor
>> > TA4 - rtems_region_get_segment - wait on 3K segment from region 1
>> > TA5 - rtems_region_get_segment - wait on 3K segment from region 1
>> > TA1 - rtems_task_delete - delete TA4
>> > TA1 - rtems_region_return_segment - return segment to region 1 -
>> 0x00000040
>> > TA1 - rtems_task_wake_after - yield processor
>> > TA5 - got segment from region 1 - 0x00000040
>> > TA5 - rtems_region_return_segment - return segment to region 1 -
>> 0x00000040
>> > TA5 - rtems_task_exit
>> >
>> > and it doesn't progress further from here. It gets stuck in some kind
>> of loop. While debugging with gdb, I realized the loop is:
>> >
>> > Clock_isr (arg=0x0) at
>> /home/richi/quick-start/src/rtems/bsps/arm/include/../../shared/dev/clock/clockimpl.h:155
>> > 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x001042fa 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x001042fc 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x001042fe 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> >
>> > 0x00104302 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104304 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104306 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x0010430a 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 154        while (
>> > (gdb)
>> > 0x0010430e 154        while (
>> > (gdb)
>> > 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104314 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104316 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104318 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x0010431c 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x0010431e 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104322 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104324 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 0x001042d2 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 0x001042d4 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 0x001042d8 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 0x001042dc 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 162            (*tc->tc_get_timecount)(tc),
>> > (gdb)
>> > 0x001042e2 162            (*tc->tc_get_timecount)(tc),
>> > (gdb)
>> > 160          _Timecounter_Tick_simple(
>> > (gdb)
>> > 0x001042e6 160          _Timecounter_Tick_simple(
>> > (gdb)
>> > 0x001042e8 160          _Timecounter_Tick_simple(
>> > (gdb)
>> > 0x001042ea 160          _Timecounter_Tick_simple(
>> > (gdb)
>> > 0x001042ee 160          _Timecounter_Tick_simple(
>> > (gdb)
>> > 0x001042f0 160          _Timecounter_Tick_simple(
>> > (gdb)
>> > 0x001042f2 160          _Timecounter_Tick_simple(
>> > (gdb)
>> >
>> > 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> >
>> > 0x001042fa 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x001042fc 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x001042fe 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> >
>> > 0x00104302 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104304 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104306 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x0010430a 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 154        while (
>> > (gdb)
>> > 0x0010430e 154        while (
>> > (gdb)
>> > 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104314 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104316 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104318 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x0010431c 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x0010431e 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104322 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 0x00104324 155          _Thread_Heir == _Thread_Executing &&
>> _Thread_Executing->is_idle
>> > (gdb)
>> > 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 0x001042d2 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 0x001042d4 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 0x001042d8 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> > 0x001042dc 159          _Timecounter_Acquire(&lock_context);
>> > (gdb)
>> >
>> > 162            (*tc->tc_get_timecount)(tc),
>> > (gdb)
>> > 0x001042e2 162            (*tc->tc_get_timecount)(tc),
>> >
>> >
>> > and so on...
>> >
>> > I cannot figure out what is wrong. Like Dr. Sherill suggested in a
>> different .exe debug earlier, I set breakpoints and checked values of
>> variables passed to the function and it all looks okay. I am quite sure
>> this is because of the scheduler.
>> >
>> > How do I progress further? Please let me know.
>> >
>>
>> The loop is spinning with an idle thread only, advancing the time
>> counters still. The last message from TA1 is a yield. You need to dig
>> into where TA1 got lost or why it doesn't get back the processor when
>> TA5 exits.
>>
>> > Thanks,
>> > Richi.
>> >
>> >
>> > _______________________________________________
>> > devel mailing list
>> > devel at rtems.org
>> > http://lists.rtems.org/mailman/listinfo/devel
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20201009/7bf283db/attachment-0001.html>
-------------- next part --------------
Task_1 (argument=0) at /home/richi/quick-start/src/rtems/c/src/../../testsuites/sptests/sp16/task1.c:198
198	 ��status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
(gdb) 
0x0010252a	198	 ��status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
(gdb) si
rtems_task_wake_after (ticks=1) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/rtems/src/taskwakeafter.c:28
28	{
(gdb) 
0x0010b708	28	{
(gdb) ni
0x0010b70a	28	{
(gdb) 
0x0010b70c	28	{
(gdb) 
36	 ��cpu_self = _Thread_Dispatch_disable();
(gdb) 
0x0010b712	36	 ��cpu_self = _Thread_Dispatch_disable();
(gdb) 
37	 �� ��executing = _Per_CPU_Get_executing( cpu_self );
(gdb) 
0x0010b716	37	 �� ��executing = _Per_CPU_Get_executing( cpu_self );
(gdb) 
0x0010b71a	37	 �� ��executing = _Per_CPU_Get_executing( cpu_self );
(gdb) 
39	 �� ��if ( ticks == 0 ) {
(gdb) 
0x0010b71e	39	 �� ��if ( ticks == 0 ) {
(gdb) 
0x0010b720	39	 �� ��if ( ticks == 0 ) {
(gdb) 
40	 �� �� ��_Thread_Yield( executing );
(gdb) 
0x0010b724	40	 �� �� ��_Thread_Yield( executing );
(gdb) si
_Thread_Yield (executing=0x2057c0 <_Per_CPU_Information>) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/threadyield.c:31
31	{
(gdb) 
0x00112178	31	{
(gdb) ni
0x0011217a	31	{
(gdb) 
0x0011217c	31	{
(gdb) 
34	 ��_Thread_State_acquire( executing, &lock_context );
(gdb) 
0x00112182	34	 ��_Thread_State_acquire( executing, &lock_context );
(gdb) 
0x00112184	34	 ��_Thread_State_acquire( executing, &lock_context );
(gdb) 
0x00112186	34	 ��_Thread_State_acquire( executing, &lock_context );
(gdb) 
36	 ��if ( _States_Is_ready( executing->current_state ) ) {
(gdb) 
0x0011218c	36	 ��if ( _States_Is_ready( executing->current_state ) ) {
(gdb) 
0x0011218e	36	 ��if ( _States_Is_ready( executing->current_state ) ) {
(gdb) 
0x00112190	36	 ��if ( _States_Is_ready( executing->current_state ) ) {
(gdb) 
0x00112194	36	 ��if ( _States_Is_ready( executing->current_state ) ) {
(gdb) 
0x00112196	36	 ��if ( _States_Is_ready( executing->current_state ) ) {
(gdb) 
0x00112198	36	 ��if ( _States_Is_ready( executing->current_state ) ) {
(gdb) 
37	 �� ��_Scheduler_Yield( executing );
(gdb) si
0x0011219c	37	 �� ��_Scheduler_Yield( executing );
(gdb) 
_Scheduler_Yield (the_thread=0x2012f0 <_RTEMS_tasks_Objects+1288>) at /home/richi/quick-start/src/rtems/cpukit/include/rtems/score/schedulerimpl.h:219
219	{
(gdb) 
0x00112134	219	{
(gdb) ni
0x00112136	219	{
(gdb) 
0x00112138	219	{
(gdb) 
223	 ��scheduler = _Thread_Scheduler_get_home( the_thread );
(gdb) 
0x0011213c	223	 ��scheduler = _Thread_Scheduler_get_home( the_thread );
(gdb) 
0x00112140	223	 ��scheduler = _Thread_Scheduler_get_home( the_thread );
(gdb) 
224	 ��_Scheduler_Acquire_critical( scheduler, &lock_context );
(gdb) 
0x00112146	224	 ��_Scheduler_Acquire_critical( scheduler, &lock_context );
(gdb) ni
0x00112148	224	 ��_Scheduler_Acquire_critical( scheduler, &lock_context );
(gdb) 
0x0011214a	224	 ��_Scheduler_Acquire_critical( scheduler, &lock_context );
(gdb) 
225	 ��( *scheduler->Operations.yield )(
(gdb) 
0x00112150	225	 ��( *scheduler->Operations.yield )(
(gdb) si
0x00112152	225	 ��( *scheduler->Operations.yield )(
(gdb) 
0x00112154	225	 ��( *scheduler->Operations.yield )(
(gdb) 
_Thread_Scheduler_get_home_node (the_thread=0x200828 <_Configuration_Scheduler_strong_APA_dflt>) at /home/richi/quick-start/src/rtems/cpukit/include/rtems/score/threadimpl.h:1415
1415	{
(gdb) 
0x001120b2	1415	{
(gdb) ni
0x001120b4	1415	{
(gdb) 
0x001120b6	1415	{
(gdb) 
1418	 ��return SCHEDULER_NODE_OF_THREAD_WAIT_NODE(
(gdb) 
0x001120ba	1418	 ��return SCHEDULER_NODE_OF_THREAD_WAIT_NODE(
(gdb) 
0x001120bc	1418	 ��return SCHEDULER_NODE_OF_THREAD_WAIT_NODE(
(gdb) 
0x001120be	1418	 ��return SCHEDULER_NODE_OF_THREAD_WAIT_NODE(
(gdb) 
0x001120c2	1418	 ��return SCHEDULER_NODE_OF_THREAD_WAIT_NODE(
(gdb) 
0x001120c4	1418	 ��return SCHEDULER_NODE_OF_THREAD_WAIT_NODE(
(gdb) 
1424	}
(gdb) 
0x001120c8	1424	}
(gdb) 
0x001120ca	1424	}
(gdb) 
0x001120cc	1424	}
(gdb) 
0x00112158 in _Scheduler_Yield (the_thread=0x2012f0 <_RTEMS_tasks_Objects+1288>) at /home/richi/quick-start/src/rtems/cpukit/include/rtems/score/schedulerimpl.h:225
225	 ��( *scheduler->Operations.yield )(
(gdb) si
0x0011215a	225	 ��( *scheduler->Operations.yield )(
(gdb) 
0x0011215c	225	 ��( *scheduler->Operations.yield )(
(gdb) 
0x0011215e	225	 ��( *scheduler->Operations.yield )(
(gdb) 
0x00112160	225	 ��( *scheduler->Operations.yield )(
(gdb) 
_Scheduler_strong_APA_Yield (scheduler=0x1120c3 <_Thread_Scheduler_get_home_node+18>, thread=0x20d148, node=0x201348 <_RTEMS_tasks_Objects+1376>) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/schedulerstrongapa.c:746
746	{
(gdb) 
0x0011b294	746	{
(gdb) ni
0x0011b296	746	{
(gdb) 
0x0011b298	746	{
(gdb) 
0x0011b29a	746	{
(gdb) 
0x0011b29c	746	{
(gdb) 
747	 ��Scheduler_Context *context = _Scheduler_Get_context( scheduler );
(gdb) 
0x0011b2a0	747	 ��Scheduler_Context *context = _Scheduler_Get_context( scheduler );
(gdb) 
0x0011b2a4	747	 ��Scheduler_Context *context = _Scheduler_Get_context( scheduler );
(gdb) ni
749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2aa	749	 ��_Scheduler_SMP_Yield(
(gdb) si
0x0011b2ae	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2b0	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2b4	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2b8	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2ba	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2be	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2c2	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2c4	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2c6	749	 ��_Scheduler_SMP_Yield(
(gdb) 
0x0011b2c8	749	 ��_Scheduler_SMP_Yield(
(gdb) 
_Scheduler_SMP_Yield (context=0x200828 <_Configuration_Scheduler_strong_APA_dflt>, thread=0x2, node=0x20d108, extract_from_ready=0x0, enqueue=0x11b0ab <_Scheduler_strong_APA_Enqueue>, enqueue_scheduled=0x11b17f <_Scheduler_strong_APA_Enqueue_scheduled>) at /home/richi/quick-start/src/rtems/cpukit/include/rtems/score/schedulersmpimpl.h:1376
1376	{
(gdb) ni
0x0011a292	1376	{
(gdb) 
0x0011a294	1376	{
(gdb) 
0x0011a296	1376	{
(gdb) 
0x0011a298	1376	{
(gdb) 
0x0011a29a	1376	{
(gdb) 
0x0011a29c	1376	{
(gdb) 
1381	 ��node_state = _Scheduler_SMP_Node_state( node );
(gdb) 
0x0011a2a0	1381	 ��node_state = _Scheduler_SMP_Node_state( node );
(gdb) 
0x0011a2a4	1381	 ��node_state = _Scheduler_SMP_Node_state( node );
(gdb) 
1382	 ��insert_priority = _Scheduler_SMP_Node_priority( node );
(gdb) 
0x0011a2a8	1382	 ��insert_priority = _Scheduler_SMP_Node_priority( node );
(gdb) 
0x0011a2ac	1382	 ��insert_priority = _Scheduler_SMP_Node_priority( node );
(gdb) 
1383	 ��insert_priority = SCHEDULER_PRIORITY_APPEND( insert_priority );
(gdb) ni
0x0011a2b4	1383	 ��insert_priority = SCHEDULER_PRIORITY_APPEND( insert_priority );
(gdb) 
0x0011a2b8	1383	 ��insert_priority = SCHEDULER_PRIORITY_APPEND( insert_priority );
(gdb) 
0x0011a2bc	1383	 ��insert_priority = SCHEDULER_PRIORITY_APPEND( insert_priority );
(gdb) 
0x0011a2c0	1383	 ��insert_priority = SCHEDULER_PRIORITY_APPEND( insert_priority );
(gdb) 
0x0011a2c4	1383	 ��insert_priority = SCHEDULER_PRIORITY_APPEND( insert_priority );
(gdb) 
1385	 ��if ( node_state == SCHEDULER_SMP_NODE_SCHEDULED ) {
(gdb) 
0x0011a2ca	1385	 ��if ( node_state == SCHEDULER_SMP_NODE_SCHEDULED ) {
(gdb) 
0x0011a2cc	1385	 ��if ( node_state == SCHEDULER_SMP_NODE_SCHEDULED ) {
(gdb) 
1386	 �� ��_Scheduler_SMP_Extract_from_scheduled( context, node );
(gdb) 
0x0011a2d0	1386	 �� ��_Scheduler_SMP_Extract_from_scheduled( context, node );
(gdb) 
0x0011a2d2	1386	 �� ��_Scheduler_SMP_Extract_from_scheduled( context, node );
(gdb) 
1387	 �� ��( *enqueue_scheduled )( context, node, insert_priority );
(gdb) 
0x0011a2d8	1387	 �� ��( *enqueue_scheduled )( context, node, insert_priority );
(gdb) si
0x0011a2dc	1387	 �� ��( *enqueue_scheduled )( context, node, insert_priority );
(gdb) 
0x0011a2de	1387	 �� ��( *enqueue_scheduled )( context, node, insert_priority );
(gdb) 
0x0011a2e0	1387	 �� ��( *enqueue_scheduled )( context, node, insert_priority );
(gdb) 
_Scheduler_strong_APA_Enqueue_scheduled (context=0x200828 <_Configuration_Scheduler_strong_APA_dflt>, node=0x201548 <_RTEMS_tasks_Objects+1888>, insert_priority=9236928465469440) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/schedulerstrongapa.c:686
686	{
(gdb) 
0x0011b180	686	{
(gdb) ni
0x0011b182	686	{
(gdb) 
0x0011b184	686	{
(gdb) 
0x0011b186	686	{
(gdb) 
0x0011b188	686	{
(gdb) 
687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b190	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b194	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) si
0x0011b196	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b19a	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b19e	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1a0	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1a4	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1a8	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1aa	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1ae	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1b2	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) si
0x0011b1b4	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1b8	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1bc	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1be	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1c2	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1c6	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1c8	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1cc	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1d0	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1d2	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1d6	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1d8	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
0x0011b1da	687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
_Scheduler_SMP_Enqueue_scheduled (context=0x0, node=0x0, insert_priority=0, order=0x119a91 <_Scheduler_SMP_Priority_less_equal>, extract_from_ready=0x11ad29 <_Scheduler_strong_APA_Extract_from_ready>, get_highest_ready=0x11ab4d <_Scheduler_strong_APA_Get_highest_ready>, insert_ready=0x11ad5f <_Scheduler_strong_APA_Insert_ready>, insert_scheduled=0x11a323 <_Scheduler_SMP_Insert_scheduled>, move_from_ready_to_scheduled=0x11ab09 <_Scheduler_strong_APA_Move_from_ready_to_scheduled>, allocate_processor=0x11a983 <_Scheduler_strong_APA_Allocate_processor>) at /home/richi/quick-start/src/rtems/cpukit/include/rtems/score/schedulersmpimpl.h:942
942	{
(gdb) 
0x00119df2	942	{
(gdb) ni
0x00119df4	942	{
(gdb) 
0x00119df6	942	{
(gdb) ni
0x00119df8	942	{
(gdb) ni
0x00119dfa	942	{
(gdb) 
947	 �� ��highest_ready = ( *get_highest_ready )( context, node );
(gdb) 
0x00119e00	947	 �� ��highest_ready = ( *get_highest_ready )( context, node );
(gdb) si
0x00119e02	947	 �� ��highest_ready = ( *get_highest_ready )( context, node );
(gdb) 
0x00119e04	947	 �� ��highest_ready = ( *get_highest_ready )( context, node );
(gdb) 
_Scheduler_strong_APA_Get_highest_ready (context=0x3, filter=0xffffffff) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/schedulerstrongapa.c:266
266	{
(gdb) 
0x0011ab4e	266	{
(gdb) ni
0x0011ab50	266	{
(gdb) 
0x0011ab52	266	{
(gdb) 
0x0011ab54	266	{
(gdb) ni
279	 ��self = _Scheduler_strong_APA_Get_self( context );
(gdb) 
0x0011ab58	279	 ��self = _Scheduler_strong_APA_Get_self( context );
(gdb) 
0x0011ab5c	279	 ��self = _Scheduler_strong_APA_Get_self( context );
(gdb) 
281	 ��front = 0;
(gdb) 
0x0011ab60	281	 ��front = 0;
(gdb) 
282	 ��rear = -1;
(gdb) 
0x0011ab66	282	 ��rear = -1;
(gdb) ni
284	 ��filter_cpu = _Thread_Get_CPU( filter->user );
(gdb) 
0x0011ab6a	284	 ��filter_cpu = _Thread_Get_CPU( filter->user );
(gdb) 
0x0011ab6c	284	 ��filter_cpu = _Thread_Get_CPU( filter->user );
(gdb) 
0x0011ab6e	284	 ��filter_cpu = _Thread_Get_CPU( filter->user );
(gdb) 
0x0011ab72	284	 ��filter_cpu = _Thread_Get_CPU( filter->user );
(gdb) 
285	 ��CPU = self->CPU;
(gdb) 
0x0011ab76	285	 ��CPU = self->CPU;
(gdb) 
0x0011ab78	285	 ��CPU = self->CPU;
(gdb) 
286	 ��cpu_max = _SMP_Get_processor_maximum();
(gdb) 
0x0011ab7e	286	 ��cpu_max = _SMP_Get_processor_maximum();
(gdb) 
288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab82	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab84	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab98	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab9a	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 

0x0011ab9c	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 

0x0011ab9e	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 

289	 �� ��CPU[ cpu_index ].visited = false;
(gdb) 
0x0011ab88	289	 �� ��CPU[ cpu_index ].visited = false;
(gdb) 
0x0011ab8a	289	 �� ��CPU[ cpu_index ].visited = false;
(gdb) 
0x0011ab8c	289	 �� ��CPU[ cpu_index ].visited = false;
(gdb) 
0x0011ab8e	289	 �� ��CPU[ cpu_index ].visited = false;
(gdb) 
0x0011ab90	289	 �� ��CPU[ cpu_index ].visited = false;
(gdb) 
288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab94	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab96	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab98	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab9a	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab9c	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
0x0011ab9e	288	 ��for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
(gdb) 
292	 ��rear = rear + 1;
(gdb) 
0x0011aba2	292	 ��rear = rear + 1;
(gdb) 
0x0011aba4	292	 ��rear = rear + 1;
(gdb) 
293	 ��CPU[ rear ].cpu = filter_cpu;
(gdb) 
0x0011aba8	293	 ��CPU[ rear ].cpu = filter_cpu;
(gdb) 
0x0011abaa	293	 ��CPU[ rear ].cpu = filter_cpu;
(gdb) 
0x0011abac	293	 ��CPU[ rear ].cpu = filter_cpu;
(gdb) 

0x0011abae	293	 ��CPU[ rear ].cpu = filter_cpu;
(gdb) 
0x0011abb0	293	 ��CPU[ rear ].cpu = filter_cpu;
(gdb) 
294	 ��CPU[ _Per_CPU_Get_index( filter_cpu ) ].visited = true;
(gdb) 
0x0011abb4	294	 ��CPU[ _Per_CPU_Get_index( filter_cpu ) ].visited = true;
(gdb) 

0x0011abb8	294	 ��CPU[ _Per_CPU_Get_index( filter_cpu ) ].visited = true;
(gdb) 
0x0011abba	294	 ��CPU[ _Per_CPU_Get_index( filter_cpu ) ].visited = true;
(gdb) 
0x0011abbc	294	 ��CPU[ _Per_CPU_Get_index( filter_cpu ) ].visited = true;
(gdb) 
0x0011abbe	294	 ��CPU[ _Per_CPU_Get_index( filter_cpu ) ].visited = true;
(gdb) 
0x0011abc0	294	 ��CPU[ _Per_CPU_Get_index( filter_cpu ) ].visited = true;
(gdb) 

0x0011abc2	294	 ��CPU[ _Per_CPU_Get_index( filter_cpu ) ].visited = true;
(gdb) 
296	 ��highest_ready = _Scheduler_strong_APA_Find_highest_ready(
(gdb) 
0x0011abc6	296	 ��highest_ready = _Scheduler_strong_APA_Find_highest_ready(
(gdb) 
0x0011abc8	296	 ��highest_ready = _Scheduler_strong_APA_Find_highest_ready(
(gdb) 
0x0011abca	296	 ��highest_ready = _Scheduler_strong_APA_Find_highest_ready(
(gdb) 
0x0011abce	296	 ��highest_ready = _Scheduler_strong_APA_Find_highest_ready(
(gdb) 
302	 ��if ( highest_ready != filter ) {
(gdb) p highest_ready
$1 = (Scheduler_Node *) 0x201a50 <_RTEMS_tasks_Objects+3176>
(gdb) ni
0x0011abd2	302	 ��if ( highest_ready != filter ) {
(gdb) ni
0x0011abd4	302	 ��if ( highest_ready != filter ) {
(gdb) 
0x0011abd6	302	 ��if ( highest_ready != filter ) {
(gdb) 
308	 �� ��node = _Scheduler_strong_APA_Node_downcast( highest_ready );
(gdb) 
0x0011abda	308	 �� ��node = _Scheduler_strong_APA_Node_downcast( highest_ready );
(gdb) 
0x0011abde	308	 �� ��node = _Scheduler_strong_APA_Node_downcast( highest_ready );
(gdb) ni
313	 �� ��while ( node->cpu_to_preempt != ��filter_cpu ) {
(gdb) 
313	 �� ��while ( node->cpu_to_preempt != ��filter_cpu ) {
(gdb) 
0x0011ac22	313	 �� ��while ( node->cpu_to_preempt != ��filter_cpu ) {
(gdb) 
0x0011ac26	313	 �� ��while ( node->cpu_to_preempt != ��filter_cpu ) {
(gdb) 
0x0011ac28	313	 �� ��while ( node->cpu_to_preempt != ��filter_cpu ) {
(gdb) ni
0x0011ac2a	313	 �� ��while ( node->cpu_to_preempt != ��filter_cpu ) {
(gdb) 
335	 �� �� ��curr_node = &node->Base.Base;
(gdb) 
0x0011ac2e	335	 �� �� ��curr_node = &node->Base.Base;
(gdb) 
336	 �� �� ��highest_ready = curr_node;
(gdb) 
0x0011ac32	336	 �� �� ��highest_ready = curr_node;
(gdb) ni
339	 ��return highest_ready;
(gdb) 
340	}
(gdb) ni
0x0011ac38	340	}
(gdb) 
0x0011ac3a	340	}
(gdb) 
0x0011ac3c	340	}
(gdb) 
0x00119e06 in _Scheduler_SMP_Enqueue_scheduled (context=0x200828 <_Configuration_Scheduler_strong_APA_dflt>, node=0x201548 <_RTEMS_tasks_Objects+1888>, insert_priority=257, order=0x119a91 <_Scheduler_SMP_Priority_less_equal>, extract_from_ready=0x11ad29 <_Scheduler_strong_APA_Extract_from_ready>, get_highest_ready=0x11ab4d <_Scheduler_strong_APA_Get_highest_ready>, insert_ready=0x11ad5f <_Scheduler_strong_APA_Insert_ready>, insert_scheduled=0x11a323 <_Scheduler_SMP_Insert_scheduled>, move_from_ready_to_scheduled=0x11ab09 <_Scheduler_strong_APA_Move_from_ready_to_scheduled>, allocate_processor=0x11a983 <_Scheduler_strong_APA_Allocate_processor>) at /home/richi/quick-start/src/rtems/cpukit/include/rtems/score/schedulersmpimpl.h:947
947	 �� ��highest_ready = ( *get_highest_ready )( context, node );
(gdb) 
954	 �� �� ��node->sticky_level > 0
(gdb) 
0x00119e0a	954	 �� �� ��node->sticky_level > 0
(gdb) 
953	 �� ��if (
(gdb) 
0x00119e0e	953	 �� ��if (
(gdb) 
955	 �� �� �� ��&& ( *order )( &insert_priority, &highest_ready->Node.Chain )
(gdb) 
0x00119e12	955	 �� �� �� ��&& ( *order )( &insert_priority, &highest_ready->Node.Chain )
(gdb) 
0x00119e14	955	 �� �� �� ��&& ( *order )( &insert_priority, &highest_ready->Node.Chain )
(gdb) 
0x00119e16	955	 �� �� �� ��&& ( *order )( &insert_priority, &highest_ready->Node.Chain )
(gdb) 
0x00119e18	955	 �� �� �� ��&& ( *order )( &insert_priority, &highest_ready->Node.Chain )
(gdb) 
0x00119e1a	955	 �� �� �� ��&& ( *order )( &insert_priority, &highest_ready->Node.Chain )
(gdb) 
0x00119e1c	955	 �� �� �� ��&& ( *order )( &insert_priority, &highest_ready->Node.Chain )
(gdb) 
0x00119e1e	955	 �� �� �� ��&& ( *order )( &insert_priority, &highest_ready->Node.Chain )
(gdb) 
986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) 
0x00119e94	986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) 
0x00119e98	986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) 
0x00119e9a	986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) 
0x00119e9e	986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) ni
0x00119ea2	986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) 
0x00119ea4	986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) 
0x00119ea6	986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) 
0x00119eaa	986	 �� ��action = _Scheduler_Try_to_schedule_node(
(gdb) 
993	 �� ��if ( action == SCHEDULER_TRY_TO_SCHEDULE_DO_SCHEDULE ) {
(gdb) 
0x00119eae	993	 �� ��if ( action == SCHEDULER_TRY_TO_SCHEDULE_DO_SCHEDULE ) {
(gdb) 
0x00119eb0	993	 �� ��if ( action == SCHEDULER_TRY_TO_SCHEDULE_DO_SCHEDULE ) {
(gdb) 
996	 �� �� ��_Scheduler_SMP_Preempt(
(gdb) 
0x00119eb4	996	 �� �� ��_Scheduler_SMP_Preempt(
(gdb) 
0x00119eb6	996	 �� �� ��_Scheduler_SMP_Preempt(
(gdb) 
0x00119eb8	996	 �� �� ��_Scheduler_SMP_Preempt(
(gdb) 
0x00119eba	996	 �� �� ��_Scheduler_SMP_Preempt(
(gdb) 
1003	 �� �� ��( *insert_ready )( context, node, insert_priority );
(gdb) 
0x00119ec2	1003	 �� �� ��( *insert_ready )( context, node, insert_priority );
(gdb) 
0x00119ec4	1003	 �� �� ��( *insert_ready )( context, node, insert_priority );
(gdb) 
0x00119ec6	1003	 �� �� ��( *insert_ready )( context, node, insert_priority );
(gdb) 
0x00119ec8	1003	 �� �� ��( *insert_ready )( context, node, insert_priority );
(gdb) 
0x00119eca	1003	 �� �� ��( *insert_ready )( context, node, insert_priority );
(gdb) 
0x00119ecc	1003	 �� �� ��( *insert_ready )( context, node, insert_priority );
(gdb) 
1004	 �� �� ��( *move_from_ready_to_scheduled )( context, highest_ready );
(gdb) 
0x00119ed0	1004	 �� �� ��( *move_from_ready_to_scheduled )( context, highest_ready );
(gdb) 
0x00119ed2	1004	 �� �� ��( *move_from_ready_to_scheduled )( context, highest_ready );
(gdb) 
0x00119ed4	1004	 �� �� ��( *move_from_ready_to_scheduled )( context, highest_ready );
(gdb) 
1006	 �� �� ��idle = _Scheduler_Release_idle_thread(
(gdb) 
0x00119eda	1006	 �� �� ��idle = _Scheduler_Release_idle_thread(
(gdb) 
0x00119ede	1006	 �� �� ��idle = _Scheduler_Release_idle_thread(
(gdb) 
0x00119ee0	1006	 �� �� ��idle = _Scheduler_Release_idle_thread(
(gdb) 
0x00119ee2	1006	 �� �� ��idle = _Scheduler_Release_idle_thread(
(gdb) 
0x00119ee6	1006	 �� �� ��idle = _Scheduler_Release_idle_thread(
(gdb) 
1011	 �� �� ��return ( idle == NULL );
(gdb) 
0x00119eea	1011	 �� �� ��return ( idle == NULL );
(gdb) 
0x00119eec	1011	 �� �� ��return ( idle == NULL );
(gdb) 
0x00119eee	1011	 �� �� ��return ( idle == NULL );
(gdb) 
0x00119ef0	1011	 �� �� ��return ( idle == NULL );
(gdb) 
0x00119ef2	1011	 �� �� ��return ( idle == NULL );
(gdb) 
0x00119ef4	1011	 �� �� ��return ( idle == NULL );
(gdb) 
1039	}
(gdb) 
0x00119f4e	1039	}
(gdb) 
0x00119f50	1039	}
(gdb) 
0x00119f52	1039	}
(gdb) 
0x0011b1de in _Scheduler_strong_APA_Enqueue_scheduled (context=0x200828 <_Configuration_Scheduler_strong_APA_dflt>, node=0x201548 <_RTEMS_tasks_Objects+1888>, insert_priority=257) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/schedulerstrongapa.c:687
687	 ��return _Scheduler_SMP_Enqueue_scheduled(
(gdb) 
699	}
(gdb) 
0x0011b1e2	699	}
(gdb) 
0x0011b1e4	699	}
(gdb) 
0x0011b1e6	699	}
(gdb) 
_Scheduler_SMP_Yield (context=0x200828 <_Configuration_Scheduler_strong_APA_dflt>, thread=0x2012f0 <_RTEMS_tasks_Objects+1288>, node=0x201548 <_RTEMS_tasks_Objects+1888>, extract_from_ready=0x11ad29 <_Scheduler_strong_APA_Extract_from_ready>, enqueue=0x11b0ab <_Scheduler_strong_APA_Enqueue>, enqueue_scheduled=0x11b17f <_Scheduler_strong_APA_Enqueue_scheduled>) at /home/richi/quick-start/src/rtems/cpukit/include/rtems/score/schedulersmpimpl.h:1388
1388	 �� ��needs_help = false;
(gdb) 
0x0011a2e4	1388	 �� ��needs_help = false;
(gdb) 
0x0011a2e6	1388	 �� ��needs_help = false;
(gdb) 
1397	 ��if ( needs_help ) {
(gdb) 
0x0011a30e	1397	 ��if ( needs_help ) {
(gdb) 
0x0011a310	1397	 ��if ( needs_help ) {
(gdb) 
1400	}
(gdb) 
0x0011a31a	1400	}
(gdb) 
0x0011a31c	1400	}
(gdb) 
0x0011a31e	1400	}
(gdb) 
_Scheduler_strong_APA_Yield (scheduler=0x121e48 <_Scheduler_Table>, thread=0x2012f0 <_RTEMS_tasks_Objects+1288>, node=0x201548 <_RTEMS_tasks_Objects+1888>) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/schedulerstrongapa.c:757
757	}
(gdb) 
0x0011b2ce	757	}
(gdb) 
0x0011b2d0	757	}
(gdb) 
0x0011b2d2	757	}
(gdb) 
_Scheduler_Yield (the_thread=0x2012f0 <_RTEMS_tasks_Objects+1288>) at /home/richi/quick-start/src/rtems/cpukit/include/rtems/score/schedulerimpl.h:230
230	 ��_Scheduler_Release_critical( scheduler, &lock_context );
(gdb) 
0x00112166	230	 ��_Scheduler_Release_critical( scheduler, &lock_context );
(gdb) 
0x00112168	230	 ��_Scheduler_Release_critical( scheduler, &lock_context );
(gdb) 
0x0011216a	230	 ��_Scheduler_Release_critical( scheduler, &lock_context );
(gdb) 
231	}
(gdb) 
0x00112170	231	}
(gdb) 
0x00112172	231	}
(gdb) 
0x00112174	231	}
(gdb) 
_Thread_Yield (executing=0x2012f0 <_RTEMS_tasks_Objects+1288>) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/threadyield.c:40
40	 ��_Thread_State_release( executing, &lock_context );
(gdb) 
0x001121a4	40	 ��_Thread_State_release( executing, &lock_context );
(gdb) 
0x001121a6	40	 ��_Thread_State_release( executing, &lock_context );
(gdb) 
0x001121a8	40	 ��_Thread_State_release( executing, &lock_context );
(gdb) 
41	}
(gdb) 
0x001121ae	41	}
(gdb) 
0x001121b0	41	}
(gdb) 
0x001121b2	41	}
(gdb) 
0x0010b728 in rtems_task_wake_after (ticks=0) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/rtems/src/taskwakeafter.c:40
40	 �� �� ��_Thread_Yield( executing );
(gdb) 
46	 ��_Thread_Dispatch_direct( cpu_self );
(gdb) 
0x0010b748	46	 ��_Thread_Dispatch_direct( cpu_self );


More information about the devel mailing list