summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2014-05-26 13:26:41 -0500
committerJoel Sherrill <joel.sherrill@oarcorp.com>2014-05-26 13:26:41 -0500
commite5e757bac9112ef453d18c3e7326f39ffde36a51 (patch)
tree1d29ed59237bdffa9ec3e5a4db984374a8c56488
parentUnify printing of heir and executing (diff)
downloadrtems-schedsim-e5e757bac9112ef453d18c3e7326f39ffde36a51.tar.bz2
_Thread_Dispatch wrapper is now shared between uniprocessor and SMP configurations
-rw-r--r--schedsim/shell/schedsim_priority/Makefile.am1
-rw-r--r--schedsim/shell/schedsim_priority/wrap_thread_dispatch.c55
-rw-r--r--schedsim/shell/schedsim_smppriority/Makefile.am1
-rw-r--r--schedsim/shell/schedsim_smppriority_affinity/Makefile.am1
-rw-r--r--schedsim/shell/schedsim_smpsimple/Makefile.am1
-rw-r--r--schedsim/shell/shared/Makefile.am1
-rw-r--r--schedsim/shell/shared/smp_stub.c7
-rw-r--r--schedsim/shell/shared/wrap_thread_dispatch.c (renamed from schedsim/shell/schedsim_smpsimple/wrap_thread_dispatch.c)14
8 files changed, 17 insertions, 64 deletions
diff --git a/schedsim/shell/schedsim_priority/Makefile.am b/schedsim/shell/schedsim_priority/Makefile.am
index 7f35bfd..b33a076 100644
--- a/schedsim/shell/schedsim_priority/Makefile.am
+++ b/schedsim/shell/schedsim_priority/Makefile.am
@@ -1,6 +1,5 @@
bin_PROGRAMS = schedsim_priority
schedsim_priority_SOURCES = config.c
-schedsim_priority_SOURCES += wrap_thread_dispatch.c
schedsim_priority_SOURCES += $(srcdir)/../shared/add_commands_stub.c
cpukitdir=@rtems_srcdir@/cpukit
diff --git a/schedsim/shell/schedsim_priority/wrap_thread_dispatch.c b/schedsim/shell/schedsim_priority/wrap_thread_dispatch.c
deleted file mode 100644
index a308857..0000000
--- a/schedsim/shell/schedsim_priority/wrap_thread_dispatch.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * @file
- *
- * @brief Thread Dispatch Wrapper Implmentation
- */
-
-/*
- * COPYRIGHT (c) 1989-2014.
- * 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.
- */
-
-#include "shell.h"
-#include <schedsim_shell.h>
-
-#include <stdio.h>
-#include <rtems.h>
-
-Thread_Control *last_heir = NULL;
-Thread_Control *last_executing = NULL;
-
-extern void __real__Thread_Dispatch(void);
-
-void Init__wrap__Thread_Dispatch()
-{
-}
-
-void check_heir_and_executing(void)
-{
- uint32_t level;
-
- _ISR_Disable_without_giant( level );
- if ( last_heir != _Thread_Heir )
- PRINT_HEIR();
-
- if ( last_executing != _Thread_Executing )
- PRINT_EXECUTING();
-
- last_heir = _Thread_Heir;
- last_executing = _Thread_Executing;
- _ISR_Enable_without_giant( level );
-}
-
-void __wrap__Thread_Dispatch(void)
-{
- if ( schedsim_is_dispatch_allowed() == false )
- return;
-
- check_heir_and_executing();
- __real__Thread_Dispatch();
- check_heir_and_executing();
-}
diff --git a/schedsim/shell/schedsim_smppriority/Makefile.am b/schedsim/shell/schedsim_smppriority/Makefile.am
index 5411537..1da1c98 100644
--- a/schedsim/shell/schedsim_smppriority/Makefile.am
+++ b/schedsim/shell/schedsim_smppriority/Makefile.am
@@ -3,7 +3,6 @@ bin_PROGRAMS = schedsim_smppriority
SOURCES = config.c
SOURCES += $(srcdir)/../schedsim_smpsimple/add_commands.c
SOURCES += $(srcdir)/../schedsim_smpsimple/main_dump_ready_tasks.c
-SOURCES += $(srcdir)/../schedsim_smpsimple/wrap_thread_dispatch.c
schedsim_smppriority_SOURCES = $(SOURCES)
cpukitdir=@rtems_srcdir@/cpukit
diff --git a/schedsim/shell/schedsim_smppriority_affinity/Makefile.am b/schedsim/shell/schedsim_smppriority_affinity/Makefile.am
index 641f7ef..5e92a45 100644
--- a/schedsim/shell/schedsim_smppriority_affinity/Makefile.am
+++ b/schedsim/shell/schedsim_smppriority_affinity/Makefile.am
@@ -3,7 +3,6 @@ bin_PROGRAMS = schedsim_smppriority_affinity
SOURCES = config.c
SOURCES += $(srcdir)/../schedsim_smpsimple/add_commands.c
SOURCES += $(srcdir)/../schedsim_smpsimple/main_dump_ready_tasks.c
-SOURCES += $(srcdir)/../schedsim_smpsimple/wrap_thread_dispatch.c
schedsim_smppriority_affinity_SOURCES = $(SOURCES)
cpukitdir=@rtems_srcdir@/cpukit
diff --git a/schedsim/shell/schedsim_smpsimple/Makefile.am b/schedsim/shell/schedsim_smpsimple/Makefile.am
index e57037a..bd73a32 100644
--- a/schedsim/shell/schedsim_smpsimple/Makefile.am
+++ b/schedsim/shell/schedsim_smpsimple/Makefile.am
@@ -3,7 +3,6 @@ schedsim_smpsimple_SOURCES =
schedsim_smpsimple_SOURCES += add_commands.c
schedsim_smpsimple_SOURCES += config.c
schedsim_smpsimple_SOURCES += main_dump_ready_tasks.c
-schedsim_smpsimple_SOURCES += wrap_thread_dispatch.c
cpukitdir=@rtems_srcdir@/cpukit
schedsim_smpsimple_CPPFLAGS = -I$(top_builddir)/score/include
diff --git a/schedsim/shell/shared/Makefile.am b/schedsim/shell/shared/Makefile.am
index af5b282..c6ba74f 100644
--- a/schedsim/shell/shared/Makefile.am
+++ b/schedsim/shell/shared/Makefile.am
@@ -52,6 +52,7 @@ libschedsim_a_SOURCES += printheir_executing.c
libschedsim_a_SOURCES += schedsim_disable_dispatch.c
libschedsim_a_SOURCES += shell_cmdset.c
libschedsim_a_SOURCES += shell_makeargs.c
+libschedsim_a_SOURCES += wrap_thread_dispatch.c
if HAS_SMP
libschedsim_a_SOURCES += smp_stub.c
libschedsim_a_SOURCES += main_currentcpu.c
diff --git a/schedsim/shell/shared/smp_stub.c b/schedsim/shell/shared/smp_stub.c
index cd73f4e..263f49e 100644
--- a/schedsim/shell/shared/smp_stub.c
+++ b/schedsim/shell/shared/smp_stub.c
@@ -16,8 +16,13 @@
#include <rtems/bspIo.h>
#include <stdlib.h>
+/*
+ * Actually owned by the _Thread_Dispatch() wrapper.
+ * This way the variable is available all the time.
+ */
+extern uint32_t Schedsim_Current_cpu;
+
#if RTEMS_SMP
- uint32_t Schedsim_Current_cpu;
extern uint32_t Schedsim_Maximum_CPUs_From_Command_Line;
#endif
diff --git a/schedsim/shell/schedsim_smpsimple/wrap_thread_dispatch.c b/schedsim/shell/shared/wrap_thread_dispatch.c
index 4661dc6..fae4f9f 100644
--- a/schedsim/shell/schedsim_smpsimple/wrap_thread_dispatch.c
+++ b/schedsim/shell/shared/wrap_thread_dispatch.c
@@ -17,22 +17,28 @@
#include <rtems.h>
typedef Thread_Control * Thread_Control_ptr;
-extern uint32_t Schedsim_Current_cpu;
+uint32_t Schedsim_Current_cpu = 0;
Thread_Control_ptr *last_heir = NULL;
Thread_Control_ptr *last_executing = NULL;
extern void __real__Thread_Dispatch(void);
+#if RTEMS_SMP
+ #define MAX_CPUS _SMP_Processor_count
+#else
+ #define MAX_CPUS 1
+#endif
+
void Init__wrap__Thread_Dispatch()
{
last_heir = (Thread_Control_ptr *) calloc(
sizeof( Thread_Control_ptr ),
- _SMP_Processor_count
+ MAX_CPUS
);
last_executing = (Thread_Control_ptr *) calloc(
sizeof( Thread_Control_ptr ),
- _SMP_Processor_count
+ MAX_CPUS
);
}
@@ -58,7 +64,7 @@ void __wrap__Thread_Dispatch(void)
uint32_t current_cpu;
current_cpu = Schedsim_Current_cpu;
- for ( cpu=0 ; cpu < _SMP_Processor_count ; cpu++ ) {
+ for ( cpu=0 ; cpu < MAX_CPUS ; cpu++ ) {
Schedsim_Current_cpu = cpu;
check_heir_and_executing();
__real__Thread_Dispatch();