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 >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel