Script File : scenarios/cpus4_mode_case2.scen verbose : 1 ==> 1: # ==> 2: # Show how having a non-preemptive task can create a ==> 3: # priority inversion ==> 4: # ==> 5: rtems_init 4 Thread Heir: 0x09010001 priority=255 Thread Executing: 0x09010001 priority=255 ==> 6: task_create -p smp1 4 Creating task with: Preemption: no Timeslicing: no Task (smp1) created: id=0x0a010001, priority=4 Task (smp1) starting: id=0x0a010001, priority=4 Thread Heir: 0x0a010001 priority=4 Thread Executing: 0x0a010001 priority=4 ==> 7: task_create -p smp2 5 Creating task with: Preemption: no Timeslicing: no Task (smp2) created: id=0x0a010002, priority=5 Task (smp2) starting: id=0x0a010002, priority=5 ==> 8: task_create -p smp3 4 Creating task with: Preemption: no Timeslicing: no Task (smp3) created: id=0x0a010003, priority=4 Task (smp3) starting: id=0x0a010003, priority=4 ==> 9: task_create -p smp4 4 Creating task with: Preemption: no Timeslicing: no Task (smp4) created: id=0x0a010004, priority=4 Task (smp4) starting: id=0x0a010004, priority=4 ==> 10: dispatch === Invoke Thread Dispatch on CPU 1 Thread Heir: 0x0a010002 priority=5 Thread Executing: 0x09010002 priority=255 Thread Executing: 0x0a010002 priority=5 === Invoke Thread Dispatch on CPU 2 Thread Heir: 0x0a010003 priority=4 Thread Executing: 0x09010003 priority=255 Thread Executing: 0x0a010003 priority=4 === Invoke Thread Dispatch on CPU 3 Thread Heir: 0x0a010004 priority=4 Thread Executing: 0x09010004 priority=255 Thread Executing: 0x0a010004 priority=4 ==> 11: # GOAL: 0x0a010001 - 0x0a010004 are heir and executing ==> 12: # GOAL: on CPUs 0 - 3 respectively ==> 13: cpus === CPU Status EXECUTING / HEIR / IDLE / SWITCH NEEDED CPU 0: 0x0a010001 @ 4 / 0x0a010001 @ 4 / 0x09010001 @255 false CPU 1: 0x0a010002 @ 5 / 0x0a010002 @ 5 / 0x09010002 @255 false CPU 2: 0x0a010003 @ 4 / 0x0a010003 @ 4 / 0x09010003 @255 false CPU 3: 0x0a010004 @ 4 / 0x0a010004 @ 4 / 0x09010004 @255 false === End of Ready Set of Threads ==> 14: ==> 15: task_create smp5 3 Creating task with: Preemption: yes Timeslicing: no Thread Heir: 0x0a010001 priority=4 Thread Executing: 0x0a010001 priority=4 Task (smp5) created: id=0x0a010005, priority=3 Task (smp5) starting: id=0x0a010005, priority=3 ==> 16: dispatch ==> 17: # GOAL: 0x0a010001 - 0x0a010004 are executing on CPUs 0 - 3. ==> 18: # GOAL: All are also heir EXCEPT 0x0a010005 is heir on CPU 1. ==> 19: # GOAL: **** SHOWS INVERSION - CPU 1 has NO PREEMPT TASK **** ==> 20: cpus === CPU Status EXECUTING / HEIR / IDLE / SWITCH NEEDED CPU 0: 0x0a010001 @ 4 / 0x0a010001 @ 4 / 0x09010001 @255 false CPU 1: 0x0a010002 @ 5 / 0x0a010005 @ 3 / 0x09010002 @255 false CPU 2: 0x0a010003 @ 4 / 0x0a010003 @ 4 / 0x09010003 @255 false CPU 3: 0x0a010004 @ 4 / 0x0a010004 @ 4 / 0x09010004 @255 false === End of Ready Set of Threads ==> 21: ==> 22: current_cpu 1 Changing current CPU from 0 to 1 ==> 23: task_mode -P Thread Heir: 0x0a010005 priority=3 Thread Executing: 0x0a010002 priority=5 Thread Executing: 0x0a010005 priority=3 Previous Mode: Preemption: no Timeslicing: no Current Mode: Preemption: yes Timeslicing: no ==> 24: dispatch ==> 25: # GOAL: 0x0a010001, 0x0a010005, 0x0a010003, and 0x0a010004 are ==> 26: # GOAL: heir and executing on CPUs 0 - 3 ==> 27: cpus === CPU Status EXECUTING / HEIR / IDLE / SWITCH NEEDED CPU 0: 0x0a010001 @ 4 / 0x0a010001 @ 4 / 0x09010001 @255 false CPU 1: 0x0a010005 @ 3 / 0x0a010005 @ 3 / 0x09010002 @255 false CPU 2: 0x0a010003 @ 4 / 0x0a010003 @ 4 / 0x09010003 @255 false CPU 3: 0x0a010004 @ 4 / 0x0a010004 @ 4 / 0x09010004 @255 false === End of Ready Set of Threads