summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJennifer Averett <jennifer.averett@oarcorp.com>2014-06-17 12:03:25 -0500
committerJennifer Averett <jennifer.averett@oarcorp.com>2014-06-17 12:03:25 -0500
commit6f48a61527f4fad2244d7d8bfa67795d042c7fef (patch)
treeecda4c9713a6fbaf0d1af8dbce438f8cd67b23d9
parentac03e9a043453c2223cae3e0fdbbb6d40347e5f8 (diff)
Add remainder of schedulers and cluster scheduler support.
-rw-r--r--schedsim/UsingTheSchedulerSimulator.txt26
-rw-r--r--schedsim/configure.ac4
-rw-r--r--schedsim/rtems/Makefile.am33
-rw-r--r--schedsim/shell/Makefile.am23
-rw-r--r--schedsim/shell/schedsim_cbs/Makefile.am49
-rw-r--r--schedsim/shell/schedsim_cbs/config.c14
-rw-r--r--schedsim/shell/schedsim_cluster01/Makefile.am61
-rw-r--r--schedsim/shell/schedsim_cluster01/config.c47
-rw-r--r--schedsim/shell/schedsim_cluster02/Makefile.am61
-rw-r--r--schedsim/shell/schedsim_cluster02/config.c49
-rw-r--r--schedsim/shell/schedsim_edf/Makefile.am49
-rw-r--r--schedsim/shell/schedsim_edf/config.c14
-rw-r--r--schedsim/shell/schedsim_priority/config.c5
-rw-r--r--schedsim/shell/schedsim_simple/config.c5
-rw-r--r--schedsim/shell/schedsim_smppriority/config.c5
-rw-r--r--schedsim/shell/schedsim_smppriority_affinity/config.c5
-rw-r--r--schedsim/shell/schedsim_smpsimple/config.c5
-rw-r--r--schedsim/shell/shared/Makefile.am1
-rw-r--r--schedsim/shell/shared/commands.c2
-rw-r--r--schedsim/shell/shared/main_rtemsinit.c7
-rw-r--r--schedsim/shell/shared/main_taskscheduler.c105
-rw-r--r--schedsim/shell/shared/schedsim_shell.h5
22 files changed, 569 insertions, 6 deletions
diff --git a/schedsim/UsingTheSchedulerSimulator.txt b/schedsim/UsingTheSchedulerSimulator.txt
index ca63df8..f4d4630 100644
--- a/schedsim/UsingTheSchedulerSimulator.txt
+++ b/schedsim/UsingTheSchedulerSimulator.txt
@@ -245,8 +245,30 @@ task_resume Command
^^^^^^^^^^^^^^^^^^^
*Usage*: task_resume name|id
-This command is used to suspend the specified task. It is the equivalent
-of the rtems_task_suspend directive in the Classic API.
+This command is used to resume the specified task. It is the equivalent
+of the rtems_task_resume directive in the Classic API.
+
+task_set_scheduler
+^^^^^^^^^^^^^^^^^^
+*Usage*: task_set_scheduler Task name|id Scheduler number
+
+This command is used to modified the select a scheduler cluster.
+
+For example on a system configured with scheduler 0 being a
+Priority SMP Scheduler and scheduler 1 configured as Priority
+Affinity SMP Scheduler
+
+The following is the output from the invocation task_set_scheduler TA1 1
+
+-------------------------------------------------------------
+Task (0x0a010001) on Priority Affinity SMP Scheduler
+-------------------------------------------------------------
+
+The following is the output from the invocation task_set_scheduler TA1 0
+
+-------------------------------------------------------------
+Task (0x0a010001) on Priority SMP Scheduler
+-------------------------------------------------------------
task_suspend Command
^^^^^^^^^^^^^^^^^^^^
diff --git a/schedsim/configure.ac b/schedsim/configure.ac
index bd1f41e..ff9ed7a 100644
--- a/schedsim/configure.ac
+++ b/schedsim/configure.ac
@@ -189,8 +189,12 @@ shell/Makefile
shell/shared/Makefile
shell/schedsim_priority/Makefile
shell/schedsim_simple/Makefile
+shell/schedsim_cbs/Makefile
+shell/schedsim_edf/Makefile
shell/schedsim_smpsimple/Makefile
shell/schedsim_smppriority/Makefile
shell/schedsim_smppriority_affinity/Makefile
+shell/schedsim_cluster01/Makefile
+shell/schedsim_cluster02/Makefile
])
AC_OUTPUT
diff --git a/schedsim/rtems/Makefile.am b/schedsim/rtems/Makefile.am
index eacf2e6..9db8293 100644
--- a/schedsim/rtems/Makefile.am
+++ b/schedsim/rtems/Makefile.am
@@ -111,6 +111,36 @@ librtems_a_SOURCES += $(cpukitdir)/score/src/schedulersimpleschedule.c
librtems_a_SOURCES += $(cpukitdir)/score/src/schedulersimpleunblock.c
librtems_a_SOURCES += $(cpukitdir)/score/src/schedulersimpleyield.c
+# Uniprocessor Scheduler CBS
+librtems_a_SOURCES += $(cpukitdir)/score/src
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsattachthread.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbscreateserver.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsgetapprovedbudget.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsgetremainingbudget.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsreleasejob.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbs.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsdestroyserver.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsgetexecutiontime.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsgetserverid.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbssetparameters.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbscleanup.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsdetachthread.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsgetparameters.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsnodeinit.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/schedulercbsunblock.c
+
+# Uniprocessor Scheduler EDF
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfblock.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfchangepriority.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfprioritycompare.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfschedule.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfupdate.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredf.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfnodeinit.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfreleasejob.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfunblock.c
+librtems_a_SOURCES += $(cpukitdir)/score/src/scheduleredfyield.c
+
librtems_a_SOURCES += $(cpukitdir)/score/src/thread.c
librtems_a_SOURCES += $(cpukitdir)/score/src/threadchangepriority.c
librtems_a_SOURCES += $(cpukitdir)/score/src/threadclearstate.c
@@ -255,6 +285,9 @@ librtems_a_SOURCES += $(cpukitdir)/score/src/schedulersmpstartidle.c
librtems_a_SOURCES += $(cpukitdir)/score/src/cpuset.c
librtems_a_SOURCES += $(cpukitdir)/rtems/src/taskgetaffinity.c
librtems_a_SOURCES += $(cpukitdir)/rtems/src/tasksetaffinity.c
+librtems_a_SOURCES += $(cpukitdir)/rtems/src/schedulerident.c
+librtems_a_SOURCES += $(cpukitdir)/rtems/src/schedulergetprocessorset.c
+librtems_a_SOURCES += $(cpukitdir)/rtems/src/tasksetscheduler.c
endif
schedsim_includedir = $(includedir)/schedsim
diff --git a/schedsim/shell/Makefile.am b/schedsim/shell/Makefile.am
index d920e37..46a8ddd 100644
--- a/schedsim/shell/Makefile.am
+++ b/schedsim/shell/Makefile.am
@@ -1,15 +1,30 @@
ACLOCAL_AMFLAGS = -I ./../aclocal
-SUBDIRS = shared schedsim_priority schedsim_simple
-DIST_SUBDIRS = shared schedsim_priority schedsim_simple
+SUBDIRS = shared
+SUBDIRS += schedsim_priority
+SUBDIRS += schedsim_simple
+SUBDIRS += schedsim_cbs
+SUBDIRS += schedsim_edf
+
+DIST_SUBDIRS = shared
+DIST_SUBDIRS += shared
+DIST_SUBDIRS += schedsim_priority
+DIST_SUBDIRS += schedsim_simple
+DIST_SUBDIRS += schedsim_cbs
+DIST_SUBDIRS += schedsim_edf
if HAS_SMP
SUBDIRS += schedsim_smpsimple
-DIST_SUBDIRS += schedsim_smpsimple
SUBDIRS += schedsim_smppriority
-DIST_SUBDIRS += schedsim_smppriority
SUBDIRS += schedsim_smppriority_affinity
+SUBDIRS += schedsim_cluster01
+SUBDIRS += schedsim_cluster02
+
+DIST_SUBDIRS += schedsim_smpsimple
+DIST_SUBDIRS += schedsim_smppriority
DIST_SUBDIRS += schedsim_smppriority_affinity
+DIST_SUBDIRS += schedsim_cluster01
+DIST_SUBDIRS += schedsim_cluster02
endif
include $(top_srcdir)/../automake/subdirs.am
diff --git a/schedsim/shell/schedsim_cbs/Makefile.am b/schedsim/shell/schedsim_cbs/Makefile.am
new file mode 100644
index 0000000..bd7f08e
--- /dev/null
+++ b/schedsim/shell/schedsim_cbs/Makefile.am
@@ -0,0 +1,49 @@
+bin_PROGRAMS = schedsim_cbs
+schedsim_cbs_SOURCES = config.c
+schedsim_cbs_SOURCES += $(srcdir)/../shared/add_commands_stub.c
+
+cpukitdir=@rtems_srcdir@/cpukit
+schedsim_cbs_CPPFLAGS = -I$(top_builddir)/score/include
+schedsim_cbs_CPPFLAGS += -I$(srcdir)/sched_cpu
+schedsim_cbs_CPPFLAGS += -I$(srcdir)/../../rtems
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/include
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/score/include
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/score/inline
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/rtems/include
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/rtems/inline
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/sapi/include
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/sapi/inline
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/libcsupport/include
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/libmisc/stringto
+schedsim_cbs_CPPFLAGS += -I$(srcdir)/../../rtems/sched_cpu
+schedsim_cbs_CPPFLAGS += -I$(srcdir)/../shared/include
+schedsim_cbs_CPPFLAGS += -I$(srcdir)/../shared
+if HAS_PTHREADS
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/posix/include
+schedsim_cbs_CPPFLAGS += -I$(cpukitdir)/posix/inline
+endif
+
+## Ensure all linker provided symbols are available
+schedsim_cbs_LDFLAGS =
+schedsim_cbs_LDFLAGS += -Wl,--defsym=_TLS_Data_begin=0
+schedsim_cbs_LDFLAGS += -Wl,--defsym=_TLS_BSS_end=0
+schedsim_cbs_LDFLAGS += -Wl,--defsym=_TLS_Alignment=4
+
+## Wrap _Thread_Dispatch so we can see context switches
+schedsim_cbs_LDFLAGS += -Wl,--wrap=_Thread_Dispatch
+
+## Link in all support libraries
+## schedsim_cbsLDADD +=-Wl,--start-group
+schedsim_cbs_LDADD = ../shared/libschedsim.a
+schedsim_cbs_LDADD += ../../rtems/librtems.a
+schedsim_cbs_LDADD += ../shared/libschedsim.a
+## schedsim_cbs_LDADD +=-Wl,--end-group
+
+check-local:
+ @echo Running tests from Uniprocessor Deterministic Priority
+ $(srcdir)/../run_scenarios \
+ -s $(builddir)/schedsim_cbs \
+ -S $(srcdir)/../schedsim_priority \
+ -A
+
+include $(top_srcdir)/../automake/host.am
diff --git a/schedsim/shell/schedsim_cbs/config.c b/schedsim/shell/schedsim_cbs/config.c
new file mode 100644
index 0000000..d6425ed
--- /dev/null
+++ b/schedsim/shell/schedsim_cbs/config.c
@@ -0,0 +1,14 @@
+#include <rtems.h>
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+""
+};
+
+#define CONFIGURE_INIT
+#define CONFIGURE_MAXIMUM_TASKS 1000
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1000
+
+#define CONFIGURE_SCHEDULER_CBS
+#define CONFIGURE_DISABLE_BSP_SETTINGS
+#include <confdefs.h>
diff --git a/schedsim/shell/schedsim_cluster01/Makefile.am b/schedsim/shell/schedsim_cluster01/Makefile.am
new file mode 100644
index 0000000..9b70554
--- /dev/null
+++ b/schedsim/shell/schedsim_cluster01/Makefile.am
@@ -0,0 +1,61 @@
+bin_PROGRAMS = schedsim_cluster01
+
+SOURCES = config.c
+SOURCES += $(srcdir)/../schedsim_smpsimple/add_commands.c
+SOURCES += $(srcdir)/../schedsim_smpsimple/main_dump_ready_tasks.c
+schedsim_cluster01_SOURCES = $(SOURCES)
+
+cpukitdir=@rtems_srcdir@/cpukit
+schedsim_cluster01_CPPFLAGS = -I$(top_builddir)/score/include
+schedsim_cluster01_CPPFLAGS += -I$(srcdir)/sched_cpu
+schedsim_cluster01_CPPFLAGS += -I$(srcdir)/../../rtems
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/include
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/score/include
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/score/inline
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/rtems/include
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/rtems/inline
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/sapi/include
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/sapi/inline
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/libcsupport/include
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/libmisc/stringto
+schedsim_cluster01_CPPFLAGS += -I$(srcdir)/../../rtems/sched_cpu
+schedsim_cluster01_CPPFLAGS += -I$(srcdir)/../shared/include
+schedsim_cluster01_CPPFLAGS += -I$(srcdir)/../shared
+if HAS_PTHREADS
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/posix/include
+schedsim_cluster01_CPPFLAGS += -I$(cpukitdir)/posix/inline
+endif
+## Ensure all linker provided symbols are available
+schedsim_cluster01_LDFLAGS =
+schedsim_cluster01_LDFLAGS += -Wl,--defsym=_TLS_Data_begin=0
+schedsim_cluster01_LDFLAGS += -Wl,--defsym=_TLS_BSS_end=0
+schedsim_cluster01_LDFLAGS += -Wl,--defsym=_TLS_Alignment=4
+
+## Wrap _Thread_Dispatch so we can see context switches
+schedsim_cluster01_LDFLAGS +=-Wl,--wrap=_Thread_Dispatch
+
+## schedsim_cluster01_LDADD +=-Wl,--start-group
+schedsim_cluster01_LDADD = ../shared/libschedsim.a
+schedsim_cluster01_LDADD += ../../rtems/librtems.a
+schedsim_cluster01_LDADD += ../shared/libschedsim.a
+## schedsim_cluster01_LDADD +=-Wl,--end-group
+
+check-local:
+ @echo Running tests from SMP Priority Affinity
+ $(srcdir)/../run_scenarios \
+ -s $(builddir)/schedsim_cluster01 \
+ -S $(srcdir) \
+ -A
+ @echo Running tests from SMP Simple Priority
+ $(srcdir)/../run_scenarios \
+ -s $(builddir)/schedsim_cluster01 \
+ -S $(srcdir)/../schedsim_smpsimple \
+ -A
+ @echo Running tests from Uniprocessor Deterministic Priority
+ $(srcdir)/../run_scenarios \
+ -s $(builddir)/schedsim_cluster01 \
+ -S $(srcdir)/../schedsim_priority \
+ script02.scen script04.scen script05.scen script06.scen
+
+
+include $(top_srcdir)/../automake/host.am
diff --git a/schedsim/shell/schedsim_cluster01/config.c b/schedsim/shell/schedsim_cluster01/config.c
new file mode 100644
index 0000000..ab1bcbc
--- /dev/null
+++ b/schedsim/shell/schedsim_cluster01/config.c
@@ -0,0 +1,47 @@
+/**
+ * @file
+ *
+ * Configuration file for Scheduler Simulator using Priority SMP
+ */
+
+#include <rtems.h>
+
+#define CONFIGURE_INIT
+#define CONFIGURE_MAXIMUM_TASKS 1000
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1000
+
+#define CONFIGURE_MAXIMUM_PRIORITY 255
+
+#define CONFIGURE_SMP_APPLICATION
+#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 4
+#define CONFIGURE_SCHEDULER_PRIORITY_SMP
+#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
+
+#include <rtems/scheduler.h>
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+"Priority SMP Scheduler",
+"Priority Affinity SMP Scheduler",
+""
+};
+
+RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(a, CONFIGURE_MAXIMUM_PRIORITY + 1);
+RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP(
+ b,
+ CONFIGURE_MAXIMUM_PRIORITY + 1
+);
+
+#define CONFIGURE_SCHEDULER_CONTROLS \
+ RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(a, SCHED_NAME(0)), \
+ RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP(b, SCHED_NAME(1))
+
+#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
+ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
+
+
+#define CONFIGURE_DISABLE_BSP_SETTINGS
+#include <rtems/confdefs.h>
diff --git a/schedsim/shell/schedsim_cluster02/Makefile.am b/schedsim/shell/schedsim_cluster02/Makefile.am
new file mode 100644
index 0000000..3038a35
--- /dev/null
+++ b/schedsim/shell/schedsim_cluster02/Makefile.am
@@ -0,0 +1,61 @@
+bin_PROGRAMS = schedsim_cluster02
+
+SOURCES = config.c
+SOURCES += $(srcdir)/../schedsim_smpsimple/add_commands.c
+SOURCES += $(srcdir)/../schedsim_smpsimple/main_dump_ready_tasks.c
+schedsim_cluster02_SOURCES = $(SOURCES)
+
+cpukitdir=@rtems_srcdir@/cpukit
+schedsim_cluster02_CPPFLAGS = -I$(top_builddir)/score/include
+schedsim_cluster02_CPPFLAGS += -I$(srcdir)/sched_cpu
+schedsim_cluster02_CPPFLAGS += -I$(srcdir)/../../rtems
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/include
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/score/include
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/score/inline
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/rtems/include
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/rtems/inline
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/sapi/include
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/sapi/inline
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/libcsupport/include
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/libmisc/stringto
+schedsim_cluster02_CPPFLAGS += -I$(srcdir)/../../rtems/sched_cpu
+schedsim_cluster02_CPPFLAGS += -I$(srcdir)/../shared/include
+schedsim_cluster02_CPPFLAGS += -I$(srcdir)/../shared
+if HAS_PTHREADS
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/posix/include
+schedsim_cluster02_CPPFLAGS += -I$(cpukitdir)/posix/inline
+endif
+## Ensure all linker provided symbols are available
+schedsim_cluster02_LDFLAGS =
+schedsim_cluster02_LDFLAGS += -Wl,--defsym=_TLS_Data_begin=0
+schedsim_cluster02_LDFLAGS += -Wl,--defsym=_TLS_BSS_end=0
+schedsim_cluster02_LDFLAGS += -Wl,--defsym=_TLS_Alignment=4
+
+## Wrap _Thread_Dispatch so we can see context switches
+schedsim_cluster02_LDFLAGS +=-Wl,--wrap=_Thread_Dispatch
+
+## schedsim_cluster02_LDADD +=-Wl,--start-group
+schedsim_cluster02_LDADD = ../shared/libschedsim.a
+schedsim_cluster02_LDADD += ../../rtems/librtems.a
+schedsim_cluster02_LDADD += ../shared/libschedsim.a
+## schedsim_cluster02_LDADD +=-Wl,--end-group
+
+check-local:
+ @echo Running tests from SMP Priority Affinity
+ $(srcdir)/../run_scenarios \
+ -s $(builddir)/schedsim_cluster02 \
+ -S $(srcdir) \
+ -A
+ @echo Running tests from SMP Simple Priority
+ $(srcdir)/../run_scenarios \
+ -s $(builddir)/schedsim_cluster02 \
+ -S $(srcdir)/../schedsim_smpsimple \
+ -A
+ @echo Running tests from Uniprocessor Deterministic Priority
+ $(srcdir)/../run_scenarios \
+ -s $(builddir)/schedsim_cluster02 \
+ -S $(srcdir)/../schedsim_priority \
+ script02.scen script04.scen script05.scen script06.scen
+
+
+include $(top_srcdir)/../automake/host.am
diff --git a/schedsim/shell/schedsim_cluster02/config.c b/schedsim/shell/schedsim_cluster02/config.c
new file mode 100644
index 0000000..67f62c0
--- /dev/null
+++ b/schedsim/shell/schedsim_cluster02/config.c
@@ -0,0 +1,49 @@
+/**
+ * @file
+ *
+ * Configuration file for Scheduler Simulator using Priority SMP
+ */
+
+#include <rtems.h>
+
+#define CONFIGURE_INIT
+#define CONFIGURE_MAXIMUM_TASKS 1000
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1000
+
+#define CONFIGURE_MAXIMUM_PRIORITY 255
+
+#define CONFIGURE_SMP_APPLICATION
+#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 4
+#define CONFIGURE_SCHEDULER_PRIORITY
+// #define CONFIGURE_SCHEDULER_PRIORITY_SMP
+#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
+
+#include <rtems/scheduler.h>
+
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+"Priority Scheduler",
+"Priority Affinity SMP Scheduler",
+""
+};
+
+RTEMS_SCHEDULER_CONTEXT_PRIORITY(a, CONFIGURE_MAXIMUM_PRIORITY + 1);
+RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP(
+ b,
+ CONFIGURE_MAXIMUM_PRIORITY + 1
+);
+
+#define CONFIGURE_SCHEDULER_CONTROLS \
+ RTEMS_SCHEDULER_CONTROL_PRIORITY(a, SCHED_NAME(0)), \
+ RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP(b, SCHED_NAME(1))
+
+#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
+ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
+
+
+#define CONFIGURE_DISABLE_BSP_SETTINGS
+#include <rtems/confdefs.h>
diff --git a/schedsim/shell/schedsim_edf/Makefile.am b/schedsim/shell/schedsim_edf/Makefile.am
new file mode 100644
index 0000000..7555ee6
--- /dev/null
+++ b/schedsim/shell/schedsim_edf/Makefile.am
@@ -0,0 +1,49 @@
+bin_PROGRAMS = schedsim_edf
+schedsim_edf_SOURCES = config.c
+schedsim_edf_SOURCES += $(srcdir)/../shared/add_commands_stub.c
+
+cpukitdir=@rtems_srcdir@/cpukit
+schedsim_edf_CPPFLAGS = -I$(top_builddir)/score/include
+schedsim_edf_CPPFLAGS += -I$(srcdir)/sched_cpu
+schedsim_edf_CPPFLAGS += -I$(srcdir)/../../rtems
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/include
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/score/include
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/score/inline
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/rtems/include
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/rtems/inline
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/sapi/include
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/sapi/inline
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/libcsupport/include
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/libmisc/stringto
+schedsim_edf_CPPFLAGS += -I$(srcdir)/../../rtems/sched_cpu
+schedsim_edf_CPPFLAGS += -I$(srcdir)/../shared/include
+schedsim_edf_CPPFLAGS += -I$(srcdir)/../shared
+if HAS_PTHREADS
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/posix/include
+schedsim_edf_CPPFLAGS += -I$(cpukitdir)/posix/inline
+endif
+
+## Ensure all linker provided symbols are available
+schedsim_edf_LDFLAGS =
+schedsim_edf_LDFLAGS += -Wl,--defsym=_TLS_Data_begin=0
+schedsim_edf_LDFLAGS += -Wl,--defsym=_TLS_BSS_end=0
+schedsim_edf_LDFLAGS += -Wl,--defsym=_TLS_Alignment=4
+
+## Wrap _Thread_Dispatch so we can see context switches
+schedsim_edf_LDFLAGS += -Wl,--wrap=_Thread_Dispatch
+
+## Link in all support libraries
+## schedsim_edfLDADD +=-Wl,--start-group
+schedsim_edf_LDADD = ../shared/libschedsim.a
+schedsim_edf_LDADD += ../../rtems/librtems.a
+schedsim_edf_LDADD += ../shared/libschedsim.a
+## schedsim_edf_LDADD +=-Wl,--end-group
+
+check-local:
+ @echo Running tests from Uniprocessor Deterministic Priority
+ $(srcdir)/../run_scenarios \
+ -s $(builddir)/schedsim_edf \
+ -S $(srcdir)/../schedsim_priority \
+ -A
+
+include $(top_srcdir)/../automake/host.am
diff --git a/schedsim/shell/schedsim_edf/config.c b/schedsim/shell/schedsim_edf/config.c
new file mode 100644
index 0000000..ac1e415
--- /dev/null
+++ b/schedsim/shell/schedsim_edf/config.c
@@ -0,0 +1,14 @@
+#include <rtems.h>
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+""
+};
+
+#define CONFIGURE_INIT
+#define CONFIGURE_MAXIMUM_TASKS 1000
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1000
+
+#define CONFIGURE_SCHEDULER_EDF
+#define CONFIGURE_DISABLE_BSP_SETTINGS
+#include <confdefs.h>
diff --git a/schedsim/shell/schedsim_priority/config.c b/schedsim/shell/schedsim_priority/config.c
index 332b326..378c37b 100644
--- a/schedsim/shell/schedsim_priority/config.c
+++ b/schedsim/shell/schedsim_priority/config.c
@@ -1,4 +1,9 @@
#include <rtems.h>
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+""
+};
#define CONFIGURE_INIT
#define CONFIGURE_MAXIMUM_TASKS 1000
diff --git a/schedsim/shell/schedsim_simple/config.c b/schedsim/shell/schedsim_simple/config.c
index 5322dc1..e20abd5 100644
--- a/schedsim/shell/schedsim_simple/config.c
+++ b/schedsim/shell/schedsim_simple/config.c
@@ -1,4 +1,9 @@
#include <rtems.h>
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+""
+};
#define CONFIGURE_INIT
#define CONFIGURE_MAXIMUM_TASKS 1000
diff --git a/schedsim/shell/schedsim_smppriority/config.c b/schedsim/shell/schedsim_smppriority/config.c
index 04d00d2..10ce775 100644
--- a/schedsim/shell/schedsim_smppriority/config.c
+++ b/schedsim/shell/schedsim_smppriority/config.c
@@ -5,6 +5,11 @@
*/
#include <rtems.h>
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+""
+};
#define CONFIGURE_INIT
#define CONFIGURE_MAXIMUM_TASKS 1000
diff --git a/schedsim/shell/schedsim_smppriority_affinity/config.c b/schedsim/shell/schedsim_smppriority_affinity/config.c
index 25395df..4311e71 100644
--- a/schedsim/shell/schedsim_smppriority_affinity/config.c
+++ b/schedsim/shell/schedsim_smppriority_affinity/config.c
@@ -5,6 +5,11 @@
*/
#include <rtems.h>
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+""
+};
#define CONFIGURE_INIT
#define CONFIGURE_MAXIMUM_TASKS 1000
diff --git a/schedsim/shell/schedsim_smpsimple/config.c b/schedsim/shell/schedsim_smpsimple/config.c
index 49516bc..8f7b8c8 100644
--- a/schedsim/shell/schedsim_smpsimple/config.c
+++ b/schedsim/shell/schedsim_smpsimple/config.c
@@ -5,6 +5,11 @@
*/
#include <rtems.h>
+#include <schedsim_shell.h>
+
+shell_scheduler_name shell_scheduler_list[] = {
+""
+};
#define CONFIGURE_INIT
#define CONFIGURE_MAXIMUM_TASKS 1000
diff --git a/schedsim/shell/shared/Makefile.am b/schedsim/shell/shared/Makefile.am
index d999816..ed5b99f 100644
--- a/schedsim/shell/shared/Makefile.am
+++ b/schedsim/shell/shared/Makefile.am
@@ -48,6 +48,7 @@ libschedsim_a_SOURCES += main_taskdelete.c
libschedsim_a_SOURCES += main_taskmode.c
libschedsim_a_SOURCES += main_taskpriority.c
libschedsim_a_SOURCES += main_taskresume.c
+libschedsim_a_SOURCES += main_taskscheduler.c
libschedsim_a_SOURCES += main_tasksuspend.c
libschedsim_a_SOURCES += main_taskwakeafter.c
libschedsim_a_SOURCES += printheir_executing.c
diff --git a/schedsim/shell/shared/commands.c b/schedsim/shell/shared/commands.c
index 5a75181..f61227e 100644
--- a/schedsim/shell/shared/commands.c
+++ b/schedsim/shell/shared/commands.c
@@ -28,6 +28,7 @@ extern rtems_shell_cmd_t rtems_shell_TASK_CREATE_Command;
extern rtems_shell_cmd_t rtems_shell_TASK_DELETE_Command;
extern rtems_shell_cmd_t rtems_shell_TASK_MODE_Command;
extern rtems_shell_cmd_t rtems_shell_TASK_PRIORITY_Command;
+extern rtems_shell_cmd_t rtems_shell_TASK_SET_SCHEDULER_Command;
extern rtems_shell_cmd_t rtems_shell_TASK_SUSPEND_Command;
extern rtems_shell_cmd_t rtems_shell_TASK_RESUME_Command;
extern rtems_shell_cmd_t rtems_shell_TASK_WAKE_AFTER_Command;
@@ -62,6 +63,7 @@ rtems_shell_cmd_t *rtems_shell_Initial_commands[] = {
&rtems_shell_TASK_DELETE_Command,
&rtems_shell_TASK_MODE_Command,
&rtems_shell_TASK_PRIORITY_Command,
+ &rtems_shell_TASK_SET_SCHEDULER_Command,
&rtems_shell_TASK_SUSPEND_Command,
&rtems_shell_TASK_RESUME_Command,
&rtems_shell_TASK_WAKE_AFTER_Command,
diff --git a/schedsim/shell/shared/main_rtemsinit.c b/schedsim/shell/shared/main_rtemsinit.c
index ad2b14f..a1afcb6 100644
--- a/schedsim/shell/shared/main_rtemsinit.c
+++ b/schedsim/shell/shared/main_rtemsinit.c
@@ -32,6 +32,8 @@ int rtems_shell_main_rtems_init(
char *argv[]
)
{
+ int i;
+
#if defined(RTEMS_SMP)
long cpus = 1;
@@ -44,6 +46,11 @@ int rtems_shell_main_rtems_init(
Schedsim_Maximum_CPUs_From_Command_Line = cpus;
#endif
+ for (i=0; strcmp("", shell_scheduler_list[i]) != 0; i++)
+ {
+ printf("Scheduler %d: %s\n", i, shell_scheduler_list[i]);
+ }
+
//
// Initialize RTEMS
//
diff --git a/schedsim/shell/shared/main_taskscheduler.c b/schedsim/shell/shared/main_taskscheduler.c
new file mode 100644
index 0000000..6adc215
--- /dev/null
+++ b/schedsim/shell/shared/main_taskscheduler.c
@@ -0,0 +1,105 @@
+/*
+ * Task Create Shell Command Implmentation
+ *
+ * COPYRIGHT (c) 1989-2013.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#if defined(RTEMS_SMP)
+#define _GNU_SOURCE
+#include <sys/cpuset.h>
+#endif
+
+#include <stdio.h>
+
+#define __need_getopt_newlib
+#include <newlib/getopt.h>
+
+#include <rtems.h>
+#include "shell.h"
+#include <rtems/stringto.h>
+#include <schedsim_shell.h>
+#include <rtems/error.h>
+
+int rtems_shell_main_task_set_scheduler(
+ int argc,
+ char *argv[]
+)
+{
+ rtems_id task_id;
+ rtems_id scheduler_id;
+ rtems_status_code status;
+ rtems_name name;
+ long sched;
+ bool ok = true;
+
+ CHECK_RTEMS_IS_UP();
+
+ if (strcmp("", shell_scheduler_list[0]) == 0)
+ {
+ fprintf(stderr, "Cluster Scheduling not configured\n");
+ return -1;
+ }
+
+ if (argc != 3)
+ ok = false;
+
+ if ( lookup_task( argv[1], &task_id ) )
+ ok = false;
+
+ if (!ok)
+ {
+ fprintf( stderr, "%s: Usage [task name|id] [sheduler number] \n", argv[0] );
+ return -1;
+ }
+
+ if ( rtems_string_to_long(argv[2], &sched, NULL, 0) ) {
+ fprintf( stderr, "Schedule argument (%s) is not a number\n", argv[2] );
+ return -1;
+ }
+
+ name = SCHED_NAME(sched);
+
+ status = rtems_scheduler_ident( name, &scheduler_id );
+ if ( status != RTEMS_SUCCESSFUL ) {
+ fprintf(
+ stderr,
+ "Task scheduler id (%d) returned %s\n",
+ sched,
+ rtems_status_text( status )
+ );
+ return -1;
+ }
+
+ printf("Task (0x%08x) on %s\n", task_id, shell_scheduler_list[sched] );
+
+ status = rtems_task_set_scheduler(task_id, scheduler_id );
+ if ( status != RTEMS_SUCCESSFUL ) {
+ fprintf(
+ stderr,
+ "Task set scheduler(%s) returned %s\n",
+ argv[1],
+ rtems_status_text( status )
+ );
+ return -1;
+ }
+
+ return 0;
+}
+
+rtems_shell_cmd_t rtems_shell_TASK_SET_SCHEDULER_Command = {
+ "task_set_scheduler", /* name */
+ "task_set_scheduler task_name scheduler_name", /* usage */
+ "rtems", /* topic */
+ rtems_shell_main_task_set_scheduler, /* command */
+ NULL, /* alias */
+ NULL /* next */
+};
diff --git a/schedsim/shell/shared/schedsim_shell.h b/schedsim/shell/shared/schedsim_shell.h
index d9bdb84..08345c9 100644
--- a/schedsim/shell/shared/schedsim_shell.h
+++ b/schedsim/shell/shared/schedsim_shell.h
@@ -25,6 +25,11 @@
extern "C" {
#endif
+#define SCHED_NAME(i) rtems_build_name(' ', ' ', ' ', (char) ('A' + (i)))
+
+typedef char * shell_scheduler_name;
+extern shell_scheduler_name shell_scheduler_list[];
+
Thread_Control *get_thread_executing(void);
Thread_Control *get_thread_heir(void);