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