Commit Graph

547 Commits

Author SHA1 Message Date
Sebastian Huber
23fec9f0e1 score: PR2152: Use allocator mutex for objects
Use allocator mutex for objects allocate/free.  This prevents that the
thread dispatch latency depends on the workspace/heap fragmentation.
2014-03-31 08:29:44 +02:00
Christian Mauderer
5c0c0cf2a6 privateenv: Use POSIX keys instead of task variables. 2014-03-27 14:50:36 +01:00
Sebastian Huber
1fac361fb9 score: PR2174: Add workaround
Add _Scheduler_FIXME_thread_priority_queues_are_broken to prevent thread
priority queues in case an EDF scheduler is used.
2014-03-25 13:19:26 +01:00
Sebastian Huber
e72bc923df sapi: Add profiling report for tests 2014-03-25 13:19:15 +01:00
Chris Johns
c49985691f Change all references of rtems.com to rtems.org. 2014-03-21 08:10:47 +11:00
Sebastian Huber
51f823c932 posix: Use interal mutex for once implementation
Enable pthread_once() for all configurations.  The pthread_once()
function is one means to initialize POSIX keys.  Another use case is the
C++ support.
2014-03-19 08:34:26 +01:00
Sebastian Huber
840ae715a9 sapi: Add <rtems/test.h>
Provide support functions to print the begin/end of test message.
Provide a test fatal extension to print out profiling reports in the
future.
2014-03-17 09:17:36 +01:00
Sebastian Huber
53ad908a64 score: Add SMP lock profiling support 2014-03-14 08:46:49 +01:00
Sebastian Huber
f980561ee0 score: Add per-CPU profiling
Add per-CPU profiling stats API.  Implement the thread dispatch disable
level profiling.  The interrupt profiling must be implemented in CPU
port specific parts (mostly assembler code).  Add a support function
_Profiling_Outer_most_interrupt_entry_and_exit() for this purpose.
2014-03-14 08:46:49 +01:00
Sebastian Huber
350f88dc6e sapi: Add SMP lock profiling app. level data 2014-03-14 08:46:49 +01:00
Sebastian Huber
29c9eb601e sapi: Add per-CPU profiling application level data 2014-03-14 08:46:49 +01:00
Sebastian Huber
4dad4b8411 sapi: Add profiling application level support 2014-03-14 08:46:49 +01:00
Sebastian Huber
4d3e933466 sapi: Typos 2014-03-13 16:03:55 +01:00
Sebastian Huber
d50acdbb6c score: Add local context to SMP lock API
Add a local context structure to the SMP lock API for acquire and
release pairs.  This context can be used to store the ISR level and
profiling information.  It may be later used to enable more
sophisticated lock algorithms, e.g. MCS locks.

There is only one lock that cannot be used with a local context.  This
is the per-CPU lock since here we would have to transfer the local
context through a context switch which is very complicated.
2014-03-11 10:58:09 +01:00
Sebastian Huber
ae88aa7927 sapi: Use one SMP lock for all chains
This partially reverts commit 1215fd4d94.

In order to support profiling of SMP locks and provide a future
compatible SMP locks API it is necessary to add an SMP lock destroy
function.  Since the commit above adds an SMP lock to each chain control
we would have to add a rtems_chain_destroy() function as well.  This
complicates the chain usage dramatically.  Thus revert the patch above.
A global SMP lock for all chains is used to implement the protected
chain operations.

Advantages:

* The SAPI chain API is now identical on SMP and non-SMP
  configurations.

* The size of the chain control is reduced and is then equal to the
  Score chains.

* The protected chain operations work correctly on SMP.

Disadvantage:

* Applications using many different chains and the protected operations
  may notice lock contention.

The chain control size drop is a huge benefit (SAPI chain controls are
66% larger than the Score chain controls).  The only disadvantage is not
really a problem since these applications can use specific interrupt
locks and unprotected chain operations to avoid this issue.
2014-03-11 10:58:09 +01:00
Joel Sherrill
e6c87f7872 POSIX keys now enabled in all configurations.
Formerly POSIX keys were only enabled when POSIX threads
were enabled. Because they are a truly safe alternative
to per-task variables in an SMP system, they are being
enabled in all configurations.
2014-03-07 13:21:11 -06:00
Jennifer Averett
039a189de1 sapi: Moved smp initialization and added cpuset initilization.
SMP must be initialized in order to know the current set of
cores available. Without this, you cannot initialize the
default cpu_set_t associated with Classic API tasks and
POSIX threads.
2014-03-07 09:09:01 -06:00
Sebastian Huber
7336be9d78 score: SMP initialization and shutdown changes
Rename _SMP_Request_other_cores_to_perform_first_context_switch() into
_SMP_Request_start_multitasking() since this requests now a multitasking
start on all configured and available processors.  The name corresponds
_Thread_Start_multitasking() and
_SMP_Start_multitasking_on_secondary_processor() actions issued in
response to this request.  Move in source file to right place.

Rename PER_CPU_STATE_READY_TO_BEGIN_MULTITASKING into
PER_CPU_STATE_READY_TO_START_MULTITASKING.

Rename PER_CPU_STATE_BEGIN_MULTITASKING into
PER_CPU_STATE_REQUEST_START_MULTITASKING.

Rename _SMP_Request_other_cores_to_shutdown() into
_SMP_Request_shutdown().

Add a per-CPU state lock to protect all changes.  This was necessary to
offer a controlled shutdown of the system (atomic read/writes alone are
not sufficient for this kind of synchronization).

Add documentation for Per_CPU_State.

Delete debug output.

New tests smptests/smpfatal01 and smptests/smpfatal02.
2014-03-06 09:43:57 +01:00
Sebastian Huber
83bf105486 score: Rename _Internal_error_Occurred()
Rename _Internal_error_Occurred() into _Terminate().
2014-02-21 09:38:24 +01:00
Sebastian Huber
6ca4f6af8a score: Add and use <rtems/score/smpimpl.h>
Collect SMP implementation specific parts in the
<rtems/score/smpimpl.h> header file.
2014-02-19 09:59:41 +01:00
Sebastian Huber
9eec2f33e9 score: Add RTEMS_FATAL_SOURCE_SMP
Use rtems_fatal() instead of _CPU_Fatal_halt() to shutdown processors in
SMP configurations since this allows intervention of BSP or application
specific fatal extensions.
2014-02-19 09:59:40 +01:00
Sebastian Huber
33cb8bf64d score: Add RTEMS_FATAL_SOURCE_BSP
Merge RTEMS_FATAL_SOURCE_BSP_GENERIC and RTEMS_FATAL_SOURCE_BSP_SPECIFIC
into new fatal source RTEMS_FATAL_SOURCE_BSP.  This makes it easier to
figure out the code position given a fatal source and code.
2014-02-19 09:59:39 +01:00
Sebastian Huber
b39e055a49 score: Delete INTERNAL_ERROR_SHUTDOWN_WHEN_NOT_UP
This error case is no longer required since rtems_shutdown_executive()
can be called anytime, anywhere
2014-02-19 09:59:39 +01:00
Sebastian Huber
8a6de83fd8 score: Move _SMP_Request_other_cores_to_shutdown()
Move _SMP_Request_other_cores_to_shutdown() invocation from
rtems_shutdown_executive() to _Internal_error_Occurred() to allow a
proper shutdown on SMP configurations even in the error case.
2014-02-19 09:59:39 +01:00
Sebastian Huber
514705d2f1 score: Delete _Thread_BSP_context
Do not return to BSP context in the exit() shutdown path.  This makes it
possible to re-use the initialization stack.  It can be used for the
interrupt stack for example.  On targets with a small RAM this is a
considerable benefit.

This change eliminates also some special cases and simplifies the code.

Delete _Thread_Set_global_exit_status(),
_Thread_Get_global_exit_status() and _Thread_Stop_multitasking().
2014-02-19 09:59:39 +01:00
Sebastian Huber
92f50c3b29 score: Add SYSTEM_STATE_TERMINATED
Merge systems states SYSTEM_STATE_SHUTDOWN and SYSTEM_STATE_FAILED into
new system state SYSTEM_STATE_TERMINATED.  This reflects that all system
termination paths end up in _Internal_error_Occurred().
2014-02-19 09:59:38 +01:00
Sebastian Huber
24bf11eca1 score: Add CPU counter support
Add a CPU counter interface to allow access to a free-running counter.
It is useful to measure short time intervals.  This can be used for
example to enable profiling of critical low-level functions.

Add two busy wait functions rtems_counter_delay_ticks() and
rtems_counter_delay_nanoseconds() implemented via the CPU counter.
2014-02-14 10:28:29 +01:00
Sebastian Huber
bab16de267 score: Change debug helper functions
Rename rtems_internal_error_description() to
rtems_internal_error_text().  Rename rtems_fatal_source_description() to
rtems_fatal_source_text().  Rename rtems_status_code_description() to
rtems_status_text().  Remove previous implementation of
rtems_status_text().
2014-02-12 09:18:00 +01:00
Sebastian Huber
4ea97d2449 score/rbtree: Remove "unprotected" from API 2013-11-21 12:58:46 +01:00
Sebastian Huber
833dd90335 score/rbtree: Delete protected operations
The user of the red-black tree container must now ensure that at most
one thread at once can access an instance.
2013-11-21 12:58:46 +01:00
Sebastian Huber
3c96bee3f9 JFFS2: Add RTEMS support 2013-09-19 13:16:06 +02:00
Sebastian Huber
1215fd4d94 sapi: SMP support for chains
Add ISR lock to chain control for proper SMP protection.  Replace
rtems_chain_extract() with rtems_chain_explicit_extract() and
rtems_chain_insert() with rtems_chain_explicit_insert() on SMP
configurations.  Use rtems_chain_explicit_extract() and
rtems_chain_explicit_insert() to provide SMP support.
2013-08-30 11:16:28 +02:00
Sebastian Huber
23de794d15 score: Add and use CHAIN_INITIALIZER_ONE_NODE().
Add and use CHAIN_NODE_INITIALIZER_ONE_NODE_CHAIN(),
RTEMS_CHAIN_INITIALIZER_ONE_NODE() and
RTEMS_CHAIN_NODE_INITIALIZER_ONE_NODE_CHAIN().
2013-08-27 10:48:16 +02:00
Chris Johns
6e4c01e3a2 posix: Update to the pthread_once changes.
Implement the reeview changes.
Add a POSIX Fatal error domain.
Fix confdefs.h to correctly handle the internal POSIX mutexes.
2013-08-23 14:56:36 +10:00
Sebastian Huber
99b35052ae smp: Add Deterministic Priority SMP Scheduler 2013-08-20 10:17:35 +02:00
Sebastian Huber
9d83f58ab8 smp: Replace Scheduler_simple_smp_Control
Replace Scheduler_simple_smp_Control with Scheduler_SMP_Control.  Rename
_Scheduler_simple_smp_Instance() to _Scheduler_SMP_Instance().
2013-08-20 10:14:04 +02:00
Sebastian Huber
c1a356e9f8 score: _Priority_bit_map_Handler_initialization()
Delete _Priority_bit_map_Handler_initialization() and rely on BSS
initialization.  Move definition of _Priority_Major_bit_map and
_Priority_Bit_map to separate file.  Move definition of __log2table also
to this file.
2013-08-20 10:14:03 +02:00
Chris Johns
03acc5915e posix: Change pthread_once to be SMP safe.
Change pthread_once from using disabled pre-emption to using a
pthread mutex making it SMP safe. GCC using a posix threading
model uses pthread_once.

The pthread mutex requires at least 1 mutex is configured so
confdefs.h has been updated to account for the internal
mutex.
2013-08-14 10:21:41 +10:00
Sebastian Huber
6b4e448ebe PR766: Delete __RTEMS_INSIDE__ 2013-08-08 14:11:22 +02:00
Sebastian Huber
2ad250e92d posix: Create key implementation header
Move implementation specific parts of key.h and key.inl into new header
file keyimpl.h.  The key.h contains now only the application visible
API.
2013-08-06 15:47:57 +02:00
Zhongwei Yao
b5c906429f Unlimited objects support for POSIX keys
This patch enables unlimited model in POSIX key manger and have a decent
runtime on POSIX key searching, adding and deleting operations.  Memory
overhead is lower than current implementation when the size of key and key
value becomes big.
2013-08-06 14:11:38 +02:00
Sebastian Huber
b4b309c559 smp: Generalize _Thread_Start_multitasking()
Add context parameter to _Thread_Start_multitasking() and use this
function in rtems_smp_secondary_cpu_initialize().  This avoids
duplication of code.

Fix missing floating point context initialization in
rtems_smp_secondary_cpu_initialize().  Now performed via
_Thread_Start_multitasking().
2013-08-05 13:45:36 +02:00
Sebastian Huber
2bca05f7d7 score: Delete SYSTEM_STATE_BEGIN_MULTITASKING
Nothing happened between the SYSTEM_STATE_BEGIN_MULTITASKING to
SYSTEM_STATE_UP transition.
2013-08-05 13:45:36 +02:00
Sebastian Huber
f031df0e63 score: Rename tod.h to todimpl.h 2013-08-01 16:45:45 +02:00
Sebastian Huber
c236082873 smp: Provide cache optimized Per_CPU_Control
Delete _Per_CPU_Information_p.
2013-07-31 15:09:04 +02:00
Sebastian Huber
a2e3f33f39 score: Create object implementation header
Move implementation specific parts of object.h and object.inl into new
header file objectimpl.h.  The object.h contains now only the
application visible API.
2013-07-26 11:55:47 +02:00
Sebastian Huber
0c3edbf0cf Include missing <rtems/score/threaddispatch.h> 2013-07-26 11:55:47 +02:00
Sebastian Huber
7f04cb18ff score: Create mpci implementation header
Move implementation specific parts of mpci.h into new header file
mpciimpl.h.  The mpci.h contains now only the application visible API.
2013-07-26 11:55:46 +02:00
Sebastian Huber
6cec745f6c rtems: Create signal implementation header
Move implementation specific parts of signal.h into new header file
signalimpl.h.  The signal.h contains now only the application visible
API.
2013-07-26 11:55:46 +02:00
Sebastian Huber
5618c37a7a score: Create thread implementation header
Move implementation specific parts of thread.h and thread.inl into new
header file threadimpl.h.  The thread.h contains now only the
application visible API.

Remove superfluous header file includes from various files.
2013-07-26 11:55:44 +02:00