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 <richidu...@gmail.com> wrote:

> Okay, I'm gonna do that. Thanks for the help.
>
> On Thu, Oct 8, 2020 at 9:47 PM Gedare Bloom <ged...@rtems.org> wrote:
>
>> On Thu, Oct 8, 2020 at 9:38 AM Richi Dubey <richidu...@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@rtems.org
>> > http://lists.rtems.org/mailman/listinfo/devel
>>
>
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 );
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to