Gaisler patches qemu leon3 testing

2017-06-29 Thread Cillian O'Donnell
Hi,

I am working with one of the Couverture-Qemu devs, Frederic Konrad to
merge a set of Gaisler patches for Leon 3 that is currently used in
the RSB-Qemu build. Original patches:

https://gaisler.org/qemu/0001-LEON3-Add-emulation-of-AMBA-plug-play.patch
https://gaisler.org/qemu/0002-LEON3-Build-AMBA-plug-and-play-records-from-high-lev.patch
https://gaisler.org/qemu/0003-LEON3-Init-UART-timers-and-CPU-if-we-run-a-RAM-image.patch

Frederic has fixed them up for upstream-Qemu master and  the changes
can be found here:

git clone https://github.com/FredKonrad/qemu.git -b leon3_fix_v1


He has tested it and everything looks fine on his end. From our
perspective though I ran the testsuite again and the changes have
produced 2 differences from the previous results posted.


cdtest.exe
BEFORE PATCHES: PASSED
AFTER PATCHES: FAILED

cxx_iostream.exe
BEFORE PATCHES: PASSED
AFTER PATCHES: INVALID

Is this a serious problem, does it need to be fixed before merging? If
so how would I go about fixing it?

Thanks,

Cillian.
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH 6/6] smptests/smpschededf01: New test

2017-06-29 Thread Sebastian Huber
Update #3056.
---
 testsuites/smptests/Makefile.am|   1 +
 testsuites/smptests/configure.ac   |   1 +
 testsuites/smptests/smpschededf01/Makefile.am  |  19 +++
 testsuites/smptests/smpschededf01/init.c   | 161 +
 .../smptests/smpschededf01/smpschededf01.doc   |  12 ++
 .../smptests/smpschededf01/smpschededf01.scn   |  21 +++
 6 files changed, 215 insertions(+)
 create mode 100644 testsuites/smptests/smpschededf01/Makefile.am
 create mode 100644 testsuites/smptests/smpschededf01/init.c
 create mode 100644 testsuites/smptests/smpschededf01/smpschededf01.doc
 create mode 100644 testsuites/smptests/smpschededf01/smpschededf01.scn

diff --git a/testsuites/smptests/Makefile.am b/testsuites/smptests/Makefile.am
index 6c1bd1294f..01dc52e524 100644
--- a/testsuites/smptests/Makefile.am
+++ b/testsuites/smptests/Makefile.am
@@ -35,6 +35,7 @@ _SUBDIRS += smppsxaffinity02
 _SUBDIRS += smpschedaffinity03
 _SUBDIRS += smpschedaffinity04
 _SUBDIRS += smpschedaffinity05
+_SUBDIRS += smpschededf01
 _SUBDIRS += smpschedsem01
 _SUBDIRS += smpscheduler01
 _SUBDIRS += smpscheduler02
diff --git a/testsuites/smptests/configure.ac b/testsuites/smptests/configure.ac
index 59b27ef397..f3a840b593 100644
--- a/testsuites/smptests/configure.ac
+++ b/testsuites/smptests/configure.ac
@@ -90,6 +90,7 @@ smpschedaffinity02/Makefile
 smpschedaffinity03/Makefile
 smpschedaffinity04/Makefile
 smpschedaffinity05/Makefile
+smpschededf01/Makefile
 smpschedsem01/Makefile
 smpscheduler01/Makefile
 smpscheduler02/Makefile
diff --git a/testsuites/smptests/smpschededf01/Makefile.am 
b/testsuites/smptests/smpschededf01/Makefile.am
new file mode 100644
index 00..aaed6bcd33
--- /dev/null
+++ b/testsuites/smptests/smpschededf01/Makefile.am
@@ -0,0 +1,19 @@
+rtems_tests_PROGRAMS = smpschededf01
+smpschededf01_SOURCES = init.c
+
+dist_rtems_tests_DATA = smpschededf01.scn smpschededf01.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(smpschededf01_OBJECTS)
+LINK_LIBS = $(smpschededf01_LDLIBS)
+
+smpschededf01$(EXEEXT): $(smpschededf01_OBJECTS) $(smpschededf01_DEPENDENCIES)
+   @rm -f smpschededf01$(EXEEXT)
+   $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/smptests/smpschededf01/init.c 
b/testsuites/smptests/smpschededf01/init.c
new file mode 100644
index 00..c1c995e69b
--- /dev/null
+++ b/testsuites/smptests/smpschededf01/init.c
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2017 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include 
+#include 
+#include 
+
+#include "tmacros.h"
+
+const char rtems_test_name[] = "SMPSCHEDEDF 1";
+
+typedef struct {
+  uint_fast32_t one_tick_busy;
+  rtems_id task[2];
+} test_context;
+
+static test_context test_instance;
+
+static void t(test_context *ctx, rtems_interval p, uint_fast32_t c)
+{
+  rtems_status_code sc;
+  rtems_id period;
+  rtems_name name;
+  uint_fast32_t busy;
+
+  sc = rtems_object_get_classic_name(rtems_task_self(), &name);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  sc = rtems_rate_monotonic_create(name, &period);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  busy = (c - 1) * ctx->one_tick_busy + (4 * ctx->one_tick_busy) / 5;
+
+  while (true) {
+rtems_test_busy(busy);
+
+sc = rtems_rate_monotonic_period(period, p);
+rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+  }
+}
+
+static void t1(rtems_task_argument arg)
+{
+  test_context *ctx = (test_context *) arg;
+
+  t(ctx, 50, 25);
+}
+
+static void t2(rtems_task_argument arg)
+{
+  test_context *ctx = (test_context *) arg;
+
+  t(ctx, 75, 30);
+}
+
+static void test(test_context *ctx)
+{
+  rtems_status_code sc;
+  rtems_printer printer;
+
+  ctx->one_tick_busy = rtems_test_get_one_tick_busy_count();
+
+  sc = rtems_task_create(
+rtems_build_name('T', '1', ' ', ' '),
+2,
+RTEMS_MINIMUM_STACK_SIZE,
+RTEMS_DEFAULT_MODES,
+RTEMS_DEFAULT_ATTRIBUTES,
+&ctx->task[0]
+  );
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  sc = rtems_task_create(
+rtems_build_name('T', '2', ' ', ' '),
+2,
+RTEMS_MINIMUM_STACK_SIZE,
+RTEMS_DEFAULT_MODES,
+RTEMS_DEFAULT_ATTRIBUTES,
+&ctx->task[1]
+  );
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  sc = rtems_task_wake_after(1);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  sc = rtems_task_start(ctx->task[0], t1, (rtems_task_argument) ctx);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  sc = rtems_task_start(ctx->task[1], t2, (rtems_task_argument) ctx)

[PATCH 1/6] smptests: Split smpscheduler03

2017-06-29 Thread Sebastian Huber
Split smpscheduler03 to run the tests with only one processor.

Update #3056.
---
 testsuites/smptests/Makefile.am|   2 +
 testsuites/smptests/configure.ac   |   2 +
 testsuites/smptests/smpscheduler03/Makefile.am |   2 +-
 testsuites/smptests/smpscheduler03/init.c  | 661 +
 .../smptests/smpscheduler03/smpscheduler03.doc |   4 +-
 .../smptests/smpscheduler03/smpscheduler03.scn |   3 -
 testsuites/smptests/smpscheduler03/test.c  | 572 ++
 testsuites/smptests/smpscheduler05/Makefile.am |  19 +
 testsuites/smptests/smpscheduler05/init.c  |  51 ++
 .../smptests/smpscheduler05/smpscheduler05.doc |  11 +
 .../smptests/smpscheduler05/smpscheduler05.scn |   2 +
 testsuites/smptests/smpscheduler06/Makefile.am |  19 +
 testsuites/smptests/smpscheduler06/init.c  |  59 ++
 .../smptests/smpscheduler06/smpscheduler06.doc |  11 +
 .../smptests/smpscheduler06/smpscheduler06.scn |   2 +
 15 files changed, 761 insertions(+), 659 deletions(-)
 create mode 100644 testsuites/smptests/smpscheduler03/test.c
 create mode 100644 testsuites/smptests/smpscheduler05/Makefile.am
 create mode 100644 testsuites/smptests/smpscheduler05/init.c
 create mode 100644 testsuites/smptests/smpscheduler05/smpscheduler05.doc
 create mode 100644 testsuites/smptests/smpscheduler05/smpscheduler05.scn
 create mode 100644 testsuites/smptests/smpscheduler06/Makefile.am
 create mode 100644 testsuites/smptests/smpscheduler06/init.c
 create mode 100644 testsuites/smptests/smpscheduler06/smpscheduler06.doc
 create mode 100644 testsuites/smptests/smpscheduler06/smpscheduler06.scn

diff --git a/testsuites/smptests/Makefile.am b/testsuites/smptests/Makefile.am
index 76c02e72d8..3df76c1d67 100644
--- a/testsuites/smptests/Makefile.am
+++ b/testsuites/smptests/Makefile.am
@@ -40,6 +40,8 @@ _SUBDIRS += smpscheduler01
 _SUBDIRS += smpscheduler02
 _SUBDIRS += smpscheduler03
 _SUBDIRS += smpscheduler04
+_SUBDIRS += smpscheduler05
+_SUBDIRS += smpscheduler06
 _SUBDIRS += smpsignal01
 _SUBDIRS += smpstrongapa01
 _SUBDIRS += smpswitchextension01
diff --git a/testsuites/smptests/configure.ac b/testsuites/smptests/configure.ac
index 434fe8dad7..54a75f777d 100644
--- a/testsuites/smptests/configure.ac
+++ b/testsuites/smptests/configure.ac
@@ -95,6 +95,8 @@ smpscheduler01/Makefile
 smpscheduler02/Makefile
 smpscheduler03/Makefile
 smpscheduler04/Makefile
+smpscheduler05/Makefile
+smpscheduler06/Makefile
 smpsignal01/Makefile
 smpstrongapa01/Makefile
 smpswitchextension01/Makefile
diff --git a/testsuites/smptests/smpscheduler03/Makefile.am 
b/testsuites/smptests/smpscheduler03/Makefile.am
index 5df9c57744..1e352e3de0 100644
--- a/testsuites/smptests/smpscheduler03/Makefile.am
+++ b/testsuites/smptests/smpscheduler03/Makefile.am
@@ -1,5 +1,5 @@
 rtems_tests_PROGRAMS = smpscheduler03
-smpscheduler03_SOURCES = init.c
+smpscheduler03_SOURCES = init.c test.c
 
 dist_rtems_tests_DATA = smpscheduler03.scn smpscheduler03.doc
 
diff --git a/testsuites/smptests/smpscheduler03/init.c 
b/testsuites/smptests/smpscheduler03/init.c
index 3180c9526a..48ef87a82c 100644
--- a/testsuites/smptests/smpscheduler03/init.c
+++ b/testsuites/smptests/smpscheduler03/init.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2015 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2014, 2017 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
  *  Dornierstr. 4
@@ -13,681 +13,36 @@
  */
 
 #ifdef HAVE_CONFIG_H
-  #include "config.h"
+#include "config.h"
 #endif
 
-#include 
-#include 
-
 #include 
-#include 
-#include 
-#include 
+#include 
 
-#include "tmacros.h"
+void Init(rtems_task_argument arg);
 
 const char rtems_test_name[] = "SMPSCHEDULER 3";
 
-#define CPU_MAX 3
-
-#define SCHED_NAME(i) rtems_build_name(' ', ' ', ' ', (char) ('A' + (i)))
-
-typedef struct {
-  rtems_id barrier_id;
-  rtems_id task_id[CPU_MAX];
-  uint32_t cpu_index[CPU_MAX];
-} test_context;
-
-static test_context test_instance;
-
-static Scheduler_SMP_Node *get_scheduler_node(Thread_Control *thread)
-{
-  return _Scheduler_SMP_Node_downcast(_Thread_Scheduler_get_home_node(thread));
-}
-
-static void apply_priority(
-  Thread_Control *thread,
-  Priority_Control new_priority,
-  bool prepend_it,
-  Thread_queue_Context *queue_context
-)
-{
-  _Thread_queue_Context_initialize(queue_context);
-  _Thread_queue_Context_clear_priority_updates(queue_context);
-  _Thread_Wait_acquire(thread, queue_context);
-  _Thread_Priority_change(
-thread,
-&thread->Real_priority,
-new_priority,
-prepend_it,
-queue_context
-  );
-  _Thread_Wait_release(thread, queue_context);
-}
-
-static void change_priority(
-  Thread_Control *thread,
-  Priority_Control new_priority,
-  bool prepend_it
-)
-{
-  Thread_queue_Context queue_context;
-
-  apply_priority(thread, new_priority, prepend_it, &queue_context);
-  _Thread_Priority_update(&queue_context);
-}
-
-static void 

[PATCH 2/6] score: Add red-black tree node to Scheduler_Node

2017-06-29 Thread Sebastian Huber
In SMP configurations, add a red-black tree node to Scheduler_Node to
enable an EDF scheduler implementation.

Update #3056.
---
 cpukit/score/include/rtems/score/schedulernode.h   | 14 --
 .../include/rtems/score/schedulerprioritysmpimpl.h | 14 +++---
 cpukit/score/include/rtems/score/schedulersmpimpl.h| 18 +-
 cpukit/score/src/schedulerpriorityaffinitysmp.c|  8 +++-
 cpukit/score/src/schedulersimplesmp.c  | 16 
 cpukit/score/src/schedulersmpstartidle.c   |  2 +-
 cpukit/score/src/schedulerstrongapa.c  | 14 +++---
 7 files changed, 47 insertions(+), 39 deletions(-)

diff --git a/cpukit/score/include/rtems/score/schedulernode.h 
b/cpukit/score/include/rtems/score/schedulernode.h
index 09d03d4e59..1474b0c13c 100644
--- a/cpukit/score/include/rtems/score/schedulernode.h
+++ b/cpukit/score/include/rtems/score/schedulernode.h
@@ -67,14 +67,16 @@ struct Scheduler_Node {
   /**
* @brief Chain node for usage in various scheduler data structures.
*
-   * Strictly this is the wrong place for this field since the data structures
+   * Strictly, this is the wrong place for this field since the data structures
* to manage scheduler nodes belong to the particular scheduler
-   * implementation.  Currently all SMP scheduler implementations use chains.
-   * The node is here to simplify things, just like the object node in the
-   * thread control block.  It may be replaced with a union to add a red-black
-   * tree node in the future.
+   * implementation.  Currently, all SMP scheduler implementations use chains
+   * or red-black trees.  The node is here to simplify things, just like the
+   * object node in the thread control block.
*/
-  Chain_Node Node;
+  union {
+Chain_Node Chain;
+RBTree_Node RBTree;
+  } Node;
 
   /**
* @brief The sticky level determines if this scheduler node should use an
diff --git a/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h 
b/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
index 5136565bbe..f37414c7a8 100644
--- a/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
+++ b/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
@@ -75,9 +75,9 @@ static inline void 
_Scheduler_priority_SMP_Move_from_scheduled_to_ready(
   Scheduler_priority_SMP_Node *node =
 _Scheduler_priority_SMP_Node_downcast( scheduled_to_ready );
 
-  _Chain_Extract_unprotected( &node->Base.Base.Node );
+  _Chain_Extract_unprotected( &node->Base.Base.Node.Chain );
   _Scheduler_priority_Ready_queue_enqueue_first(
-&node->Base.Base.Node,
+&node->Base.Base.Node.Chain,
 &node->Ready_queue,
 &self->Bit_map
   );
@@ -94,13 +94,13 @@ static inline void 
_Scheduler_priority_SMP_Move_from_ready_to_scheduled(
 _Scheduler_priority_SMP_Node_downcast( ready_to_scheduled );
 
   _Scheduler_priority_Ready_queue_extract(
-&node->Base.Base.Node,
+&node->Base.Base.Node.Chain,
 &node->Ready_queue,
 &self->Bit_map
   );
   _Chain_Insert_ordered_unprotected(
 &self->Base.Scheduled,
-&node->Base.Base.Node,
+&node->Base.Base.Node.Chain,
 _Scheduler_SMP_Insert_priority_fifo_order
   );
 }
@@ -116,7 +116,7 @@ static inline void 
_Scheduler_priority_SMP_Insert_ready_lifo(
 _Scheduler_priority_SMP_Node_downcast( thread );
 
   _Scheduler_priority_Ready_queue_enqueue(
-&node->Base.Base.Node,
+&node->Base.Base.Node.Chain,
 &node->Ready_queue,
 &self->Bit_map
   );
@@ -133,7 +133,7 @@ static inline void 
_Scheduler_priority_SMP_Insert_ready_fifo(
 _Scheduler_priority_SMP_Node_downcast( thread );
 
   _Scheduler_priority_Ready_queue_enqueue_first(
-&node->Base.Base.Node,
+&node->Base.Base.Node.Chain,
 &node->Ready_queue,
 &self->Bit_map
   );
@@ -150,7 +150,7 @@ static inline void 
_Scheduler_priority_SMP_Extract_from_ready(
 _Scheduler_priority_SMP_Node_downcast( thread );
 
   _Scheduler_priority_Ready_queue_extract(
-&node->Base.Base.Node,
+&node->Base.Base.Node.Chain,
 &node->Ready_queue,
 &self->Bit_map
   );
diff --git a/cpukit/score/include/rtems/score/schedulersmpimpl.h 
b/cpukit/score/include/rtems/score/schedulersmpimpl.h
index d91a62c3ca..b90c359d4c 100644
--- a/cpukit/score/include/rtems/score/schedulersmpimpl.h
+++ b/cpukit/score/include/rtems/score/schedulersmpimpl.h
@@ -608,9 +608,9 @@ static inline Scheduler_Node 
*_Scheduler_SMP_Get_lowest_scheduled(
   (void) filter;
   (void) order;
 
-  _Assert( &lowest_scheduled->Node != _Chain_Tail( scheduled ) );
+  _Assert( &lowest_scheduled->Node.Chain != _Chain_Tail( scheduled ) );
   _Assert(
-_Chain_Next( &lowest_scheduled->Node ) == _Chain_Tail( scheduled )
+_Chain_Next( &lowest_scheduled->Node.Chain ) == _Chain_Tail( scheduled )
   );
 
   return lowest_scheduled;
@@ -708,7 +708,7 @@ static inline bool _Scheduler_SMP_Enqueue_ordered(
 
   lowest_scheduled = ( *get_lowest_

[PATCH 5/6] tests: Move busy loop to test support

2017-06-29 Thread Sebastian Huber
Update #3056.
---
 cpukit/libmisc/Makefile.am |   1 +
 cpukit/libmisc/testsupport/test.h  |  18 +++-
 cpukit/libmisc/testsupport/testbusy.c  | 107 +
 .../sptests/spintrcritical_support/intrcritical.c  |  96 ++
 4 files changed, 135 insertions(+), 87 deletions(-)
 create mode 100644 cpukit/libmisc/testsupport/testbusy.c

diff --git a/cpukit/libmisc/Makefile.am b/cpukit/libmisc/Makefile.am
index d8fa47a2a5..6772dd1673 100644
--- a/cpukit/libmisc/Makefile.am
+++ b/cpukit/libmisc/Makefile.am
@@ -174,6 +174,7 @@ libstringto_a_SOURCES = stringto/stringtodouble.c 
stringto/stringtofloat.c \
 noinst_LIBRARIES += libtestsupport.a
 libtestsupport_a_SOURCES =
 libtestsupport_a_SOURCES += testsupport/testbeginend.c
+libtestsupport_a_SOURCES += testsupport/testbusy.c
 libtestsupport_a_SOURCES += testsupport/testextension.c
 libtestsupport_a_SOURCES += testsupport/testparallel.c
 
diff --git a/cpukit/libmisc/testsupport/test.h 
b/cpukit/libmisc/testsupport/test.h
index a32e2c42c1..d9ac6caf91 100644
--- a/cpukit/libmisc/testsupport/test.h
+++ b/cpukit/libmisc/testsupport/test.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2014, 2017 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
  *  Dornierstr. 4
@@ -260,6 +260,22 @@ void rtems_test_parallel(
   size_t job_count
 );
 
+/**
+ * @brief Performs a busy loop with the specified iteration count.
+ *
+ * This function is optimized to not perform memory accesses and should have a
+ * small jitter.
+ *
+ * @param[in] count The iteration count.
+ */
+void rtems_test_busy(uint_fast32_t count);
+
+/**
+ * @brief Returns a count value for rtems_test_busy() which yields roughly a
+ * duration of one clock tick.
+ */
+uint_fast32_t rtems_test_get_one_tick_busy_count(void);
+
 /** @} */
 
 #ifdef __cplusplus
diff --git a/cpukit/libmisc/testsupport/testbusy.c 
b/cpukit/libmisc/testsupport/testbusy.c
new file mode 100644
index 00..2d34a805dc
--- /dev/null
+++ b/cpukit/libmisc/testsupport/testbusy.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2014, 2017 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include 
+#include 
+
+static uint_fast32_t estimate_busy_loop_maximum( void )
+{
+  uint_fast32_t units = 0;
+  uint_fast32_t initial = rtems_clock_get_ticks_since_boot();
+
+  while ( initial == rtems_clock_get_ticks_since_boot() ) {
+++units;
+  }
+
+  return units;
+}
+
+static uint_fast32_t wait_for_tick_change( void )
+{
+  uint_fast32_t initial = rtems_clock_get_ticks_since_boot();
+  uint_fast32_t now;
+
+  do {
+now = rtems_clock_get_ticks_since_boot();
+  } while ( now == initial );
+
+  return now;
+}
+
+/*
+ * It is important that we use actually use the same rtems_test_busy() function
+ * at the various places, since otherwise the obtained maximum value might be
+ * wrong.  So, the compiler must not inline this function.
+ */
+RTEMS_NO_INLINE void rtems_test_busy( uint_fast32_t count )
+{
+  uint_fast32_t i = 0;
+
+  do {
+__asm__ volatile ("");
+++i;
+  } while ( i < count );
+}
+
+uint_fast32_t rtems_test_get_one_tick_busy_count( void )
+{
+  uint_fast32_t last;
+  uint_fast32_t now;
+  uint_fast32_t a;
+  uint_fast32_t b;
+  uint_fast32_t m;
+
+  /* Choose a lower bound */
+  a = 1;
+
+  /* Estimate an upper bound */
+
+  wait_for_tick_change();
+  b = 2 * estimate_busy_loop_maximum();
+
+  while ( true ) {
+last = wait_for_tick_change();
+rtems_test_busy( b );
+now = rtems_clock_get_ticks_since_boot();
+
+if ( now != last ) {
+  break;
+}
+
+b *= 2;
+last = now;
+  }
+
+  /* Find a good value */
+  do {
+m = ( a + b ) / 2;
+
+last = wait_for_tick_change();
+rtems_test_busy( m );
+now = rtems_clock_get_ticks_since_boot();
+
+if ( now != last ) {
+  b = m;
+} else {
+  a = m;
+}
+  } while ( b - a > 1 );
+
+  return m;
+}
diff --git a/testsuites/sptests/spintrcritical_support/intrcritical.c 
b/testsuites/sptests/spintrcritical_support/intrcritical.c
index a9fcdd2a37..51ab42f5d6 100644
--- a/testsuites/sptests/spintrcritical_support/intrcritical.c
+++ b/testsuites/sptests/spintrcritical_support/intrcritical.c
@@ -17,9 +17,9 @@
 #define INTERRUPT_CRITICAL_NAME rtems_build_name( 'I', 'C', 'R', 'I' )
 
 typedef struct {
-  rtems_interval minimum;
-  rtems_interval maximum;
-  rtems_interval maximum_current;
+  uint_fast32_t minimum;
+  uint_fast32_t maximum;
+  uint_fast32_t maximum_current;
   rtems_timer_service_routine_entry tsr;
   rtems_id timer;
   uint64_t t0;
@@ -28,19 +28,7 @@ typedef struct {
 
 static 

[PATCH 3/6] score: Add SMP EDF scheduler

2017-06-29 Thread Sebastian Huber
Update #3056.
---
 cpukit/sapi/include/confdefs.h |  24 +
 cpukit/sapi/include/rtems/scheduler.h  |  20 +-
 cpukit/score/Makefile.am   |   2 +
 cpukit/score/include/rtems/score/scheduleredfsmp.h | 137 ++
 cpukit/score/preinstall.am |   4 +
 cpukit/score/src/scheduleredfchangepriority.c  |  16 -
 cpukit/score/src/scheduleredfreleasejob.c  |  16 +
 cpukit/score/src/scheduleredfsmp.c | 499 +
 testsuites/smptests/Makefile.am|   1 +
 testsuites/smptests/configure.ac   |   1 +
 testsuites/smptests/smpscheduler03/test.c  |   5 +
 testsuites/smptests/smpscheduler07/Makefile.am |  19 +
 testsuites/smptests/smpscheduler07/init.c  |  51 +++
 .../smptests/smpscheduler07/smpscheduler07.doc |  11 +
 .../smptests/smpscheduler07/smpscheduler07.scn |   2 +
 15 files changed, 791 insertions(+), 17 deletions(-)
 create mode 100644 cpukit/score/include/rtems/score/scheduleredfsmp.h
 create mode 100644 cpukit/score/src/scheduleredfsmp.c
 create mode 100644 testsuites/smptests/smpscheduler07/Makefile.am
 create mode 100644 testsuites/smptests/smpscheduler07/init.c
 create mode 100644 testsuites/smptests/smpscheduler07/smpscheduler07.doc
 create mode 100644 testsuites/smptests/smpscheduler07/smpscheduler07.scn

diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index 604539b5e8..77b80d1cce 100755
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -780,6 +780,7 @@ extern rtems_initialization_tasks_table 
Initialization_tasks[];
  *  - CONFIGURE_SCHEDULER_SIMPLE - Light-weight Priority Scheduler
  *  - CONFIGURE_SCHEDULER_SIMPLE_SMP - Simple SMP Priority Scheduler
  *  - CONFIGURE_SCHEDULER_EDF - EDF Scheduler
+ *  - CONFIGURE_SCHEDULER_EDF_SMP - EDF SMP Scheduler
  *  - CONFIGURE_SCHEDULER_CBS - CBS Scheduler
  *  - CONFIGURE_SCHEDULER_USER  - user provided scheduler
  *
@@ -805,6 +806,7 @@ extern rtems_initialization_tasks_table 
Initialization_tasks[];
 !defined(CONFIGURE_SCHEDULER_SIMPLE) && \
 !defined(CONFIGURE_SCHEDULER_SIMPLE_SMP) && \
 !defined(CONFIGURE_SCHEDULER_EDF) && \
+!defined(CONFIGURE_SCHEDULER_EDF_SMP) && \
 !defined(CONFIGURE_SCHEDULER_CBS)
   #if defined(RTEMS_SMP) && CONFIGURE_MAXIMUM_PROCESSORS > 1
 /**
@@ -980,6 +982,25 @@ extern rtems_initialization_tasks_table 
Initialization_tasks[];
 #endif
 
 /*
+ * If the EDF SMP Scheduler is selected, then configure for it.
+ */
+#if defined(CONFIGURE_SCHEDULER_EDF_SMP)
+  #if !defined(CONFIGURE_SCHEDULER_NAME)
+/** Configure the name of the scheduler instance */
+#define CONFIGURE_SCHEDULER_NAME rtems_build_name('M', 'E', 'D', 'F')
+  #endif
+
+  #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
+/** Configure the context needed by the scheduler instance */
+#define CONFIGURE_SCHEDULER_CONTEXT RTEMS_SCHEDULER_CONTEXT_EDF_SMP(dflt)
+
+/** Configure the controls for this scheduler instance */
+#define CONFIGURE_SCHEDULER_CONTROLS \
+  RTEMS_SCHEDULER_CONTROL_EDF_SMP(dflt, CONFIGURE_SCHEDULER_NAME)
+  #endif
+#endif
+
+/*
  * If the CBS Scheduler is selected, then configure for it.
  */
 #if defined(CONFIGURE_SCHEDULER_CBS)
@@ -3151,6 +3172,9 @@ extern rtems_initialization_tasks_table 
Initialization_tasks[];
 #ifdef CONFIGURE_SCHEDULER_EDF
   Scheduler_EDF_Node EDF;
 #endif
+#ifdef CONFIGURE_SCHEDULER_EDF_SMP
+  Scheduler_EDF_SMP_Node EDF_SMP;
+#endif
 #ifdef CONFIGURE_SCHEDULER_PRIORITY
   Scheduler_priority_Node Priority;
 #endif
diff --git a/cpukit/sapi/include/rtems/scheduler.h 
b/cpukit/sapi/include/rtems/scheduler.h
index 0b20aab55e..fae0db4913 100644
--- a/cpukit/sapi/include/rtems/scheduler.h
+++ b/cpukit/sapi/include/rtems/scheduler.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (c) 2014, 2016 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2014, 2017 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
  *  Dornierstr. 4
@@ -93,6 +93,24 @@
 }
 #endif
 
+#ifdef CONFIGURE_SCHEDULER_EDF_SMP
+  #include 
+
+  #define RTEMS_SCHEDULER_CONTEXT_EDF_SMP_NAME( name ) \
+RTEMS_SCHEDULER_CONTEXT_NAME( EDF_SMP_ ## name )
+
+  #define RTEMS_SCHEDULER_CONTEXT_EDF_SMP( name ) \
+static Scheduler_EDF_SMP_Context RTEMS_SCHEDULER_CONTEXT_EDF_SMP_NAME( 
name )
+
+  #define RTEMS_SCHEDULER_CONTROL_EDF_SMP( name, obj_name ) \
+{ \
+  &RTEMS_SCHEDULER_CONTEXT_EDF_SMP_NAME( name ).Base.Base, \
+  SCHEDULER_EDF_SMP_ENTRY_POINTS, \
+  SCHEDULER_EDF_MAXIMUM_PRIORITY, \
+  ( obj_name ) \
+}
+#endif
+
 #ifdef CONFIGURE_SCHEDULER_PRIORITY
   #include 
 
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index a3de792fdf..46b441737f 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -126,6 +126,7 @@ include_rtems_score_HEADERS += 
include/rtems/score/threadmp.h
 end

[PATCH 4/6] score: Add RTEMS_NO_INLINE

2017-06-29 Thread Sebastian Huber
Update #3056.
---
 cpukit/score/include/rtems/score/basedefs.h | 12 +++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/cpukit/score/include/rtems/score/basedefs.h 
b/cpukit/score/include/rtems/score/basedefs.h
index 79bf15e879..288afd41aa 100644
--- a/cpukit/score/include/rtems/score/basedefs.h
+++ b/cpukit/score/include/rtems/score/basedefs.h
@@ -10,7 +10,7 @@
  *  COPYRIGHT (c) 1989-2007.
  *  On-Line Applications Research Corporation (OAR).
  *
- *  Copyright (c) 2010, 2016 embedded brains GmbH.
+ *  Copyright (c) 2010, 2017 embedded brains GmbH.
  *
  *  The license and distribution terms for this file may be
  *  found in the file LICENSE in this distribution or at
@@ -91,6 +91,16 @@
 #endif
 
 /**
+ *  The following defines a compiler specific attribute which informs
+ *  the compiler that the method must not be inlined.
+ */
+#ifdef __GNUC__
+  #define RTEMS_NO_INLINE __attribute__((__noinline__))
+#else
+  #define RTEMS_NO_INLINE
+#endif
+
+/**
  *  The following macro is a compiler specific way to indicate that
  *  the method will NOT return to the caller.  This can assist the
  *  compiler in code generation and avoid unreachable paths.  This
-- 
2.12.3

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v5 1/2] posix/mmap: Add support for file handler and MAP_ANON

2017-06-29 Thread Kevin Kirspel
Added a mmap file handler to struct _rtems_filesystem_file_handlers_r.
Updated each file handler object to support the default mmap handler.
Updated mmap() to call the mmap handler for MAP_SHARED.
Added a mmap file handler for shm

Added support for MAP_ANON in mmap().

Updates #2859
---
 cpukit/dev/i2c/i2c-bus.c|   1 +
 cpukit/dev/i2c/i2c-dev.c|   1 +
 cpukit/dev/spi/spi-bus.c|   1 +
 cpukit/libblock/src/blkdev-imfs.c   |   1 +
 cpukit/libcsupport/include/rtems/libio.h|  38 
 cpukit/libcsupport/include/rtems/termiostypes.h |  13 ++
 cpukit/libcsupport/src/__usrenv.c   |   1 +
 cpukit/libcsupport/src/termios.c|   1 +
 cpukit/libfs/Makefile.am|   1 +
 cpukit/libfs/src/defaults/default_handlers.c|   1 +
 cpukit/libfs/src/defaults/default_mmap.c|  40 
 cpukit/libfs/src/devfs/devfs_init.c |   1 +
 cpukit/libfs/src/dosfs/msdos_handlers_dir.c |   1 +
 cpukit/libfs/src/dosfs/msdos_handlers_file.c|   1 +
 cpukit/libfs/src/imfs/imfs_dir_default.c|   1 +
 cpukit/libfs/src/imfs/imfs_dir_minimal.c|   1 +
 cpukit/libfs/src/imfs/imfs_fifo.c   |   1 +
 cpukit/libfs/src/imfs/imfs_handlers_device.c|   1 +
 cpukit/libfs/src/imfs/imfs_linfile.c|   1 +
 cpukit/libfs/src/imfs/imfs_link.c   |   1 +
 cpukit/libfs/src/imfs/imfs_memfile.c|   1 +
 cpukit/libfs/src/imfs/imfs_symlink.c|   1 +
 cpukit/libfs/src/jffs2/src/fs-rtems.c   |   3 +
 cpukit/libfs/src/nfsclient/src/nfs.c|   3 +
 cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c  |   1 +
 cpukit/libfs/src/rfs/rtems-rfs-rtems-dir.c  |   1 +
 cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c |   1 +
 cpukit/libfs/src/rfs/rtems-rfs-rtems.c  |   1 +
 cpukit/libnetworking/lib/ftpfs.c|   2 +
 cpukit/libnetworking/lib/tftpDriver.c   |   1 +
 cpukit/libnetworking/rtems/rtems_syscall.c  |   1 +
 cpukit/posix/src/mmap.c | 257 ++--
 cpukit/posix/src/munmap.c   |  14 +-
 cpukit/posix/src/shmopen.c  |  30 +++
 34 files changed, 312 insertions(+), 113 deletions(-)
 create mode 100644 cpukit/libfs/src/defaults/default_mmap.c

diff --git a/cpukit/dev/i2c/i2c-bus.c b/cpukit/dev/i2c/i2c-bus.c
index 0f27d06..1297b1e 100644
--- a/cpukit/dev/i2c/i2c-bus.c
+++ b/cpukit/dev/i2c/i2c-bus.c
@@ -218,6 +218,7 @@ static const rtems_filesystem_file_handlers_r 
i2c_bus_handler = {
   .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
   .fcntl_h = rtems_filesystem_default_fcntl,
   .kqfilter_h = rtems_filesystem_default_kqfilter,
+  .mmap_h = rtems_filesystem_default_mmap,
   .poll_h = rtems_filesystem_default_poll,
   .readv_h = rtems_filesystem_default_readv,
   .writev_h = rtems_filesystem_default_writev
diff --git a/cpukit/dev/i2c/i2c-dev.c b/cpukit/dev/i2c/i2c-dev.c
index b00a9bd..680732f 100644
--- a/cpukit/dev/i2c/i2c-dev.c
+++ b/cpukit/dev/i2c/i2c-dev.c
@@ -115,6 +115,7 @@ static const rtems_filesystem_file_handlers_r 
i2c_dev_handler = {
   .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
   .fcntl_h = rtems_filesystem_default_fcntl,
   .kqfilter_h = rtems_filesystem_default_kqfilter,
+  .mmap_h = rtems_filesystem_default_mmap,
   .poll_h = rtems_filesystem_default_poll,
   .readv_h = rtems_filesystem_default_readv,
   .writev_h = rtems_filesystem_default_writev
diff --git a/cpukit/dev/spi/spi-bus.c b/cpukit/dev/spi/spi-bus.c
index dd84b02..343e203 100644
--- a/cpukit/dev/spi/spi-bus.c
+++ b/cpukit/dev/spi/spi-bus.c
@@ -235,6 +235,7 @@ static const rtems_filesystem_file_handlers_r 
spi_bus_handler = {
   .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
   .fcntl_h = rtems_filesystem_default_fcntl,
   .kqfilter_h = rtems_filesystem_default_kqfilter,
+  .mmap_h = rtems_filesystem_default_mmap,
   .poll_h = rtems_filesystem_default_poll,
   .readv_h = rtems_filesystem_default_readv,
   .writev_h = rtems_filesystem_default_writev
diff --git a/cpukit/libblock/src/blkdev-imfs.c 
b/cpukit/libblock/src/blkdev-imfs.c
index 7a2d00b..f2008aa 100644
--- a/cpukit/libblock/src/blkdev-imfs.c
+++ b/cpukit/libblock/src/blkdev-imfs.c
@@ -222,6 +222,7 @@ static const rtems_filesystem_file_handlers_r 
rtems_blkdev_imfs_node = {
   .fdatasync_h = rtems_blkdev_imfs_fsync_or_fdatasync,
   .fcntl_h = rtems_filesystem_default_fcntl,
   .kqfilter_h = rtems_filesystem_default_kqfilter,
+  .mmap_h = rtems_filesystem_default_mmap,
   .poll_h = rtems_filesystem_default_poll,
   .readv_h = rtems_filesystem_default_readv,
   .writev_h = rtems_filesystem_default_writev
diff --git a/cpukit/libcsupport/include/rtems/libio.h 
b/cpukit/libcsupport/include/rtems/libio.h
index 4669cb5..8226d18 100644
--- a/cpukit/libcsupport/include/rtems/libio.h
+++ b/cpukit/libcsupport/include/rtems/libio.h
@@ -977,6 +977,28 @

[PATCH v5 2/2] psxtests: Add a mmap dedicated test case

2017-06-29 Thread Kevin Kirspel
Updates #2859
---
 testsuites/psxtests/Makefile.am |   1 +
 testsuites/psxtests/configure.ac|   1 +
 testsuites/psxtests/psxmmap01/Makefile.am   |  22 ++
 testsuites/psxtests/psxmmap01/init.c| 352 
 testsuites/psxtests/psxmmap01/psxmmap01.scn |   0
 testsuites/psxtests/psxmmap01/system.h  |  31 +++
 testsuites/psxtests/psxmmap01/test_driver.c |  67 ++
 testsuites/psxtests/psxmmap01/test_driver.h |  14 ++
 testsuites/psxtests/psxmmap01/test_helper.c |  32 +++
 testsuites/psxtests/psxmmap01/test_helper.h |  41 
 10 files changed, 561 insertions(+)
 create mode 100644 testsuites/psxtests/psxmmap01/Makefile.am
 create mode 100644 testsuites/psxtests/psxmmap01/init.c
 create mode 100644 testsuites/psxtests/psxmmap01/psxmmap01.scn
 create mode 100644 testsuites/psxtests/psxmmap01/system.h
 create mode 100644 testsuites/psxtests/psxmmap01/test_driver.c
 create mode 100644 testsuites/psxtests/psxmmap01/test_driver.h
 create mode 100644 testsuites/psxtests/psxmmap01/test_helper.c
 create mode 100644 testsuites/psxtests/psxmmap01/test_helper.h

diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am
index 7bcea46..cccdb39 100644
--- a/testsuites/psxtests/Makefile.am
+++ b/testsuites/psxtests/Makefile.am
@@ -85,6 +85,7 @@ _SUBDIRS += psxrwlock01
 _SUBDIRS += psxsem01
 _SUBDIRS += psxshm01
 _SUBDIRS += psxshm02
+_SUBDIRS += psxmmap01
 _SUBDIRS += psxsignal01
 _SUBDIRS += psxsignal02
 _SUBDIRS += psxsignal03
diff --git a/testsuites/psxtests/configure.ac b/testsuites/psxtests/configure.ac
index 1de1312..96a0149 100644
--- a/testsuites/psxtests/configure.ac
+++ b/testsuites/psxtests/configure.ac
@@ -190,6 +190,7 @@ psxrwlock01/Makefile
 psxsem01/Makefile
 psxshm01/Makefile
 psxshm02/Makefile
+psxmmap01/Makefile
 psxsignal01/Makefile
 psxsignal02/Makefile
 psxsignal03/Makefile
diff --git a/testsuites/psxtests/psxmmap01/Makefile.am 
b/testsuites/psxtests/psxmmap01/Makefile.am
new file mode 100644
index 000..57b0087
--- /dev/null
+++ b/testsuites/psxtests/psxmmap01/Makefile.am
@@ -0,0 +1,22 @@
+
+rtems_tests_PROGRAMS = psxmmap01
+psxmmap01_SOURCES = init.c test_helper.c test_driver.c system.h
+
+dist_rtems_tests_DATA = psxmmap01.scn
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+
+AM_CPPFLAGS += -I$(top_srcdir)/include
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(psxmmap01_OBJECTS)
+LINK_LIBS = $(psxmmap01_LDLIBS)
+
+psxmmap01$(EXEEXT): $(psxmmap01_OBJECTS) $(psxmmap01_DEPENDENCIES)
+   @rm -f psxmmap01$(EXEEXT)
+   $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/psxtests/psxmmap01/init.c 
b/testsuites/psxtests/psxmmap01/init.c
new file mode 100644
index 000..eb1c747
--- /dev/null
+++ b/testsuites/psxtests/psxmmap01/init.c
@@ -0,0 +1,344 @@
+/*-
+ * Copyright (c) 2009 Simon L. Nielsen ,
+ *  Bjoern A. Zeeb 
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in the
+ *documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define CONFIGURE_INIT
+#include "system.h"
+#include "pritime.h"
+#include "test_helper.h"
+#include "test_driver.h"
+
+#include 
+
+#include 
+#include 
+#include 
+
+const char rtems_test_name[] = "PSX MMAP01";
+const char test_driver_name[] = "/dev/test_driver";
+
+static const struct {
+  void  *addr;
+  int ok;
+} map_at_zero_tests[] = {
+  { (void *)0,0 },
+  { (void *)1,0 },
+  { (void *)(PAGE_SIZE - 1),  0 },
+  { (void *)PAGE_SIZE,1 },
+  { (void *)-1,   0 },
+  { (void *)(-PAGE_SIZE), 0 },
+  { (void *)(-1 

Re: [PATCH 3/6] score: Add SMP EDF scheduler

2017-06-29 Thread Joel Sherrill
There has to be a corresponding documentation patch.

--joel

On Thu, Jun 29, 2017 at 8:23 AM, Sebastian Huber <
sebastian.hu...@embedded-brains.de> wrote:

> Update #3056.
> ---
>  cpukit/sapi/include/confdefs.h |  24 +
>  cpukit/sapi/include/rtems/scheduler.h  |  20 +-
>  cpukit/score/Makefile.am   |   2 +
>  cpukit/score/include/rtems/score/scheduleredfsmp.h | 137 ++
>  cpukit/score/preinstall.am |   4 +
>  cpukit/score/src/scheduleredfchangepriority.c  |  16 -
>  cpukit/score/src/scheduleredfreleasejob.c  |  16 +
>  cpukit/score/src/scheduleredfsmp.c | 499
> +
>  testsuites/smptests/Makefile.am|   1 +
>  testsuites/smptests/configure.ac   |   1 +
>  testsuites/smptests/smpscheduler03/test.c  |   5 +
>  testsuites/smptests/smpscheduler07/Makefile.am |  19 +
>  testsuites/smptests/smpscheduler07/init.c  |  51 +++
>  .../smptests/smpscheduler07/smpscheduler07.doc |  11 +
>  .../smptests/smpscheduler07/smpscheduler07.scn |   2 +
>  15 files changed, 791 insertions(+), 17 deletions(-)
>  create mode 100644 cpukit/score/include/rtems/score/scheduleredfsmp.h
>  create mode 100644 cpukit/score/src/scheduleredfsmp.c
>  create mode 100644 testsuites/smptests/smpscheduler07/Makefile.am
>  create mode 100644 testsuites/smptests/smpscheduler07/init.c
>  create mode 100644 testsuites/smptests/smpscheduler07/smpscheduler07.doc
>  create mode 100644 testsuites/smptests/smpscheduler07/smpscheduler07.scn
>
> diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/
> confdefs.h
> index 604539b5e8..77b80d1cce 100755
> --- a/cpukit/sapi/include/confdefs.h
> +++ b/cpukit/sapi/include/confdefs.h
> @@ -780,6 +780,7 @@ extern rtems_initialization_tasks_table
> Initialization_tasks[];
>   *  - CONFIGURE_SCHEDULER_SIMPLE - Light-weight Priority Scheduler
>   *  - CONFIGURE_SCHEDULER_SIMPLE_SMP - Simple SMP Priority Scheduler
>   *  - CONFIGURE_SCHEDULER_EDF - EDF Scheduler
> + *  - CONFIGURE_SCHEDULER_EDF_SMP - EDF SMP Scheduler
>   *  - CONFIGURE_SCHEDULER_CBS - CBS Scheduler
>   *  - CONFIGURE_SCHEDULER_USER  - user provided scheduler
>   *
> @@ -805,6 +806,7 @@ extern rtems_initialization_tasks_table
> Initialization_tasks[];
>  !defined(CONFIGURE_SCHEDULER_SIMPLE) && \
>  !defined(CONFIGURE_SCHEDULER_SIMPLE_SMP) && \
>  !defined(CONFIGURE_SCHEDULER_EDF) && \
> +!defined(CONFIGURE_SCHEDULER_EDF_SMP) && \
>  !defined(CONFIGURE_SCHEDULER_CBS)
>#if defined(RTEMS_SMP) && CONFIGURE_MAXIMUM_PROCESSORS > 1
>  /**
> @@ -980,6 +982,25 @@ extern rtems_initialization_tasks_table
> Initialization_tasks[];
>  #endif
>
>  /*
> + * If the EDF SMP Scheduler is selected, then configure for it.
> + */
> +#if defined(CONFIGURE_SCHEDULER_EDF_SMP)
> +  #if !defined(CONFIGURE_SCHEDULER_NAME)
> +/** Configure the name of the scheduler instance */
> +#define CONFIGURE_SCHEDULER_NAME rtems_build_name('M', 'E', 'D', 'F')
> +  #endif
> +
> +  #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
> +/** Configure the context needed by the scheduler instance */
> +#define CONFIGURE_SCHEDULER_CONTEXT RTEMS_SCHEDULER_CONTEXT_EDF_
> SMP(dflt)
> +
> +/** Configure the controls for this scheduler instance */
> +#define CONFIGURE_SCHEDULER_CONTROLS \
> +  RTEMS_SCHEDULER_CONTROL_EDF_SMP(dflt, CONFIGURE_SCHEDULER_NAME)
> +  #endif
> +#endif
> +
> +/*
>   * If the CBS Scheduler is selected, then configure for it.
>   */
>  #if defined(CONFIGURE_SCHEDULER_CBS)
> @@ -3151,6 +3172,9 @@ extern rtems_initialization_tasks_table
> Initialization_tasks[];
>  #ifdef CONFIGURE_SCHEDULER_EDF
>Scheduler_EDF_Node EDF;
>  #endif
> +#ifdef CONFIGURE_SCHEDULER_EDF_SMP
> +  Scheduler_EDF_SMP_Node EDF_SMP;
> +#endif
>  #ifdef CONFIGURE_SCHEDULER_PRIORITY
>Scheduler_priority_Node Priority;
>  #endif
> diff --git a/cpukit/sapi/include/rtems/scheduler.h
> b/cpukit/sapi/include/rtems/scheduler.h
> index 0b20aab55e..fae0db4913 100644
> --- a/cpukit/sapi/include/rtems/scheduler.h
> +++ b/cpukit/sapi/include/rtems/scheduler.h
> @@ -5,7 +5,7 @@
>   */
>
>  /*
> - * Copyright (c) 2014, 2016 embedded brains GmbH.  All rights reserved.
> + * Copyright (c) 2014, 2017 embedded brains GmbH.  All rights reserved.
>   *
>   *  embedded brains GmbH
>   *  Dornierstr. 4
> @@ -93,6 +93,24 @@
>  }
>  #endif
>
> +#ifdef CONFIGURE_SCHEDULER_EDF_SMP
> +  #include 
> +
> +  #define RTEMS_SCHEDULER_CONTEXT_EDF_SMP_NAME( name ) \
> +RTEMS_SCHEDULER_CONTEXT_NAME( EDF_SMP_ ## name )
> +
> +  #define RTEMS_SCHEDULER_CONTEXT_EDF_SMP( name ) \
> +static Scheduler_EDF_SMP_Context RTEMS_SCHEDULER_CONTEXT_EDF_SMP_NAME(
> name )
> +
> +  #define RTEMS_SCHEDULER_CONTROL_EDF_SMP( name, obj_name ) \
> +{ \
> +  &RTEMS_SCHEDULER_CONTEXT_EDF_SMP_NAME( name ).Base.Base, \
> +  SCHEDULER_EDF_SMP_ENTRY_POINTS

Warnings Again in xz

2017-06-29 Thread Joel Sherrill
Hi

Recent changes have reintroduced these warnings:

170 
../../../../../../rtems/c/src/../../cpukit/libmisc/xz/xz_dec_lzma2.c:535:29:
warning: always_inline function might not be inlinable [-Wattributes]
170 
../../../../../../rtems/c/src/../../cpukit/libmisc/xz/xz_dec_lzma2.c:519:33:
warning: always_inline function might not be inlinable [-Wattributes]
170 
../../../../../../rtems/c/src/../../cpukit/libmisc/xz/xz_dec_lzma2.c:497:28:
warning: always_inline function might not be inlinable [-Wattributes]
170 
../../../../../../rtems/c/src/../../cpukit/libmisc/xz/xz_dec_lzma2.c:478:29:
warning: always_inline function might not be inlinable [-Wattributes]


Since these are in every BSP, it would be nice to get these resolved
permanently.

--joel
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

offtop: are there any RTEMS-related jobs in Germany?

2017-06-29 Thread Denis Obrezkov
Hello all,

I am now in Germany with a visa for a job search.
So, I have a question: are there RTEMS jobs in Germany?
I will start my search at the end of the summer, but as for now I am
especially
interested in possible vacancies in Bremen, Mainz and Postdam.

-- 
Regards, Denis Obrezkov
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

LIBBSD

2017-06-29 Thread Kirspel, Kevin
For those who run a RTEMS 4.12 single processor application with LIBBSD, what 
percentage of time does your application spend in the timer server task?  My 
NXP LPC3250 application spends about 13% of the processor time processing the 
timer server.  Most of that time is spent processing LIBBSD's kernel callouts.  
I am wondering if there is an advantage to only call the FreeBSD's 
callout_process() function when we know a callout needs to be processed.  This 
would reduce the number of RTEMS timer fires (which currently fire every tick).

Kevin Kirspel
Electrical Engineer - Sr. Staff
Idexx Roswell
235 Hembree Park Drive
Roswell GA 30076
Tel: (770)-510- ext. 81642
Direct: (770)-688-1642
Fax: (770)-510-4445

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: LIBBSD

2017-06-29 Thread Sebastian Huber

On 29/06/17 20:02, Kirspel, Kevin wrote:

For those who run a RTEMS 4.12 single processor application with 
LIBBSD, what percentage of time does your application spend in the 
timer server task?  My NXP LPC3250 application spends about 13% of the 
processor time processing the timer server.  Most of that time is 
spent processing LIBBSD’s kernel callouts.  I am wondering if there is 
an advantage to only call the FreeBSD’s callout_process() function 
when we know a callout needs to be processed.  This would reduce the 
number of RTEMS timer fires (which currently fire every tick).


Normally, the timer server should be in the range of 0.x% of CPU time. 
If you have 13%, then you have a lot of timeout processing. What is the 
reason for this?


--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail  : sebastian.hu...@embedded-brains.de
PGP : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel