[rtems-schedsim commit] _Thread_Dispatch wrapper is now shared between uniprocessor and SMP configurations

Joel Sherrill joel at rtems.org
Mon May 26 18:18:37 UTC 2014


Module:    rtems-schedsim
Branch:    master
Commit:    e5e757bac9112ef453d18c3e7326f39ffde36a51
Changeset: http://git.rtems.org/rtems-schedsim/commit/?id=e5e757bac9112ef453d18c3e7326f39ffde36a51

Author:    Joel Sherrill <joel.sherrill at oarcorp.com>
Date:      Mon May 26 13:26:41 2014 -0500

_Thread_Dispatch wrapper is now shared between uniprocessor and SMP configurations

---

 schedsim/shell/schedsim_priority/Makefile.am       |    1 -
 .../shell/schedsim_priority/wrap_thread_dispatch.c |   55 --------------------
 schedsim/shell/schedsim_smppriority/Makefile.am    |    1 -
 .../schedsim_smppriority_affinity/Makefile.am      |    1 -
 schedsim/shell/schedsim_smpsimple/Makefile.am      |    1 -
 schedsim/shell/shared/Makefile.am                  |    1 +
 schedsim/shell/shared/smp_stub.c                   |    7 ++-
 .../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
similarity index 88%
rename from schedsim/shell/schedsim_smpsimple/wrap_thread_dispatch.c
rename to 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();




More information about the vc mailing list