summaryrefslogtreecommitdiffstats
path: root/schedsim/shell/schedsim_smpsimple/scenarios
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-05-17 19:31:12 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-05-17 19:31:12 +0000
commitf40778b48660b589278898593c62cf2250d3fbab (patch)
tree09d84495b8a489f65e58819c8d77ec488da30571 /schedsim/shell/schedsim_smpsimple/scenarios
parent2011-05-17 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-schedsim-f40778b48660b589278898593c62cf2250d3fbab.tar.bz2
2011-05-17 Joel Sherrill <joel.sherrill@oarcorp.com>
* .cvsignore, ChangeLog, Makefile.am, README, TODO, add_commands.c, config.c, main_current_cpu.c, main_dispatch.c, main_dump_all_cpus.c, main_dump_ready_tasks.c, printheir_executing.c, schedsim.cc, smp_stub.c, wrap_thread_dispatch.c, scenarios/.cvsignore, scenarios/cpus1_mode.expected, scenarios/cpus1_mode.scen, scenarios/cpus1_priority.expected, scenarios/cpus1_priority.scen, scenarios/cpus1_resume_on_primary.expected, scenarios/cpus1_resume_on_primary.scen, scenarios/cpus1_suspend_on_primary.expected, scenarios/cpus1_suspend_on_primary.scen, scenarios/cpus4_mode_case1.expected, scenarios/cpus4_mode_case1.scen, scenarios/cpus4_mode_case2.expected, scenarios/cpus4_mode_case2.scen, scenarios/cpus4_nonpreempt_case1.expected, scenarios/cpus4_nonpreempt_case1.scen, scenarios/cpus4_pick_older.expected, scenarios/cpus4_pick_older.scen, scenarios/cpus4_priority.expected, scenarios/cpus4_priority.scen, scenarios/cpus4_simple_nopreempt.expected, scenarios/cpus4_simple_nopreempt.scen, scenarios/cpus4_simple_preemption.expected, scenarios/cpus4_simple_preemption.scen, scenarios/cpus4_suspend_on_all.expected, scenarios/cpus4_suspend_on_all.scen, scenarios/cpus4_suspend_on_primary.expected, scenarios/cpus4_suspend_on_primary.scen, scenarios/cpus4_suspend_on_secondary.expected, scenarios/cpus4_suspend_on_secondary.scen: New files.
Diffstat (limited to 'schedsim/shell/schedsim_smpsimple/scenarios')
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/.cvsignore1
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus1_mode.expected42
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus1_mode.scen14
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus1_priority.expected69
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus1_priority.scen29
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus1_resume_on_primary.expected57
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus1_resume_on_primary.scen22
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus1_suspend_on_primary.expected37
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus1_suspend_on_primary.scen13
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case1.expected87
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case1.scen25
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case2.expected89
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case2.scen27
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_nonpreempt_case1.expected72
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_nonpreempt_case1.scen19
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_pick_older.expected156
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_pick_older.scen45
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_priority.expected115
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_priority.scen37
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_nopreempt.expected75
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_nopreempt.scen19
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_preemption.expected79
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_preemption.scen19
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_all.expected83
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_all.scen20
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_primary.expected73
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_primary.scen18
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_secondary.expected75
-rw-r--r--schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_secondary.scen19
29 files changed, 1436 insertions, 0 deletions
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/.cvsignore b/schedsim/shell/schedsim_smpsimple/scenarios/.cvsignore
new file mode 100644
index 0000000..7de0b67
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/.cvsignore
@@ -0,0 +1 @@
+*.output
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_mode.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_mode.expected
new file mode 100644
index 0000000..34ad78c
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_mode.expected
@@ -0,0 +1,42 @@
+Script File : scenarios/cpus1_mode.scen
+verbose : 1
+==> 1: #
+==> 2: # Check increasing and decrease priority self with no change
+==> 3: #
+==> 4: rtems_init 1
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create -p smp1 5
+Creating task with: Preemption: no Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: # GOAL: 0x0a010001 is heir and executing on CPU 0
+==> 7: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 8: task_create smp2 4
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=4
+Task (smp2) starting: id=0x0a010002, priority=4
+ Thread Heir: 0x0a010002 priority=4
+==> 9: # GOAL: 0x0a010001 is executing and 0x0a010002 is heir on CPU 0
+==> 10: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010002 @ 4 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 11:
+==> 12: task_mode -P
+ Thread Executing: 0x0a010002 priority=4
+Previous Mode: Preemption: no Timeslicing: no
+Current Mode: Preemption: yes Timeslicing: no
+==> 13: # GOAL: 0x0a010002 is heir and executing on CPU 0
+==> 14: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010002 @ 4 / 0x0a010002 @ 4 / 0x09010001 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_mode.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_mode.scen
new file mode 100644
index 0000000..21de2c7
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_mode.scen
@@ -0,0 +1,14 @@
+#
+# Check increasing and decrease priority self with no change
+#
+rtems_init 1
+task_create -p smp1 5
+# GOAL: 0x0a010001 is heir and executing on CPU 0
+cpus
+task_create smp2 4
+# GOAL: 0x0a010001 is executing and 0x0a010002 is heir on CPU 0
+cpus
+
+task_mode -P
+# GOAL: 0x0a010002 is heir and executing on CPU 0
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_priority.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_priority.expected
new file mode 100644
index 0000000..4047709
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_priority.expected
@@ -0,0 +1,69 @@
+Script File : scenarios/cpus1_priority.scen
+verbose : 1
+==> 1: #
+==> 2: # Check increasing and decrease priority self with no change
+==> 3: #
+==> 4: rtems_init 1
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: task_create smp2 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=8
+Task (smp2) starting: id=0x0a010002, priority=8
+==> 7: dispatch
+==> 8: # GOAL: 0x0a010001 is heir and executing on CPU 0
+==> 9: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 10:
+==> 11: task_priority smp1 4
+Task (0x0a010001) Change Priority from 5 to 4
+==> 12: dispatch
+==> 13: # GOAL: 0x0a010001 is still heir and executing on CPU 0
+==> 14: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 4 / 0x0a010001 @ 4 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 15:
+==> 16: task_priority smp1 7
+Task (0x0a010001) Change Priority from 4 to 7
+==> 17: dispatch
+==> 18: # GOAL: 0x0a010001 is still heir and executing on CPU 0
+==> 19: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 7 / 0x0a010001 @ 7 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 20:
+==> 21: task_priority smp1 8
+ Thread Heir: 0x0a010002 priority=8
+ Thread Executing: 0x0a010002 priority=8
+Task (0x0a010001) Change Priority from 7 to 8
+==> 22: dispatch
+==> 23: # GOAL: 0x0a010002 is now heir and executing on CPU 0
+==> 24: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010002 @ 8 / 0x0a010002 @ 8 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 25:
+==> 26: task_priority smp1 5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+Task (0x0a010001) Change Priority from 8 to 5
+==> 27: dispatch
+==> 28: # GOAL: 0x0a010001 is now heir and executing on CPU 0
+==> 29: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_priority.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_priority.scen
new file mode 100644
index 0000000..924efc8
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_priority.scen
@@ -0,0 +1,29 @@
+#
+# Check increasing and decrease priority self with no change
+#
+rtems_init 1
+task_create smp1 5
+task_create smp2 8
+dispatch
+# GOAL: 0x0a010001 is heir and executing on CPU 0
+cpus
+
+task_priority smp1 4
+dispatch
+# GOAL: 0x0a010001 is still heir and executing on CPU 0
+cpus
+
+task_priority smp1 7
+dispatch
+# GOAL: 0x0a010001 is still heir and executing on CPU 0
+cpus
+
+task_priority smp1 8
+dispatch
+# GOAL: 0x0a010002 is now heir and executing on CPU 0
+cpus
+
+task_priority smp1 5
+dispatch
+# GOAL: 0x0a010001 is now heir and executing on CPU 0
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_resume_on_primary.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_resume_on_primary.expected
new file mode 100644
index 0000000..36328d2
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_resume_on_primary.expected
@@ -0,0 +1,57 @@
+Script File : scenarios/cpus1_resume_on_primary.scen
+verbose : 1
+==> 1: #
+==> 2: # Check suspending self, then resuming on primary CPU
+==> 3: #
+==> 4: rtems_init 1
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: dispatch
+==> 7: # GOAL: 0x0a010001 is heir and executing on CPU 0
+==> 8: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 9: # suspend running task
+==> 10: task_suspend smp1
+Suspending task (0x0a010001)
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 11: # GOAL: 0x09010001 is heir and executing on CPU 0
+==> 12: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x09010001 @255 / 0x09010001 @255 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 13: dispatch
+==> 14: # GOAL: 0x09010001 is heir and executing on CPU 0
+==> 15: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x09010001 @255 / 0x09010001 @255 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 16: # resume suspended task
+==> 17: task_resume smp1
+Resuming task (0x0a010001)
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 18: # GOAL: 0x0a010001 is heir and executing on CPU 0
+==> 19: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 20: dispatch
+==> 21: # GOAL: 0x0a010001 is heir and executing on CPU 0
+==> 22: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_resume_on_primary.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_resume_on_primary.scen
new file mode 100644
index 0000000..d2df3a8
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_resume_on_primary.scen
@@ -0,0 +1,22 @@
+#
+# Check suspending self, then resuming on primary CPU
+#
+rtems_init 1
+task_create smp1 5
+dispatch
+# GOAL: 0x0a010001 is heir and executing on CPU 0
+cpus
+# suspend running task
+task_suspend smp1
+# GOAL: 0x09010001 is heir and executing on CPU 0
+cpus
+dispatch
+# GOAL: 0x09010001 is heir and executing on CPU 0
+cpus
+# resume suspended task
+task_resume smp1
+# GOAL: 0x0a010001 is heir and executing on CPU 0
+cpus
+dispatch
+# GOAL: 0x0a010001 is heir and executing on CPU 0
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_suspend_on_primary.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_suspend_on_primary.expected
new file mode 100644
index 0000000..5844723
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_suspend_on_primary.expected
@@ -0,0 +1,37 @@
+Script File : scenarios/cpus1_suspend_on_primary.scen
+verbose : 1
+==> 1: #
+==> 2: # Check blocking self on primary CPU
+==> 3: #
+==> 4: rtems_init 1
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: dispatch
+==> 7: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 8: # GOAL: 0x0a010001 is heir and executing on CPU 0
+==> 9: task_suspend SELF
+Suspending task (0x0a010001)
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 10: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x09010001 @255 / 0x09010001 @255 / 0x09010001 @255 false
+=== End of Ready Set of Threads
+==> 11: dispatch
+==> 12: # GOAL: 0x09010001 is heir and executing on CPU 0
+==> 13: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x09010001 @255 / 0x09010001 @255 / 0x09010001 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_suspend_on_primary.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_suspend_on_primary.scen
new file mode 100644
index 0000000..a4db578
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus1_suspend_on_primary.scen
@@ -0,0 +1,13 @@
+#
+# Check blocking self on primary CPU
+#
+rtems_init 1
+task_create smp1 5
+dispatch
+cpus
+# GOAL: 0x0a010001 is heir and executing on CPU 0
+task_suspend SELF
+cpus
+dispatch
+# GOAL: 0x09010001 is heir and executing on CPU 0
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case1.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case1.expected
new file mode 100644
index 0000000..d3d4404
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case1.expected
@@ -0,0 +1,87 @@
+Script File : scenarios/cpus4_mode_case1.scen
+verbose : 1
+==> 1: #
+==> 2: # Show how having a non-preemptive task can create a
+==> 3: # priority inversion and changing the mode to preemptive
+==> 4: # resolves it.
+==> 5: #
+==> 6: rtems_init 4
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 7: task_create -p smp1 5
+Creating task with: Preemption: no Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 8: task_create smp2 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=5
+Task (smp2) starting: id=0x0a010002, priority=5
+==> 9: task_create smp3 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=5
+Task (smp3) starting: id=0x0a010003, priority=5
+==> 10: task_create smp4 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=5
+Task (smp4) starting: id=0x0a010004, priority=5
+==> 11: 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=5
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=5
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=5
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=5
+==> 12: # GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+==> 13: # GOAL: on CPUs 0 - 3 respectively
+==> 14: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 5 / 0x0a010002 @ 5 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 5 / 0x0a010003 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 5 / 0x0a010004 @ 5 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 15:
+==> 16: task_create smp5 3
+Creating task with: Preemption: yes Timeslicing: no
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+Task (smp5) created: id=0x0a010005, priority=3
+Task (smp5) starting: id=0x0a010005, priority=3
+==> 17: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010005 priority=3
+ Thread Executing: 0x0a010002 priority=5
+ Thread Executing: 0x0a010005 priority=3
+==> 18: # GOAL: 0x0a010001, 0x0a010005, 0x0a010003, and 0x0a010004 are heir
+==> 19: # GOAL: and executing on CPUs 0 - 3
+==> 20: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010005 @ 3 / 0x0a010005 @ 3 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 5 / 0x0a010003 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 5 / 0x0a010004 @ 5 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 21:
+==> 22: task_mode -P
+Previous Mode: Preemption: no Timeslicing: no
+Current Mode: Preemption: yes Timeslicing: no
+==> 23: # GOAL: 0x0a010001, 0x0a010005, 0x0a010003, and 0x0a010004 are heir
+==> 24: # GOAL: and executing on CPUs 0 - 3
+==> 25: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010005 @ 3 / 0x0a010005 @ 3 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 5 / 0x0a010003 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 5 / 0x0a010004 @ 5 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case1.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case1.scen
new file mode 100644
index 0000000..a9f186c
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case1.scen
@@ -0,0 +1,25 @@
+#
+# Show how having a non-preemptive task can create a
+# priority inversion and changing the mode to preemptive
+# resolves it.
+#
+rtems_init 4
+task_create -p smp1 5
+task_create smp2 5
+task_create smp3 5
+task_create smp4 5
+dispatch
+# GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+# GOAL: on CPUs 0 - 3 respectively
+cpus
+
+task_create smp5 3
+dispatch
+# GOAL: 0x0a010001, 0x0a010005, 0x0a010003, and 0x0a010004 are heir
+# GOAL: and executing on CPUs 0 - 3
+cpus
+
+task_mode -P
+# GOAL: 0x0a010001, 0x0a010005, 0x0a010003, and 0x0a010004 are heir
+# GOAL: and executing on CPUs 0 - 3
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case2.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case2.expected
new file mode 100644
index 0000000..6b0086f
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case2.expected
@@ -0,0 +1,89 @@
+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
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case2.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case2.scen
new file mode 100644
index 0000000..44263e4
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_mode_case2.scen
@@ -0,0 +1,27 @@
+#
+# Show how having a non-preemptive task can create a
+# priority inversion
+#
+rtems_init 4
+task_create -p smp1 4
+task_create -p smp2 5
+task_create -p smp3 4
+task_create -p smp4 4
+dispatch
+# GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+# GOAL: on CPUs 0 - 3 respectively
+cpus
+
+task_create smp5 3
+dispatch
+# GOAL: 0x0a010001 - 0x0a010004 are executing on CPUs 0 - 3.
+# GOAL: All are also heir EXCEPT 0x0a010005 is heir on CPU 1.
+# GOAL: **** SHOWS INVERSION - CPU 1 has NO PREEMPT TASK ****
+cpus
+
+current_cpu 1
+task_mode -P
+dispatch
+# GOAL: 0x0a010001, 0x0a010005, 0x0a010003, and 0x0a010004 are
+# GOAL: heir and executing on CPUs 0 - 3
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_nonpreempt_case1.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_nonpreempt_case1.expected
new file mode 100644
index 0000000..f5069e1
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_nonpreempt_case1.expected
@@ -0,0 +1,72 @@
+Script File : scenarios/cpus4_nonpreempt_case1.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 5
+Creating task with: Preemption: no Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 7: task_create smp2 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=5
+Task (smp2) starting: id=0x0a010002, priority=5
+==> 8: task_create smp3 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=5
+Task (smp3) starting: id=0x0a010003, priority=5
+==> 9: task_create smp4 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=5
+Task (smp4) starting: id=0x0a010004, priority=5
+==> 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=5
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=5
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=5
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=5
+==> 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 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 5 / 0x0a010002 @ 5 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 5 / 0x0a010003 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 5 / 0x0a010004 @ 5 / 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=5
+ Thread Executing: 0x0a010001 priority=5
+Task (smp5) created: id=0x0a010005, priority=3
+Task (smp5) starting: id=0x0a010005, priority=3
+==> 16: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010005 priority=3
+ Thread Executing: 0x0a010002 priority=5
+ Thread Executing: 0x0a010005 priority=3
+==> 17: # GOAL: 0x0a010001, 0x0a010005, 0x0a010003, and 0x0a010004 are heir
+==> 18: # GOAL: and executing on CPUs 0 - 3
+==> 19: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010005 @ 3 / 0x0a010005 @ 3 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 5 / 0x0a010003 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 5 / 0x0a010004 @ 5 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_nonpreempt_case1.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_nonpreempt_case1.scen
new file mode 100644
index 0000000..92b44bf
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_nonpreempt_case1.scen
@@ -0,0 +1,19 @@
+#
+# Show how having a non-preemptive task can create a
+# priority inversion
+#
+rtems_init 4
+task_create -p smp1 5
+task_create smp2 5
+task_create smp3 5
+task_create smp4 5
+dispatch
+# GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+# GOAL: on CPUs 0 - 3 respectively
+cpus
+
+task_create smp5 3
+dispatch
+# GOAL: 0x0a010001, 0x0a010005, 0x0a010003, and 0x0a010004 are heir
+# GOAL: and executing on CPUs 0 - 3
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_pick_older.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_pick_older.expected
new file mode 100644
index 0000000..749ae29
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_pick_older.expected
@@ -0,0 +1,156 @@
+Script File : scenarios/cpus4_pick_older.scen
+verbose : 1
+==> 1: #
+==> 2: # Verify we select the oldest task at a priority
+==> 3: #
+==> 4: rtems_init 4
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 3
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=3
+Task (smp1) starting: id=0x0a010001, priority=3
+ Thread Heir: 0x0a010001 priority=3
+ Thread Executing: 0x0a010001 priority=3
+==> 6: task_create smp2 6
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=6
+Task (smp2) starting: id=0x0a010002, priority=6
+==> 7: task_create smp3 7
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=7
+Task (smp3) starting: id=0x0a010003, priority=7
+==> 8: task_create smp4 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=8
+Task (smp4) starting: id=0x0a010004, priority=8
+==> 9: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010002 priority=6
+ Thread Executing: 0x09010002 priority=255
+ Thread Executing: 0x0a010002 priority=6
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x0a010003 priority=7
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=7
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=8
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=8
+==> 10: # GOAL: Tasks 0x0a010001 - 0x0a010004 as heir and executing
+==> 11: # GOAL: on CPUs 1 - 4 respectively
+==> 12: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 3 / 0x0a010001 @ 3 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 13:
+==> 14: task_create smp5 5
+Creating task with: Preemption: yes Timeslicing: no
+ Thread Heir: 0x0a010001 priority=3
+ Thread Executing: 0x0a010001 priority=3
+Task (smp5) created: id=0x0a010005, priority=5
+Task (smp5) starting: id=0x0a010005, priority=5
+==> 15: clock_tick 1
+ClockTick (1) ...
+==> 16: dispatch
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010005 priority=5
+ Thread Executing: 0x0a010004 priority=8
+ Thread Executing: 0x0a010005 priority=5
+==> 17: # GOAL: Tasks 0x0a010001, 0x0a010002, 0x0a010003, and 0x0a010005 are
+==> 18: # GOAL: heir and executing on CPUs 1 - 4 respectively
+==> 19: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 3 / 0x0a010001 @ 3 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010005 @ 5 / 0x0a010005 @ 5 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 20:
+==> 21: task_create smp6 5
+Creating task with: Preemption: yes Timeslicing: no
+ Thread Heir: 0x0a010001 priority=3
+ Thread Executing: 0x0a010001 priority=3
+Task (smp6) created: id=0x0a010006, priority=5
+Task (smp6) starting: id=0x0a010006, priority=5
+==> 22: clock_tick 1
+ClockTick (1) ...
+==> 23: dispatch
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x0a010006 priority=5
+ Thread Executing: 0x0a010003 priority=7
+ Thread Executing: 0x0a010006 priority=5
+==> 24: # GOAL: Tasks 0x0a010001, 0x0a010002, 0x0a010006, and 0x0a010005 are
+==> 25: # GOAL: heir and executing on CPUs 1 - 4 respectively
+==> 26: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 3 / 0x0a010001 @ 3 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010006 @ 5 / 0x0a010006 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010005 @ 5 / 0x0a010005 @ 5 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 27:
+==> 28: task_create smp7 5
+Creating task with: Preemption: yes Timeslicing: no
+ Thread Heir: 0x0a010001 priority=3
+ Thread Executing: 0x0a010001 priority=3
+Task (smp7) created: id=0x0a010007, priority=5
+Task (smp7) starting: id=0x0a010007, priority=5
+==> 29: clock_tick 1
+ClockTick (1) ...
+==> 30: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010007 priority=5
+ Thread Executing: 0x0a010002 priority=6
+ Thread Executing: 0x0a010007 priority=5
+==> 31: # GOAL: Tasks 0x0a010001, 0x0a010007, 0x0a010006, and 0x0a010005 are
+==> 32: # GOAL: heir and executing on CPUs 1 - 4 respectively
+==> 33: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 3 / 0x0a010001 @ 3 / 0x09010001 @255 false
+ CPU 1: 0x0a010007 @ 5 / 0x0a010007 @ 5 / 0x09010002 @255 false
+ CPU 2: 0x0a010006 @ 5 / 0x0a010006 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010005 @ 5 / 0x0a010005 @ 5 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 34:
+==> 35: # We should pick task smp4 on the 4th core
+==> 36: task_create smp8 4
+Creating task with: Preemption: yes Timeslicing: no
+ Thread Heir: 0x0a010001 priority=3
+ Thread Executing: 0x0a010001 priority=3
+Task (smp8) created: id=0x0a010008, priority=4
+Task (smp8) starting: id=0x0a010008, priority=4
+==> 37: # GOAL: Tasks 0x0a010001, 0x0a010007, and 0x0a010006
+==> 38: # GOAL: heir and executing on CPUs 1 - 3 respectively
+==> 39: # GOAL: Task 0x0a010005 is executing on CPU 4
+==> 40: # GOAL: Task 0x0a010008 is heir on CPU 4
+==> 41: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 3 / 0x0a010001 @ 3 / 0x09010001 @255 false
+ CPU 1: 0x0a010007 @ 5 / 0x0a010007 @ 5 / 0x09010002 @255 false
+ CPU 2: 0x0a010006 @ 5 / 0x0a010006 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010005 @ 5 / 0x0a010008 @ 4 / 0x09010004 @255 true
+=== End of Ready Set of Threads
+==> 42: dispatch
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010008 priority=4
+ Thread Executing: 0x0a010005 priority=5
+ Thread Executing: 0x0a010008 priority=4
+==> 43: # GOAL: Tasks 0x0a010001, 0x0a010007, 0x0a010006, and 0x0a010008 are
+==> 44: # GOAL: heir and executing on CPUs 1 - 4 respectively
+==> 45: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 3 / 0x0a010001 @ 3 / 0x09010001 @255 false
+ CPU 1: 0x0a010007 @ 5 / 0x0a010007 @ 5 / 0x09010002 @255 false
+ CPU 2: 0x0a010006 @ 5 / 0x0a010006 @ 5 / 0x09010003 @255 false
+ CPU 3: 0x0a010008 @ 4 / 0x0a010008 @ 4 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_pick_older.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_pick_older.scen
new file mode 100644
index 0000000..baf55f0
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_pick_older.scen
@@ -0,0 +1,45 @@
+#
+# Verify we select the oldest task at a priority
+#
+rtems_init 4
+task_create smp1 3
+task_create smp2 6
+task_create smp3 7
+task_create smp4 8
+dispatch
+# GOAL: Tasks 0x0a010001 - 0x0a010004 as heir and executing
+# GOAL: on CPUs 1 - 4 respectively
+cpus
+
+task_create smp5 5
+clock_tick 1
+dispatch
+# GOAL: Tasks 0x0a010001, 0x0a010002, 0x0a010003, and 0x0a010005 are
+# GOAL: heir and executing on CPUs 1 - 4 respectively
+cpus
+
+task_create smp6 5
+clock_tick 1
+dispatch
+# GOAL: Tasks 0x0a010001, 0x0a010002, 0x0a010006, and 0x0a010005 are
+# GOAL: heir and executing on CPUs 1 - 4 respectively
+cpus
+
+task_create smp7 5
+clock_tick 1
+dispatch
+# GOAL: Tasks 0x0a010001, 0x0a010007, 0x0a010006, and 0x0a010005 are
+# GOAL: heir and executing on CPUs 1 - 4 respectively
+cpus
+
+# We should pick task smp4 on the 4th core
+task_create smp8 4
+# GOAL: Tasks 0x0a010001, 0x0a010007, and 0x0a010006
+# GOAL: heir and executing on CPUs 1 - 3 respectively
+# GOAL: Task 0x0a010005 is executing on CPU 4
+# GOAL: Task 0x0a010008 is heir on CPU 4
+cpus
+dispatch
+# GOAL: Tasks 0x0a010001, 0x0a010007, 0x0a010006, and 0x0a010008 are
+# GOAL: heir and executing on CPUs 1 - 4 respectively
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_priority.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_priority.expected
new file mode 100644
index 0000000..942341b
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_priority.expected
@@ -0,0 +1,115 @@
+Script File : scenarios/cpus4_priority.scen
+verbose : 1
+==> 1: #
+==> 2: # Check increasing and decrease priority
+==> 3: #
+==> 4: rtems_init 4
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: task_create smp2 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=8
+Task (smp2) starting: id=0x0a010002, priority=8
+==> 7: task_create smp3 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=8
+Task (smp3) starting: id=0x0a010003, priority=8
+==> 8: task_create smp4 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=8
+Task (smp4) starting: id=0x0a010004, priority=8
+==> 9: task_create smp5 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp5) created: id=0x0a010005, priority=8
+Task (smp5) starting: id=0x0a010005, priority=8
+==> 10: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010002 priority=8
+ Thread Executing: 0x09010002 priority=255
+ Thread Executing: 0x0a010002 priority=8
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x0a010003 priority=8
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=8
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=8
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=8
+==> 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 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 8 / 0x0a010002 @ 8 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 8 / 0x0a010003 @ 8 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 14:
+==> 15: task_priority smp1 4
+ Thread Heir: 0x0a010001 priority=4
+ Thread Executing: 0x0a010001 priority=4
+Task (0x0a010001) Change Priority from 5 to 4
+==> 16: dispatch
+==> 17: # GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+==> 18: # GOAL: on CPUs 0 - 3 respectively (no change)
+==> 19: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 4 / 0x0a010001 @ 4 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 8 / 0x0a010002 @ 8 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 8 / 0x0a010003 @ 8 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 20:
+==> 21: task_priority smp1 7
+Task (0x0a010001) Change Priority from 4 to 7
+==> 22: dispatch
+==> 23: # GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+==> 24: # GOAL: on CPUs 0 - 3 respectively (no change)
+==> 25: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 7 / 0x0a010001 @ 7 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 8 / 0x0a010002 @ 8 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 8 / 0x0a010003 @ 8 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 26:
+==> 27: task_priority smp1 8
+ Thread Heir: 0x0a010005 priority=8
+ Thread Executing: 0x0a010005 priority=8
+Task (0x0a010001) Change Priority from 7 to 8
+==> 28: dispatch
+==> 29: # GOAL: 0x0a010005, 0x0a010002 - 0x0a010004 are heir and executing
+==> 30: # GOAL: on CPUs 0 - 3 respectively
+==> 31: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010005 @ 8 / 0x0a010005 @ 8 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 8 / 0x0a010002 @ 8 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 8 / 0x0a010003 @ 8 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 32:
+==> 33: task_priority smp1 5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+Task (0x0a010001) Change Priority from 8 to 5
+==> 34: dispatch
+==> 35: # GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+==> 36: # GOAL: on CPUs 0 - 3 respectively
+==> 37: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 8 / 0x0a010002 @ 8 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 8 / 0x0a010003 @ 8 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_priority.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_priority.scen
new file mode 100644
index 0000000..311bae4
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_priority.scen
@@ -0,0 +1,37 @@
+#
+# Check increasing and decrease priority
+#
+rtems_init 4
+task_create smp1 5
+task_create smp2 8
+task_create smp3 8
+task_create smp4 8
+task_create smp5 8
+dispatch
+# GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+# GOAL: on CPUs 0 - 3 respectively
+cpus
+
+task_priority smp1 4
+dispatch
+# GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+# GOAL: on CPUs 0 - 3 respectively (no change)
+cpus
+
+task_priority smp1 7
+dispatch
+# GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+# GOAL: on CPUs 0 - 3 respectively (no change)
+cpus
+
+task_priority smp1 8
+dispatch
+# GOAL: 0x0a010005, 0x0a010002 - 0x0a010004 are heir and executing
+# GOAL: on CPUs 0 - 3 respectively
+cpus
+
+task_priority smp1 5
+dispatch
+# GOAL: 0x0a010001 - 0x0a010004 are heir and executing
+# GOAL: on CPUs 0 - 3 respectively
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_nopreempt.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_nopreempt.expected
new file mode 100644
index 0000000..fad7357
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_nopreempt.expected
@@ -0,0 +1,75 @@
+Script File : scenarios/cpus4_simple_nopreempt.scen
+verbose : 1
+==> 1: #
+==> 2: # Verify no-preempt is honored
+==> 3: #
+==> 4: rtems_init 4
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create -p smp1 5
+Creating task with: Preemption: no Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: task_create -p smp2 6
+Creating task with: Preemption: no Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=6
+Task (smp2) starting: id=0x0a010002, priority=6
+==> 7: task_create -p smp3 7
+Creating task with: Preemption: no Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=7
+Task (smp3) starting: id=0x0a010003, priority=7
+==> 8: task_create -p smp4 8
+Creating task with: Preemption: no Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=8
+Task (smp4) starting: id=0x0a010004, priority=8
+==> 9: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010002 priority=6
+ Thread Executing: 0x09010002 priority=255
+ Thread Executing: 0x0a010002 priority=6
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x0a010003 priority=7
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=7
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=8
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=8
+==> 10: # GOAL: Tasks 0x0a010001 to 0x0a010004 as heir and executing on
+==> 11: # GOAL: CPUs 1 - 4, respectively.
+==> 12: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 13: # Tasks are created and distributed across CPUs
+==> 14: task_create smp5 1
+Creating task with: Preemption: yes Timeslicing: no
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+Task (smp5) created: id=0x0a010005, priority=1
+Task (smp5) starting: id=0x0a010005, priority=1
+==> 15: # GOAL: Task 0x0a010005 is heir but 0x0a010004 is executing on CPU 4
+==> 16: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010005 @ 1 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 17: dispatch
+==> 18: # GOAL: Task 0x0a010005 is heir but 0x0a010004 is executing on CPU 4
+==> 19: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010005 @ 1 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_nopreempt.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_nopreempt.scen
new file mode 100644
index 0000000..d7596d9
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_nopreempt.scen
@@ -0,0 +1,19 @@
+#
+# Verify no-preempt is honored
+#
+rtems_init 4
+task_create -p smp1 5
+task_create -p smp2 6
+task_create -p smp3 7
+task_create -p smp4 8
+dispatch
+# GOAL: Tasks 0x0a010001 to 0x0a010004 as heir and executing on
+# GOAL: CPUs 1 - 4, respectively.
+cpus
+# Tasks are created and distributed across CPUs
+task_create smp5 1
+# GOAL: Task 0x0a010005 is heir but 0x0a010004 is executing on CPU 4
+cpus
+dispatch
+# GOAL: Task 0x0a010005 is heir but 0x0a010004 is executing on CPU 4
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_preemption.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_preemption.expected
new file mode 100644
index 0000000..9a4942b
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_preemption.expected
@@ -0,0 +1,79 @@
+Script File : scenarios/cpus4_simple_preemption.scen
+verbose : 1
+==> 1: #
+==> 2: # Ensure lowest priority is preempted
+==> 3: #
+==> 4: rtems_init 4
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: task_create smp2 6
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=6
+Task (smp2) starting: id=0x0a010002, priority=6
+==> 7: task_create smp3 7
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=7
+Task (smp3) starting: id=0x0a010003, priority=7
+==> 8: task_create smp4 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=8
+Task (smp4) starting: id=0x0a010004, priority=8
+==> 9: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010002 priority=6
+ Thread Executing: 0x09010002 priority=255
+ Thread Executing: 0x0a010002 priority=6
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x0a010003 priority=7
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=7
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=8
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=8
+==> 10: # GOAL: want 0x0a010001 - 0x0a010004 as heir and executings
+==> 11: # GOAL: on CPUs 1-4 respectively
+==> 12: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 13: # Tasks are created and distributed across CPUs
+==> 14: task_create smp5 1
+Creating task with: Preemption: yes Timeslicing: no
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+Task (smp5) created: id=0x0a010005, priority=1
+Task (smp5) starting: id=0x0a010005, priority=1
+==> 15: # GOAL: want 0x0a010005 to be heir on CPU 4
+==> 16: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010005 @ 1 / 0x09010004 @255 true
+=== End of Ready Set of Threads
+==> 17: dispatch
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010005 priority=1
+ Thread Executing: 0x0a010004 priority=8
+ Thread Executing: 0x0a010005 priority=1
+==> 18: # GOAL: want 0x0a010005 to be heir AND executing on CPU 4
+==> 19: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010005 @ 1 / 0x0a010005 @ 1 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_preemption.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_preemption.scen
new file mode 100644
index 0000000..ccb6d0e
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_simple_preemption.scen
@@ -0,0 +1,19 @@
+#
+# Ensure lowest priority is preempted
+#
+rtems_init 4
+task_create smp1 5
+task_create smp2 6
+task_create smp3 7
+task_create smp4 8
+dispatch
+# GOAL: want 0x0a010001 - 0x0a010004 as heir and executings
+# GOAL: on CPUs 1-4 respectively
+cpus
+# Tasks are created and distributed across CPUs
+task_create smp5 1
+# GOAL: want 0x0a010005 to be heir on CPU 4
+cpus
+dispatch
+# GOAL: want 0x0a010005 to be heir AND executing on CPU 4
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_all.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_all.expected
new file mode 100644
index 0000000..ee26a63
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_all.expected
@@ -0,0 +1,83 @@
+Script File : scenarios/cpus4_suspend_on_all.scen
+verbose : 1
+==> 1: #
+==> 2: # Check blocking self on secondary CPU
+==> 3: #
+==> 4: rtems_init 4
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: task_create smp2 6
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=6
+Task (smp2) starting: id=0x0a010002, priority=6
+==> 7: task_create smp3 7
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=7
+Task (smp3) starting: id=0x0a010003, priority=7
+==> 8: task_create smp4 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=8
+Task (smp4) starting: id=0x0a010004, priority=8
+==> 9: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010002 priority=6
+ Thread Executing: 0x09010002 priority=255
+ Thread Executing: 0x0a010002 priority=6
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x0a010003 priority=7
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=7
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=8
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=8
+==> 10: # GOAL: want 0x0a010001 - 0x0a010004 as heir and executings
+==> 11: # GOAL: on CPUs 0 - 3 respectively
+==> 12: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 13: task_suspend smp1
+Suspending task (0x0a010001)
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x0a010001 priority=5
+ Thread Executing: 0x09010001 priority=255
+==> 14: task_suspend smp2
+Suspending task (0x0a010002)
+==> 15: task_suspend smp3
+Suspending task (0x0a010003)
+==> 16: task_suspend smp4
+Suspending task (0x0a010004)
+==> 17: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x09010002 priority=255
+ Thread Executing: 0x0a010002 priority=6
+ Thread Executing: 0x09010002 priority=255
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=7
+ Thread Executing: 0x09010003 priority=255
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=8
+ Thread Executing: 0x09010004 priority=255
+==> 18: # GOAL: want IDLE 0x09010001 - 0x09010004 as heir and executings
+==> 19: # GOAL: on CPUs 0 - 3 respectively
+==> 20: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x09010001 @255 / 0x09010001 @255 / 0x09010001 @255 false
+ CPU 1: 0x09010002 @255 / 0x09010002 @255 / 0x09010002 @255 false
+ CPU 2: 0x09010003 @255 / 0x09010003 @255 / 0x09010003 @255 false
+ CPU 3: 0x09010004 @255 / 0x09010004 @255 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_all.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_all.scen
new file mode 100644
index 0000000..d0568ce
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_all.scen
@@ -0,0 +1,20 @@
+#
+# Check blocking self on secondary CPU
+#
+rtems_init 4
+task_create smp1 5
+task_create smp2 6
+task_create smp3 7
+task_create smp4 8
+dispatch
+# GOAL: want 0x0a010001 - 0x0a010004 as heir and executings
+# GOAL: on CPUs 0 - 3 respectively
+cpus
+task_suspend smp1
+task_suspend smp2
+task_suspend smp3
+task_suspend smp4
+dispatch
+# GOAL: want IDLE 0x09010001 - 0x09010004 as heir and executings
+# GOAL: on CPUs 0 - 3 respectively
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_primary.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_primary.expected
new file mode 100644
index 0000000..0e63b40
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_primary.expected
@@ -0,0 +1,73 @@
+Script File : scenarios/cpus4_suspend_on_primary.scen
+verbose : 1
+==> 1: #
+==> 2: # Check blocking self on primary CPU
+==> 3: #
+==> 4: rtems_init 4
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: task_create smp2 6
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=6
+Task (smp2) starting: id=0x0a010002, priority=6
+==> 7: task_create smp3 7
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=7
+Task (smp3) starting: id=0x0a010003, priority=7
+==> 8: task_create smp4 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=8
+Task (smp4) starting: id=0x0a010004, priority=8
+==> 9: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010002 priority=6
+ Thread Executing: 0x09010002 priority=255
+ Thread Executing: 0x0a010002 priority=6
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x0a010003 priority=7
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=7
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=8
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=8
+==> 10: # GOAL: want 0x0a010001 - 0x0a010004 as heir and executings
+==> 11: # GOAL: on CPUs 1-4 respectively
+==> 12: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 13: task_suspend SELF
+Suspending task (0x0a010001)
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x0a010001 priority=5
+ Thread Executing: 0x09010001 priority=255
+==> 14: # GOAL: want 0x09010001 as heir and executing on CPU 1
+==> 15: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x09010001 @255 / 0x09010001 @255 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 16: dispatch
+==> 17: # GOAL: want 0x09010001 as heir and executing on CPU 1
+==> 18: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x09010001 @255 / 0x09010001 @255 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_primary.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_primary.scen
new file mode 100644
index 0000000..ab25fb7
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_primary.scen
@@ -0,0 +1,18 @@
+#
+# Check blocking self on primary CPU
+#
+rtems_init 4
+task_create smp1 5
+task_create smp2 6
+task_create smp3 7
+task_create smp4 8
+dispatch
+# GOAL: want 0x0a010001 - 0x0a010004 as heir and executings
+# GOAL: on CPUs 1-4 respectively
+cpus
+task_suspend SELF
+# GOAL: want 0x09010001 as heir and executing on CPU 1
+cpus
+dispatch
+# GOAL: want 0x09010001 as heir and executing on CPU 1
+cpus
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_secondary.expected b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_secondary.expected
new file mode 100644
index 0000000..e7df9bb
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_secondary.expected
@@ -0,0 +1,75 @@
+Script File : scenarios/cpus4_suspend_on_secondary.scen
+verbose : 1
+==> 1: #
+==> 2: # Check blocking self on secondary CPU
+==> 3: #
+==> 4: rtems_init 4
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x09010001 priority=255
+==> 5: task_create smp1 5
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp1) created: id=0x0a010001, priority=5
+Task (smp1) starting: id=0x0a010001, priority=5
+ Thread Heir: 0x0a010001 priority=5
+ Thread Executing: 0x0a010001 priority=5
+==> 6: task_create smp2 6
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp2) created: id=0x0a010002, priority=6
+Task (smp2) starting: id=0x0a010002, priority=6
+==> 7: task_create smp3 7
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp3) created: id=0x0a010003, priority=7
+Task (smp3) starting: id=0x0a010003, priority=7
+==> 8: task_create smp4 8
+Creating task with: Preemption: yes Timeslicing: no
+Task (smp4) created: id=0x0a010004, priority=8
+Task (smp4) starting: id=0x0a010004, priority=8
+==> 9: dispatch
+=== Invoke Thread Dispatch on CPU 1
+ Thread Heir: 0x0a010002 priority=6
+ Thread Executing: 0x09010002 priority=255
+ Thread Executing: 0x0a010002 priority=6
+=== Invoke Thread Dispatch on CPU 2
+ Thread Heir: 0x0a010003 priority=7
+ Thread Executing: 0x09010003 priority=255
+ Thread Executing: 0x0a010003 priority=7
+=== Invoke Thread Dispatch on CPU 3
+ Thread Heir: 0x0a010004 priority=8
+ Thread Executing: 0x09010004 priority=255
+ Thread Executing: 0x0a010004 priority=8
+==> 10: # GOAL: want 0x0a010001 - 0x0a010004 as heir and executings
+==> 11: # GOAL: on CPUs 1-4 respectively
+==> 12: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x0a010003 @ 7 / 0x0a010003 @ 7 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 13: current_cpu 2
+Changing current CPU from 0 to 2
+==> 14: task_suspend SELF
+Suspending task (0x0a010003)
+ Thread Heir: 0x09010001 priority=255
+ Thread Executing: 0x0a010003 priority=7
+ Thread Executing: 0x09010001 priority=255
+==> 15: # GOAL: Want IDLE 0x09010001 as heir and executing on CPU 2
+==> 16: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x09010001 @255 / 0x09010001 @255 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
+==> 17: dispatch
+==> 18: # GOAL: Want IDLE 0x09010001 as heir and executing on CPU 2
+==> 19: cpus
+=== CPU Status
+ EXECUTING / HEIR / IDLE / SWITCH NEEDED
+ CPU 0: 0x0a010001 @ 5 / 0x0a010001 @ 5 / 0x09010001 @255 false
+ CPU 1: 0x0a010002 @ 6 / 0x0a010002 @ 6 / 0x09010002 @255 false
+ CPU 2: 0x09010001 @255 / 0x09010001 @255 / 0x09010003 @255 false
+ CPU 3: 0x0a010004 @ 8 / 0x0a010004 @ 8 / 0x09010004 @255 false
+=== End of Ready Set of Threads
diff --git a/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_secondary.scen b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_secondary.scen
new file mode 100644
index 0000000..9660b7d
--- /dev/null
+++ b/schedsim/shell/schedsim_smpsimple/scenarios/cpus4_suspend_on_secondary.scen
@@ -0,0 +1,19 @@
+#
+# Check blocking self on secondary CPU
+#
+rtems_init 4
+task_create smp1 5
+task_create smp2 6
+task_create smp3 7
+task_create smp4 8
+dispatch
+# GOAL: want 0x0a010001 - 0x0a010004 as heir and executings
+# GOAL: on CPUs 1-4 respectively
+cpus
+current_cpu 2
+task_suspend SELF
+# GOAL: Want IDLE 0x09010001 as heir and executing on CPU 2
+cpus
+dispatch
+# GOAL: Want IDLE 0x09010001 as heir and executing on CPU 2
+cpus