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