| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|
|
|
|
|
| |
Renames rtems_deviceio_errno to rtems_status_code_to_errno and
integrates it into the Classic API Status Handler. This function
can now be called by including status.h
|
|
|
|
|
|
| |
Add Timestamp support in the score to return a timestamp in nanoseconds.
Add a test.
Update the RTEMS API documentation.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Reference: http://en.wikipedia.org/wiki/Leap_year
Bug: https://www.rtems.org/bugzilla/show_bug.cgi?id=1422
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add and use _ISR_Disable_without_giant() and
_ISR_Enable_without_giant() if RTEMS_SMP is defined.
On single processor systems the ISR disable/enable was the big hammer
which ensured system-wide mutual exclusion. On SMP configurations this
no longer works since other processors do not care about disabled
interrupts on this processor and continue to execute freely.
On SMP in addition to ISR disable/enable an SMP lock must be used.
Currently we have only the Giant lock so we can check easily that ISR
disable/enable is used only in the right context.
|
|
|
|
|
|
| |
Add and use _ASR_Get_posted_signals(). The post-switch handler is not
protected by disabled thread dispatching. Use proper SMP lock for
signal management.
|
|
|
|
|
| |
Add thread parameter to _Thread_queue_Enqueue_with_handler() to avoid
access to global _Thread_Executing.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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).
|
| |
|
|
|
|
| |
This define is no longer used.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two issues are addressed.
1. On single processor configurations the set/get of the now/uptime
timestamps is now consistently protected by ISR disable/enable
sequences. Previously nested interrupts could observe partially written
values since 64-bit writes are not atomic on 32-bit architectures in
general. This could lead to non-monotonic uptime timestamps.
2. The TOD now/uptime maintanence is now independent of the giant lock.
This is the first step to remove the giant lock in _Thread_Dispatch().
|
|
|
|
|
|
| |
Move the nanoseconds since last tick support from the Watchdog to the
TOD handler. Now the TOD managment is encapsulated in the TOD_Control
structure.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
ISR locks are low-level locks to protect critical sections accessed by
threads and interrupt service routines.
On single processor configurations the ISR locks degrade to simple ISR
disable/enable sequences. No additional storage or objects are
required.
This synchronization primitive is supported on SMP configurations. Here
SMP locks are used.
|
|
|
|
| |
Rename to _RTEMS_Tasks_Dispatch_if_necessary().
|
| |
|
|
|
|
|
| |
Delete TOD_MICROSECONDS_PER_SECOND, TOD_MICROSECONDS_TO_TICKS() and
TOD_MILLISECONDS_TO_TICKS().
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
Move implementation specific parts of mpci.h into new header file
mpciimpl.h. The mpci.h contains now only the application visible API.
|
|
|
|
|
|
| |
Move implementation specific parts of signal.h into new header file
signalimpl.h. The signal.h contains now only the application visible
API.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Move implementation specific parts of tqdata.h, threadq.h and
threadq.inl into new header file threadqimpl.h. The threadq.h contains
now only the application visible API.
Delete tqdata.h.
|
|
|
|
|
|
| |
Move implementation specific parts of states.h and states.inl into new
header file statesimpl.h. The states.h contains now only the
application visible API.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
Move implementation specific parts of scheduler.h and scheduler.inl into
new header file schedulerimpl.h. The scheduler.h contains now only the
application visible API.
|
| |
|
|
|
|
|
|
| |
Move implementation specific parts of heap.h and heap.inl into new
header file heapimpl.h. The heap.h contains now only the application
visible API.
|
| |
|
|
|
|
|
|
| |
Move implementation specific parts of tasks.h and tasks.inl into new
header file tasksimpl.h. The tasks.h contains now only the application
visible API.
|
|
|
|
|
|
| |
Move implementation specific parts of region.h and region.inl into new
header file regionimpl.h. The region.h contains now only the
application visible API.
|
|
|
|
| |
This header file is included indirectly via <rtems/rtems/region.h>.
|
|
|
|
|
|
| |
Move implementation specific parts of part.h and part.inl into new
header file partimpl.h. The part.h contains now only the application
visible API.
|
|
|
|
|
|
| |
Move implementation specific parts of timer.h and timer.inl into new
header file timerimpl.h. The timer.h contains now only the application
visible API.
|
|
|
|
|
|
| |
Move implementation specific parts of ratemon.h and ratemon.inl into
new header file ratemonimpl.h. The ratemon.h contains now only the
application visible API.
|
|
|
|
|
|
| |
Move implementation specific parts of dpmem.h and dpmem.inl into new
header file dpmemimpl.h. The dpmem.h contains now only the application
visible API.
|
|
|
|
|
|
| |
Move implementation specific parts of event.h, event.inl, eventset.h and
eventset.inl into new header file eventimpl.h. The event.h contains now
only the application visible API.
|
| |
|
|
|
|
|
|
| |
Move implementation specific parts of asr.h and asr.inl into new header
file asrimpl.h. The asr.h contains now only the application visible
API.
|