Gaisler patches qemu leon3 testing
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
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
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
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
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
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
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
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
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
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
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?
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
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
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