<div dir="ltr">Hi,<div><br></div><div>This mail is in continuation of <a href="https://lists.rtems.org/pipermail/devel/2020-August/061446.html">https://lists.rtems.org/pipermail/devel/2020-August/061446.html</a>. </div><div><br></div><div>Right after the check_cpu_allocation test for the last action gets passed (code <a href="https://github.com/richidubey/rtems/blob/6e455a5d77417dcbc2f00330ebc37a7a143c5384/testsuites/smptests/smpstrongapa01/init.c#L125">here</a>), _ARMV4_Exception_interrupt gets called when the timer function finishes.</div><div><br></div><div>But soon thereafter _ARMV4_Exception_data_abort_default occurs. Why does that happen? I believe it might have something to do with the fact that T0 (the task that was earlier running on processor 0 and was responsible for running the timer function and later returning to Init) has changed its processor to processor 2 (as we know since the check_cpu_allocation passed).</div><div><br></div><div>Gdb trace is:</div><div>-------------------------------------------------------------------------------------------------------------------------</div><div><br>Thread 1 hit Breakpoint 7, check_cpu_allocations (ctx=0x20055c <test_instance>, action=0x11fb7c <test_actions+260>) at /home/richi/quick-start/src/rtems/c/src/../../testsuites/smptests/smpstrongapa01/init.c:194<br>(gdb) print *action<br>$57 = {<br>  kind = KIND_SET_PRIORITY,<br>  index = T2,<br>  data = {<br>    priority = 4,<br>    cpu_set = 0<br>  },<br>  expected_cpu_allocations = "\002\001"<br>}<br>0x00100dd6  194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100dd8     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6a     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6c     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6e     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>199        e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100ddc   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100dde   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de0   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de2   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de4   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>200      c = _Per_CPU_Get_by_index(i);<br>(gdb) p e<br>$39 = T2<br>(gdb) ni<br>0x00100de8  200         c = _Per_CPU_Get_by_index(i);<br>(gdb) <br>0x00100dec 200         c = _Per_CPU_Get_by_index(i);<br>(gdb) <br>201            h = c->heir;<br>(gdb) <br>0x00100df0       201         h = c->heir;<br>(gdb) p c<br>$40 = (const Per_CPU_Control *) 0x203580 <_Per_CPU_Information><br>(gdb) ni<br>0x00100df2   201         h = c->heir;<br>(gdb) <br>203          if (e != IDLE) {<br>(gdb) p h<br>$41 = (const Thread_Control *) 0x2025e8 <_RTEMS_tasks_Objects+3864><br>(gdb) ni<br>0x00100df6      203         if (e != IDLE) {<br>(gdb) <br>0x00100df8      203         if (e != IDLE) {<br>(gdb) <br>204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100dfc 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) p h->Object.id<br>$42 = 167837700<br>(gdb) p ctx->task_ids[e]<br>$43 = 167837700<br>(gdb) ni<br>0x00100dfe       204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e00 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e02 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e04 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e08 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e0a 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>194          for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e66     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e68     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6a     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6c     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6e     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>199        e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100ddc   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100dde   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de0   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de2   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de4   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>200      c = _Per_CPU_Get_by_index(i);<br>(gdb) ni<br>0x00100de8       200         c = _Per_CPU_Get_by_index(i);<br>(gdb) <br>0x00100dec 200         c = _Per_CPU_Get_by_index(i);<br>(gdb) <br>201            h = c->heir;<br>(gdb) <br>0x00100df0       201         h = c->heir;<br>(gdb) <br>0x00100df2       201         h = c->heir;<br>(gdb) <br>203          if (e != IDLE) {<br>(gdb) <br>0x00100df6      203         if (e != IDLE) {<br>(gdb) <br>0x00100df8      203         if (e != IDLE) {<br>(gdb) <br>204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) p c<br>$44 = (const Per_CPU_Control *) 0x203780 <_Per_CPU_Information+512><br>(gdb) p _Per_CPU_Get_index( c )<br>$45 = 1<br>(gdb) ni<br>0x00100dfc       204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) p e<br>$46 = T1<br>(gdb) p h->Object.id<br>$47 = 167837699<br>(gdb) p ctx->task_ids[e]<br>$48 = 167837699<br>(gdb) ni<br>0x00100dfe  204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e00 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e02 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e04 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e08 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e0a 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>194          for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e66     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e68     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6a     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6c     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6e     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>199        e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100ddc   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100dde   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de0   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de2   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>0x00100de4   199         e = action->expected_cpu_allocations[i];<br>(gdb) <br>200      c = _Per_CPU_Get_by_index(i);<br>(gdb) p e<br>$49 = T0<br>(gdb) p c<br>$50 = (const Per_CPU_Control *) 0x203780 <_Per_CPU_Information+512><br>(gdb) ni<br>0x00100de8    200         c = _Per_CPU_Get_by_index(i);<br>(gdb) <br>0x00100dec 200         c = _Per_CPU_Get_by_index(i);<br>(gdb) <br>201            h = c->heir;<br>(gdb) <br>0x00100df0       201         h = c->heir;<br>(gdb) <br>0x00100df2       201         h = c->heir;<br>(gdb) <br>203          if (e != IDLE) {<br>(gdb) <br>0x00100df6      203         if (e != IDLE) {<br>(gdb) p _Per_CPU_Get_index( c )<br>$51 = 2<br>(gdb) ni<br>0x00100df8  203         if (e != IDLE) {<br>(gdb) <br>204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100dfc 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) p h->Object.id<br>$52 = 167837698<br>(gdb) p ctx->task_ids[e]<br>$53 = 167837698<br>(gdb) ni<br>0x00100dfe       204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e00 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e02 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e04 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e08 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>0x00100e0a 204           rtems_test_assert(h->Object.id == ctx->task_ids[e]);<br>(gdb) <br>194          for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e66     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e68     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6a     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6c     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>0x00100e6e     194       for (i = 0; i < CPU_COUNT; ++i) {<br>(gdb) <br>209    }<br>(gdb) <br>0x00100e72   209     }<br>(gdb) <br>0x00100e74   209     }<br>(gdb) <br>0x00100e76   209     }<br>(gdb) <br>timer (id=302055425, arg=0x20055c <test_instance>) at /home/richi/quick-start/src/rtems/c/src/../../testsuites/smptests/smpstrongapa01/init.c:260<br>260     sc = rtems_timer_reset(id);<br>(gdb) ni<br>0x00100fe0 260         sc = rtems_timer_reset(id);<br>(gdb) <br>0x00100fe4   260         sc = rtems_timer_reset(id);<br>(gdb) <br>261      rtems_test_assert(sc == RTEMS_SUCCESSFUL);<br>(gdb) ni<br>0x00100fe8  261         rtems_test_assert(sc == RTEMS_SUCCESSFUL);<br>(gdb) <br>0x00100fea    261         rtems_test_assert(sc == RTEMS_SUCCESSFUL);<br>(gdb) <br>269   }<br>(gdb) <br>0x00101084   269     }<br>(gdb) <br>0x00101086   269     }<br>(gdb) <br>0x00101088   269     }<br>(gdb) <br>_Timer_Routine_adaptor (the_watchdog=0x2005e8 <_Timer_Objects+16>) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/rtems/src/timercreate.c:49<br>49      }<br>(gdb) <br>0x00108f86   49      }<br>(gdb) <br>0x00108f88   49      }<br>(gdb) <br>0x00108f8a   49      }<br>(gdb) <br>_Watchdog_Do_tickle (header=0x2036a8 <_Per_CPU_Information+296>, first=0x2005e8 <_Timer_Objects+16>, now=170, lock=0x203698 <_Per_CPU_Information+280>, lock_context=0x207e6c <_ISR_Stack_area_begin+2860>) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/watchdogtick.c:45<br>45        _ISR_lock_ISR_disable_and_acquire( lock, lock_context );<br>(gdb) <br>0x00113dfa   45            _ISR_lock_ISR_disable_and_acquire( lock, lock_context );<br>(gdb) <br>0x00113dfc   45            _ISR_lock_ISR_disable_and_acquire( lock, lock_context );<br>(gdb) <br>0x00113dfe   45            _ISR_lock_ISR_disable_and_acquire( lock, lock_context );<br>(gdb) <br>0x00113e00   45            _ISR_lock_ISR_disable_and_acquire( lock, lock_context );<br>(gdb) <br><br>50     first = _Watchdog_Header_first( header );<br>(gdb) <br><br>0x00113e06   50          first = _Watchdog_Header_first( header );<br>(gdb) <br>0x00113e0a     50          first = _Watchdog_Header_first( header );<br>(gdb) <br>51       } while ( first != NULL );<br>(gdb) <br><br>0x00113e0e     51        } while ( first != NULL );<br>(gdb) <br>0x00113e10       51        } while ( first != NULL );<br>(gdb) <br>35           if ( first->expire <= now ) {<br>(gdb) <br>0x00113db4   35          if ( first->expire <= now ) {<br>(gdb) <br>0x00113db8   35          if ( first->expire <= now ) {<br>(gdb) <br>0x00113dbc   35          if ( first->expire <= now ) {<br>(gdb) <br>0x00113dbe   35          if ( first->expire <= now ) {<br>(gdb) <br><br>0x00113dc0 35          if ( first->expire <= now ) {<br>(gdb) <br>0x00113dc2   35          if ( first->expire <= now ) {<br>(gdb) <br>47         break;<br>(gdb) <br>52     }<br>(gdb) <br>0x00113e18   52      }<br>(gdb) <br>0x00113e1a   52      }<br>(gdb) <br>0x00113e1c   52      }<br>(gdb) <br>_Watchdog_Tick (cpu=0x203580 <_Per_CPU_Information>) at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/watchdogtick.c:86<br>86     header = &cpu->Watchdog.Header[ PER_CPU_WATCHDOG_MONOTONIC ];<br>(gdb) <br>0x00113eae     86        header = &cpu->Watchdog.Header[ PER_CPU_WATCHDOG_MONOTONIC ];<br>(gdb) <br>0x00113eb2     86        header = &cpu->Watchdog.Header[ PER_CPU_WATCHDOG_MONOTONIC ];<br>(gdb) <br>87       first = _Watchdog_Header_first( header );<br>(gdb) <br>0x00113eb6        87        first = _Watchdog_Header_first( header );<br>(gdb) <br><br>0x00113eba      87        first = _Watchdog_Header_first( header );<br>(gdb) <br><br>89        if ( first != NULL ) {<br>(gdb) <br>0x00113ebe   89        if ( first != NULL ) {<br>(gdb) <br>0x00113ec0   89        if ( first != NULL ) {<br>(gdb) <br>100    header = &cpu->Watchdog.Header[ PER_CPU_WATCHDOG_REALTIME ];<br>(gdb) <br>0x00113ef2      100       header = &cpu->Watchdog.Header[ PER_CPU_WATCHDOG_REALTIME ];<br>(gdb) <br>0x00113ef6      100       header = &cpu->Watchdog.Header[ PER_CPU_WATCHDOG_REALTIME ];<br>(gdb) <br>101       first = _Watchdog_Header_first( header );<br>(gdb) <br>0x00113efa        101       first = _Watchdog_Header_first( header );<br>(gdb) <br>0x00113efe        101       first = _Watchdog_Header_first( header );<br>(gdb) <br>103         if ( first != NULL ) {<br>(gdb) <br>0x00113f02   103       if ( first != NULL ) {<br>(gdb) <br>0x00113f04   103       if ( first != NULL ) {<br>(gdb) <br>114    _ISR_lock_Release_and_ISR_enable( &cpu->Watchdog.Lock, &lock_context );<br>(gdb) <br>0x00113f36       114       _ISR_lock_Release_and_ISR_enable( &cpu->Watchdog.Lock, &lock_context );<br>(gdb) <br>0x00113f3a       114       _ISR_lock_Release_and_ISR_enable( &cpu->Watchdog.Lock, &lock_context );<br>(gdb) <br>0x00113f3e       114       _ISR_lock_Release_and_ISR_enable( &cpu->Watchdog.Lock, &lock_context );<br>(gdb) <br>0x00113f40       114       _ISR_lock_Release_and_ISR_enable( &cpu->Watchdog.Lock, &lock_context );<br>(gdb) <br>0x00113f42       114       _ISR_lock_Release_and_ISR_enable( &cpu->Watchdog.Lock, &lock_context );<br>(gdb) <br>116        _Scheduler_Tick( cpu );<br>(gdb) <br>0x00113f48  116       _Scheduler_Tick( cpu );<br>(gdb) <br>117 }<br>(gdb) <br>0x00113f4e   117     }<br>(gdb) <br>0x00113f50   117     }<br>(gdb) <br>0x00113f52   117     }<br>(gdb) <br>_Timecounter_Tick () at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/src/kern_tc.c:2139<br><br><br>2139      }<br>(gdb) <br>0x00116994   2139    }<br>(gdb) <br><br>0x00116996 2139    }<br>(gdb) <br>0x00116998   2139    }<br>(gdb) <br>rtems_timecounter_tick () at /home/richi/quick-start/src/rtems/cpukit/include/rtems/timecounter.h:86<br>86     }<br>(gdb) <br>0x0010155c   86      }<br>(gdb) <br>0x00101864 in Clock_driver_timecounter_tick () at /home/richi/quick-start/src/rtems/bsps/arm/include/../../shared/dev/clock/clockimpl.h:93<br>93             rtems_timecounter_tick();<br>(gdb) <br>87    for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101882   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101884   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101886   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101888   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x0010188a   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br><br>(gdb) <br>0x0010188c 87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br><br>90     cpu = _Per_CPU_Get_by_index( cpu_index );<br>(gdb) <br>0x0010184e     90          cpu = _Per_CPU_Get_by_index( cpu_index );<br>(gdb) <br>0x00101852     90          cpu = _Per_CPU_Get_by_index( cpu_index );<br>(gdb) <br>92         if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br><br>0x00101856  92          if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br>0x0010185a    92          if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br>0x0010185c    92          if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br><br>0x0010185e  92          if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br>94        } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x0010186a     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x0010186c     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x0010186e     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x00101870     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x00101874     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x00101876     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x00101878     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>95           _Watchdog_Tick( cpu );<br>(gdb) <br><br>0x0010187c   95            _Watchdog_Tick( cpu );<br>(gdb) <br><br>87     for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101882   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101884   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101886   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101888   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x0010188a   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x0010188c   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>90       cpu = _Per_CPU_Get_by_index( cpu_index );<br>(gdb) <br>0x0010184e     90          cpu = _Per_CPU_Get_by_index( cpu_index );<br>(gdb) <br>0x00101852     90          cpu = _Per_CPU_Get_by_index( cpu_index );<br>(gdb) <br>92         if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br>0x00101856    92          if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br>0x0010185a    92          if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br>0x0010185c    92          if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br>0x0010185e    92          if ( _Per_CPU_Is_boot_processor( cpu ) ) {<br>(gdb) <br>94        } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x0010186a     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x0010186c     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x0010186e     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x00101870     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x00101874     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x00101876     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>0x00101878     94          } else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {<br>(gdb) <br>95           _Watchdog_Tick( cpu );<br>(gdb) <br>0x0010187c     95            _Watchdog_Tick( cpu );<br>(gdb) <br>87       for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101882   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101884   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101886   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x00101888   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>0x0010188a   87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br><br>0x0010188c 87        for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {<br>(gdb) <br>101  }<br>(gdb) <br>0x00101890   101     }<br>(gdb) <br>0x00101892   101     }<br>(gdb) <br>0x00101894   101     }<br>(gdb) <br>Clock_isr (arg=0x0) at /home/richi/quick-start/src/rtems/bsps/arm/include/../../shared/dev/clock/clockimpl.h:153<br>153              if (_SMP_Get_processor_maximum() == 1) {<br>(gdb) <br>0x0010190e   153           if (_SMP_Get_processor_maximum() == 1) {<br>(gdb) <br>0x00101910   153           if (_SMP_Get_processor_maximum() == 1) {<br>(gdb) <br><br>0x00101912 153           if (_SMP_Get_processor_maximum() == 1) {<br>(gdb) <br>168        Clock_driver_support_at_tick();<br>(gdb) <br>195   }<br>(gdb) <br>0x00101974   195     }<br>(gdb) <br>0x00101976   195     }<br>(gdb) <br>0x00101978   195     }<br>(gdb) <br>bsp_interrupt_handler_dispatch (vector=27) at /home/richi/quick-start/src/rtems/bsps/include/bsp/irq-generic.h:274<br>274            e = e->next;<br>(gdb) <br>0x0010219a    274           e = e->next;<br>(gdb) <br>0x0010219c    274           e = e->next;<br>(gdb) <br>275       } while (e != NULL);<br>(gdb) <br>0x001021a0  275         } while (e != NULL);<br>(gdb) <br>0x001021a2  275         } while (e != NULL);<br>(gdb) <br>279 }<br>(gdb) <br>279  }<br>(gdb) <br>0x001021ae   279     }<br>(gdb) <br>0x001021b0   279     }<br>(gdb) <br>0x001021b2   279     }<br>(gdb) <br>bsp_interrupt_dispatch () at /home/richi/quick-start/src/rtems/c/src/lib/libbsp/arm/realview-pbx-a9/../../../../../../bsps/arm/shared/irq/irq-gic.c:68<br>68       _ARMV4_Status_restore(psr);<br>(gdb) <br>0x001021ee   68          _ARMV4_Status_restore(psr);<br>(gdb) <br><br>70     cpuif->icceoir = icciar;<br>(gdb) <br>0x001021f4   70          cpuif->icceoir = icciar;<br>(gdb) <br>0x001021f6   70          cpuif->icceoir = icciar;<br>(gdb) <br>72   }<br>(gdb) <br><br>0x001021fa 72      }<br>(gdb) <br><br>0x001021fc 72      }<br>(gdb) <br>0x001021fe   72      }<br>(gdb) <br>_ARMV4_Exception_interrupt () at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/cpu/arm/arm_exc_interrupt.S:134<br>134             ldr     r0, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL]<br>(gdb) <br>135             ldrb    r1, [SELF_CPU_CONTROL, #PER_CPU_DISPATCH_NEEDED]<br>(gdb) <br><br>136         ldr     r2, [SELF_CPU_CONTROL, #PER_CPU_ISR_DISPATCH_DISABLE]<br>(gdb) <br>137              ldr     r3, [SELF_CPU_CONTROL, #PER_CPU_ISR_NEST_LEVEL]<br>(gdb) <br>140            mov     sp, NON_VOLATILE_SCRATCH<br>(gdb) <br>_ARMV4_Exception_interrupt () at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/cpu/arm/arm_exc_interrupt.S:143<br>143              mrs     NON_VOLATILE_SCRATCH, CPSR<br>(gdb) <br>146         eor     r1, r0<br>(gdb) <br>147             sub     r0, #1<br>(gdb) <br>148             orr     r1, r0<br>(gdb) <br>149             orr     r1, r2<br>(gdb) <br>150             sub     r3, #1<br>(gdb) <br>153             str     r0, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL]<br>(gdb) <br>154             str     r3, [SELF_CPU_CONTROL, #PER_CPU_ISR_NEST_LEVEL]<br>(gdb) <br>160            cmp     r1, #0<br>(gdb) <br>161             bne     .Lthread_dispatch_done<br>(gdb) <br>164             mrs     NON_VOLATILE_SCRATCH, CPSR<br>(gdb) <br><br>169               mov     r0, #1<br>(gdb) <br><br>170           str     r0, [SELF_CPU_CONTROL, #PER_CPU_ISR_DISPATCH_DISABLE]<br>(gdb) <br><br>171            str     r0, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL]<br>(gdb) <br>174             mov     r0, SELF_CPU_CONTROL<br>(gdb) <br>175               mov     r1, NON_VOLATILE_SCRATCH<br>(gdb) <br><br>176         mov     r2, #0x80<br>(gdb) <br><br>177                bic     r1, r2<br>(gdb) <br>178             BLX_TO_THUMB_1  _Thread_Do_dispatch<br>(gdb) <br><br><br>Thread 1 hit Breakpoint 2, _ARMV4_Exception_data_abort_default () at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/cpu/arm/armv4-exception-default.S:70<br><br>70             sub     sp, #MORE_CONTEXT_SIZE<br>(gdb) <br><br>71            stmdb   sp!, {r0-r12}<br>(gdb) <br><br>72             mov     r4, #4<br>(gdb) <br>74              b       save_more_context<br>(gdb) <br>save_more_context () at /home/richi/quick-start/src/rtems/c/src/../../cpukit/score/cpu/arm/armv4-exception-default.S:112<br>112                mov     r2, lr<br>(gdb) <br>113             mrs     r3, spsr<br>(gdb) <br>114           mrs     r7, cpsr<br>(gdb) <br><br>115         orr     r5, r3, #ARM_PSR_I<br>(gdb) <br><br>116               bic     r5, #ARM_PSR_T<br>(gdb) <br>117             msr     cpsr, r5<br></div><div>----------------------------------------------------------------------------------------------------------------</div><div><br></div><div>Please advise on what I should do? Is there a way to let the BSP know that the CPU related to the timer has changed?</div><div><br></div><div>Thanks,</div><div>Richi.</div></div>