<div dir="ltr">Hi,<div><br></div><div>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:</div><div><br></div> sp02.exe<br> sp16.exe<br> sp30.exe<br> sp31.exe<br> sp37.exe<br> sp42.exe<br> spfatal29.exe<br><div> tm24.exe</div><div><br></div><div>On executing sp16.exe, I get the following output:</div><div><br></div><div>*** BEGIN OF TEST SP 16 ***<br>*** TEST VERSION: 5.0.0.61ccb9c05dcd695114541960aa6bfc1315f30514-modified<br>*** TEST STATE: EXPECTED_PASS<br>*** TEST BUILD: RTEMS_NETWORKING RTEMS_POSIX_API RTEMS_SMP<br>*** TEST TOOLS: 7.5.0 20191114 (RTEMS 5, RSB 5 (0b7e87143b76), Newlib fbaa096)<br>TA1 - rtems_region_ident - rnid => 32010001<br>TA1 - rtems_region_get_segment - wait on 1000 byte segment from region 2<br>TA1 - got segment from region 2 - 0x00000040<br>TA1 - rtems_region_get_segment - wait on 3K segment from region 3<br>TA1 - got segment from region 3 - 0x00000080<br>TA1 - rtems_region_get_segment - get 3080 byte segment from region 1 - NO_WAIT<br>TA1 - got segment from region 1 - 0x00000040<br>TA1 - rtems_task_wake_after - yield processor<br>TA2 - rtems_region_get_segment - wait on 2K segment from region 1<br>TA1 - rtems_region_return_segment - return segment to region 1 - 0x00000040<br>TA1 - rtems_region_get_segment - wait 10 seconds for 3K segment from region 1<br>TA2 - got segment from region 1 - 0x00000040<br>TA2 - rtems_region_return_segment - return segment to region 1 - 0x00000040<br>TA2 - rtems_task_set_priority - make self highest priority task<br>TA2 - rtems_region_get_segment - wait on 3750 byte segment<br>TA1 - got segment from region 1 - 0x00000040<br>TA1 - rtems_region_return_segment - return segment to region 2 - 0x00000040<br>TA2 - got segment from region 2 - 0x00000040<br>TA2 - rtems_region_return_segment - return segment to region 2 - 0x00000040<br>TA2 - rtems_task_exit<br>TA1 - rtems_task_wake_after - yield processor<br>TA3 - rtems_region_get_segment - wait on 3750 byte segment from region 2<br>TA3 - got segment from region 2 - 0x00000040<br>TA3 - rtems_region_get_segment - wait on 2K segment from region 3<br>TA1 - rtems_task_delete - delete TA3<br>TA1 - rtems_task_wake_after - yield processor<br>TA4 - rtems_region_get_segment - wait on 1.5K segment from region 1<br>TA5 - rtems_region_get_segment - wait on 1.5K segment from region 1<br>TA1 - rtems_region_return_segment - return segment to region 1 - 0x00000040<br>TA1 - rtems_task_wake_after - yield processor<br>TA4 - got and returned 0x00000040<br>TA5 - got and returned 0x000006c0<br>TA1 - rtems_region_get_segment - wait 10 seconds for 3K segment from region 1<br>TA1 - got segment from region 1 - 0x00000040<br>TA1 - rtems_task_wake_after - yield processor<br>TA4 - rtems_region_get_segment - wait on 3K segment from region 1<br>TA5 - rtems_region_get_segment - wait on 3K segment from region 1<br>TA1 - rtems_task_delete - delete TA4<br>TA1 - rtems_region_return_segment - return segment to region 1 - 0x00000040<br>TA1 - rtems_task_wake_after - yield processor<br>TA5 - got segment from region 1 - 0x00000040<br>TA5 - rtems_region_return_segment - return segment to region 1 - 0x00000040<br>TA5 - rtems_task_exit<br></div><div><br></div><div>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: </div><div><br></div><div>Clock_isr (arg=0x0) at /home/richi/quick-start/src/rtems/bsps/arm/include/../../shared/dev/clock/clockimpl.h:155<br>155              _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x001042fa   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x001042fc   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x001042fe   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br><br>0x00104302 155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104304   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104306   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x0010430a   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>154          while (<br>(gdb) <br>0x0010430e 154             while (<br>(gdb) <br>155                  _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104314   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104316   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104318   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x0010431c   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x0010431e   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104322   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104324   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>159            _Timecounter_Acquire(&lock_context);<br>(gdb) <br>0x001042d2     159               _Timecounter_Acquire(&lock_context);<br>(gdb) <br>0x001042d4     159               _Timecounter_Acquire(&lock_context);<br>(gdb) <br>0x001042d8     159               _Timecounter_Acquire(&lock_context);<br>(gdb) <br>0x001042dc     159               _Timecounter_Acquire(&lock_context);<br>(gdb) <br>162                (*tc->tc_get_timecount)(tc),<br>(gdb) <br>0x001042e2   162                 (*tc->tc_get_timecount)(tc),<br>(gdb) <br>160            _Timecounter_Tick_simple(<br>(gdb) <br>0x001042e6    160               _Timecounter_Tick_simple(<br>(gdb) <br>0x001042e8    160               _Timecounter_Tick_simple(<br>(gdb) <br>0x001042ea    160               _Timecounter_Tick_simple(<br>(gdb) <br>0x001042ee    160               _Timecounter_Tick_simple(<br>(gdb) <br>0x001042f0    160               _Timecounter_Tick_simple(<br>(gdb) <br>0x001042f2    160               _Timecounter_Tick_simple(<br>(gdb) <br><br>155           _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br><br>0x001042fa 155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x001042fc   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x001042fe   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br><br>0x00104302 155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104304   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104306   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x0010430a   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>154          while (<br>(gdb) <br>0x0010430e 154             while (<br>(gdb) <br>155                  _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104314   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104316   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104318   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x0010431c   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x0010431e   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104322   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>0x00104324   155               _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle<br>(gdb) <br>159            _Timecounter_Acquire(&lock_context);<br>(gdb) <br>0x001042d2     159               _Timecounter_Acquire(&lock_context);<br>(gdb) <br>0x001042d4     159               _Timecounter_Acquire(&lock_context);<br>(gdb) <br>0x001042d8     159               _Timecounter_Acquire(&lock_context);<br>(gdb) <br>0x001042dc     159               _Timecounter_Acquire(&lock_context);<br>(gdb) <br><br>162              (*tc->tc_get_timecount)(tc),<br>(gdb) <br>0x001042e2   162                 (*tc->tc_get_timecount)(tc),<br></div><div><br></div><div><br></div><div>and so on...</div><div><br></div><div>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. </div><div><br></div><div>How do I progress further? Please let me know.</div><div><br></div><div>Thanks,</div><div>Richi.</div><div><br></div><div><br></div></div>