| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A speciality of the RTEMS build system was the make preinstall step. It
copied header files from arbitrary locations into the build tree. The
header files were included via the -Bsome/build/tree/path GCC command
line option.
This has at least seven problems:
* The make preinstall step itself needs time and disk space.
* Errors in header files show up in the build tree copy. This makes it
hard for editors to open the right file to fix the error.
* There is no clear relationship between source and build tree header
files. This makes an audit of the build process difficult.
* The visibility of all header files in the build tree makes it
difficult to enforce API barriers. For example it is discouraged to
use BSP-specifics in the cpukit.
* An introduction of a new build system is difficult.
* Include paths specified by the -B option are system headers. This
may suppress warnings.
* The parallel build had sporadic failures on some hosts.
This patch removes the make preinstall step. All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.
The new cpukit include directories are:
* cpukit/include
* cpukit/score/cpu/@RTEMS_CPU@/include
* cpukit/libnetworking
The new BSP include directories are:
* bsps/include
* bsps/@RTEMS_CPU@/include
* bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include
There are build tree include directories for generated files.
The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.
The "bootstrap -p" option was removed. The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.
Update #3254.
|
|
|
|
|
|
|
|
|
|
| |
Use a self-contained recursive mutex for API_Mutex_Control. The API
mutexes are protected against asynchronous thread cancellation.
Add dedicated mutexes for libatomic and TOD.
Close #2629.
Close #2630.
|
|
|
|
|
|
|
|
| |
POSIX mutexes are now available in all configurations and no longer
depend on --enable-posix.
Update #2514.
Update #3112.
|
|
|
|
|
|
|
|
| |
POSIX condition variables are now available in all configurations and no
longer depend on --enable-posix.
Update #2514.
Update #3113.
|
|
|
|
|
|
|
|
| |
POSIX rwlocks are now available in all configurations and no longer
depend on --enable-posix.
Update #2514.
Update #3115.
|
|
|
|
|
|
|
|
| |
POSIX barriers are now available in all configurations and no longer
depend on --enable-posix.
Update #2514.
Update #3114.
|
|
|
|
|
|
|
|
|
| |
Add POSIX shared memory manager (Shm). Includes a hook-based
approach for the backing memory storage that defaults to the
Workspace, and a test is provided using the heap. A test is
also provided for the basic use of mmap'ing a shared memory
object. This test currently fails at the mmap stage due to
no support for mmap.
|
|
|
|
| |
Update #2858.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Turn pthread_spinlock_t into a self-contained object. On uni-processor
configurations, interrupts are disabled in the lock/trylock operations
and the previous interrupt status is restored in the corresponding
unlock operations. On SMP configurations, a ticket lock is a acquired
and released in addition.
The self-contained pthread_spinlock_t object is defined by Newlib in
<sys/_pthreadtypes.h>.
typedef struct {
struct _Ticket_lock_Control _lock;
__uint32_t _interrupt_state;
} pthread_spinlock_t;
This implementation is simple and efficient. However, this test case of
the Linux Test Project would fail due to call of printf() and sleep()
during spin lock ownership:
https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_spin_lock/1-2.c
There is only limited support for profiling on SMP configurations.
Delete CORE spinlock implementation.
Update #2674.
|
|
|
|
|
|
| |
Rename _Objects_Get_local() into _Objects_Get(). Confusions with the
previous _Objects_Get() function are avoided since the Objects_Locations
parameter is gone.
|
|
|
|
| |
Delete now unused Objects_Locations.
|
| |
|
|
|
|
| |
Update #2555.
|
|
|
|
|
| |
The _Objects_Information_table is statically initialized. So, we can
make it read-only.
|
|
|
|
|
| |
Make the interrupt lock context the second parameter to avoid register
moves.
|
|
|
|
|
|
|
|
|
|
|
|
| |
The mq_open() function returns a descriptor to a POSIX message queue
object identified by a name. This is similar to sem_open(). In
contrast to the POSIX semaphore the POSIX message queues use a separate
object for the descriptor. This extra object is superfluous, since the
object identifier can be used directly for this purpose, just like for
the semaphores.
Update #2702.
Update #2555.
|
|
|
|
|
| |
Make the id the first parameter since usual callers get the object
identifier as the first parameter themself.
|
|
|
|
|
| |
Make the id the first parameter since usual callers get the object
identifier as the first parameter themself.
|
|
|
|
| |
Remove unused location parameter.
|
|
|
|
|
|
| |
Remove unused supports_global parameter. Convert
_Objects_Initialize_information() to a macro to avoid use of
RTEMS_MULTIPROCESSING define for each caller.
|
|
|
|
|
|
|
| |
This functions supports only local objects. Thus, drop the location
parameter which was unused by all callers.
Remove superfluous includes from Classic Region implementation.
|
|
|
|
|
|
|
| |
Use a red-black tree to lookup active global objects by identifier or
name.
Update #2555.
|
|
|
|
|
| |
Change parameters of the objects thread queue extract callout to avoid a
cast and explicit use of the thread wait information.
|
|
|
|
|
|
|
| |
Still define it only if RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES is
defined.
Close #2672.
|
|
|
|
|
|
|
|
|
|
| |
Replace _Objects_Name_to_id_string() with _Objects_Get_by_name() since
all users of this function are interested in the object itself and not
the identifier.
Use the object allocator lock to protect the search.
Update #2555.
|
|
|
|
|
|
|
|
| |
Use the object allocator lock in _Objects_Get_next() instead of disabled
thread dispatching since object creation and deletion is covered by this
lock.
Update #2555.
|
|
|
|
|
|
| |
This simplifies the handling with local-only objects.
Update #2555.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Delete SCORE_INIT. This finally removes the
some.h:
#ifndef SOME_XYZ_EXTERN
#define SOME_XYZ_EXTERN extern
#endif
SOME_XYZ_EXTERN type xyz;
some_xyz.c:
#define SOME_XYZ_EXTERN
#include <some.h>
pattern in favour of
some.h:
extern type xyz;
some_xyz.c
#include <some.h>
type xyz;
Update #2559.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Move the storage for the thread queue heads to the threads. Each thread
provides a set of thread queue heads allocated from a dedicated memory
pool. In case a thread blocks on a queue, then it lends its heads to
the queue. In case the thread unblocks, then it takes a free set of
threads from the queue. Since a thread can block on at most one queue
this works. This mechanism is used in FreeBSD. The motivation for this
change is to reduce the memory demands of the synchronization objects.
On a 32-bit uni-processor configuration the Thread_queue_Control size is
now 8 bytes, compared to 64 bytes in RTEMS 4.10 (other changes reduced
the size as well).
|
|
|
|
|
| |
This function is superfluous due to the introduction of fine grained
locking.
|
|
|
|
|
|
|
| |
The Objects_Control::Lock was a software layer violation. It worked
only for the threads since they are somewhat special.
Update #2273.
|
|
|
|
|
| |
Return the current processor to be in line with
_Thread_Disable_dispatch().
|
|
|
|
|
|
|
|
| |
Do not disable thread dispatching and do not acquire the Giant lock.
This makes it possible to use this object get variant for fine grained
locking.
Update #2273.
|
|
|
|
|
|
|
| |
Use ISR_lock_Context instead of ISR_Level to allow use of ISR locks for
low-level locking.
Update #2273.
|
| |
|
|
|
|
|
|
|
|
|
| |
This enables per-object SMP locks on SMP configurations and is the first
step to support fine-grained locking. On uni-processor configuration
there will be no overhead. The _Objects_Acquire() is intended to
replace _Objects_Get_isr_disable().
Update #2273.
|
|
|
|
|
| |
CodeSonar flagged this as a possible NULL deference. This should never
occur but adding the _Assert() ensures we are guarding against that.
|
| |
|
|
|
|
|
| |
Use allocator mutex for objects allocate/free. This prevents that the
thread dispatch latency depends on the workspace/heap fragmentation.
|
|
|
|
|
| |
The thread restart is now supported on SMP. New test
smptests/smpthreadlife01.
|
| |
|
| |
|
|
|
|
| |
This filed is only used if RTEMS_MULTIPROCESSING is defined.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use a per-CPU thread dispatch disable level. So instead of one global
thread dispatch disable level we have now one instance per processor.
This is a major performance improvement for SMP. On non-SMP
configurations this may simplifiy the interrupt entry/exit code.
The giant lock is still present, but it is now decoupled from the thread
dispatching in _Thread_Dispatch(), _Thread_Handler(),
_Thread_Restart_self() and the interrupt entry/exit. Access to the
giant lock is now available via _Giant_Acquire() and _Giant_Release().
The giant lock is still implicitly acquired via
_Thread_Dispatch_decrement_disable_level().
The giant lock is only acquired for high-level operations in interrupt
handlers (e.g. release of a semaphore, sending of an event).
As a side-effect this change fixes the lost thread dispatch necessary
indication bug in _Thread_Dispatch().
A per-CPU thread dispatch disable level greatly simplifies the SMP
support for the interrupt entry/exit code since no spin locks have to be
acquired in this area. It is only necessary to get the current
processor index and use this to calculate the address of the own per-CPU
control. This reduces the interrupt latency considerably.
All elements for the interrupt entry/exit code are now part of the
Per_CPU_Control structure: thread dispatch disable level, ISR nest level
and thread dispatch necessary. Nothing else is required (except CPU
port specific stuff like on SPARC).
|
| |
|
|
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.
|