Commit Graph

351 Commits

Author SHA1 Message Date
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
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
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
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
Sebastian Huber
83bf105486 score: Rename _Internal_error_Occurred()
Rename _Internal_error_Occurred() into _Terminate().
2014-02-21 09:38:24 +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
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
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
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
39046f766f score: Merge sysstate API into one file 2013-07-24 11:11:21 +02:00
Sebastian Huber
ac252bdce0 sapi: Create extension implementation header
Move implementation specific parts of extension.h and extension.inl into
new header file extensionimpl.h.  The extension.h contains now only the
application visible API.
2013-07-23 15:12:51 +02:00
Sebastian Huber
2445bda1db sapi: Merge rbtree API into one file 2013-07-23 15:12:51 +02:00
Sebastian Huber
98c7eacaaa sapi: Merge timespec API into one file 2013-07-23 15:12:51 +02:00
Sebastian Huber
b5ffa5e136 sapi: Merge CBS API into one file 2013-07-23 15:12:51 +02:00
Sebastian Huber
b1564cc164 sapi: Merge chain implementation into one file 2013-07-22 16:57:27 +02:00
Sebastian Huber
6e93dc4a95 score: Create chain implementation header
Move implementation specific parts of chain.h and chain.inl into new
header file chainimpl.h.  The chain.h contains now only the application
visible API.
2013-07-22 16:57:25 +02:00
Sebastian Huber
993a888dfd rtems: Create message queue implementation header
Move implementation specific parts of message.h and message.inl into new
header file messageimpl.h.  The message.h contains now only the
application visible API.
2013-07-22 16:56:58 +02:00
Sebastian Huber
05e82bd76b score: Error for non-preemptible tasks on SMP
A common use case for disabled preemption was to ensure mutual exclusion
on single-processor configurations.  On SMP this does not work.

To abandon non-preemptible tasks simplifies the scheduler.
2013-07-22 16:46:01 +02:00
Sebastian Huber
f913c796ff sapi: Add rtems_configuration_is_smp_enabled()
Add a configuration field which indicates if the SMP mode of operation
is enabled.  This can be used to disable features unsupported on SMP,
e.g task variables.
2013-07-22 16:46:01 +02:00
Sebastian Huber
2bbea657ae rtems: Create semaphore implementation header
Move implementation specific parts of sem.h and sem.inl into new header
file semimpl.h.  The sem.h contains now only the application visible
API.
2013-07-18 09:58:56 +02:00
Sebastian Huber
9c9b62d8dd score: Changes due to Newlib __DYNAMIC_REENT__
Delete _Thread_libc_reent and add __getreent() instead according to
__DYNAMIC_REENT__ define.

For SMP configurations __DYNAMIC_REENT__ must be defined.

A Newlib including the following patch is required:

2013-07-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>

	* libc/include/sys/config.h (__DYNAMIC_REENT__): Define for RTEMS.
2013-07-17 13:09:49 +02:00
Sebastian Huber
a936aa49b5 scheduler: New simple SMP scheduler implementation
The new Simple SMP Scheduler allocates a processor for the processor
count highest priority ready threads.  The thread priority and position
in the ready chain are the only information to determine the scheduling
decision.  Threads with an allocated processor are in the scheduled
chain.  After initialization the scheduled chain has exactly processor
count nodes.  Each processor has exactly one allocated thread after
initialization.  All enqueue and extract operations may exchange threads
with the scheduled chain.  One thread will be added and another will be
removed.  The scheduled and ready chain is ordered according to the
thread priority order.  The chain insert operations are O(count of ready
threads), thus this scheduler is unsuitable for most real-time
applications.

The thread preempt mode will be ignored.
2013-06-14 16:26:08 +02:00
Sebastian Huber
6c2eedc7dd smp: Add maximum_processors field to config
Delete rtems_configuration_get_smp_maximum_processors().  Delete
rtems_configuration_smp_maximum_processors variable.  Add
maximum_processors field to rtems_configuration_table if RTEMS_SMP is
defined.  Add rtems_configuration_get_maximum_processors().
2013-05-16 11:44:12 +02:00
Sebastian Huber
b7cf1ff717 libcsupport: Delete libc_wrapup()
Add and use rtems_libio_exit_helper.  Add rtems_libio_exit().

The fclose(stdin) etc. makes no sense during exit.  This would use the
_REENT structure of the thread calling _exit().
2013-04-26 10:57:08 +02:00
Sebastian Huber
5fa0e5c5ec libcsupport: Rename open_dev_console()
Rename open_dev_console() to rtems_libio_post_driver().  Rename
rtems_libio_supp_helper to rtems_libio_post_driver_helper.
2013-04-26 10:57:08 +02:00
Sebastian Huber
a290fbe946 libcsupport: Make LibIO helper const
Add and use rtems_libio_helper function type.  Add and use
rtems_libio_helper_null() instead of NULL pointer.
2013-04-26 10:57:08 +02:00
Sebastian Huber
dc76d98a53 sapi: Fix unified workspace option 2013-04-11 13:57:10 +02:00
Joel Sherrill
6784547afd confdefs.h: Only one clock or timer configuration parameter can be defined
Only one of the following can be defined.

+ CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+ CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+ CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER

Otherwise it is a configuration error which can be detected at
compilation time.
2013-04-09 13:15:40 -05:00
Joel Sherrill
92b33b8d09 confdefs.h: Eliminate BSP_DEFAULT_UNIFIED_WORK_AREAS
This was not used by any BSP and obsolete now that unified memory
is an option for all BSPs.
2013-04-09 13:15:39 -05:00
Sebastian Huber
7571a235c5 sapi: PR1911: Add CONFIGURE_DISABLE_BSP_SETTINGS 2013-02-12 09:31:27 +01:00
Sebastian Huber
68f36d144a score: Add and use rtems_assert_context 2013-02-12 09:31:27 +01:00
Joel Sherrill
b697bc6a44 cpukit: Use Consistent Beginning of Doxygen Group Notation
This is the result of a sed script which converts all uses
of @{ into a consistent form.
2013-01-10 17:06:47 -06:00
Joel Sherrill
a15eaaf9fd cpukit: Doxygen group fixes and many warnings addressed
The output of the modules.html is much improved. Most
filesystem and POSIX API related groups are properly nested.
Some formatting issues were addressed as were multiple
inconsistencies.
2013-01-10 17:06:47 -06:00