| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The thread queue implementation was heavily reworked to support SMP.
This broke the multiprocessing support of the thread queues. This is
fixed by this patch.
A thread proxy is unblocked due to three reasons
1) timeout,
2) request satisfaction, and
3) extraction.
In case 1) no MPCI message must be sent. This is ensured via the
_Thread_queue_MP_callout_do_nothing() callout set during
_Thread_MP_Allocate_proxy().
In case 2) and 3) an MPCI message must be sent. In case we interrupt
the blocking operation during _Thread_queue_Enqueue_critical(), then
this message must be sent by the blocking thread. For this the new
fields Thread_Proxy_control::thread_queue_callout and
Thread_Proxy_control::thread_queue_id are used.
Delete the individual API MP callout types and use
Thread_queue_MP_callout throughout. This type is only defined in
multiprocessing configurations. Prefix the multiprocessing parameters
with mp_ to ease code review. Multiprocessing specific parameters are
optional due to use of a similar macro pattern. There is no overhead
for non-multiprocessing configurations.
|
|
|
|
|
| |
Also set the thread wait return code for thread proxies since this
causes no harm.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Change _Thread_queue_Flush() into a macro that invokes
_Thread_queue_Do_flush() with the parameter set defined by
RTEMS_MULTIPROCESSING. For multiprocessing configurations add the
object identifier to avoid direct use of the thread wait information.
Use mp_ prefix for multiprocessing related parameters.
Rename Thread_queue_Flush_callout to Thread_queue_MP_callout since this
type will be re-used later for other operations as well.
|
|
|
|
|
|
| |
We must update the wait flags under protection of the current thread
lock, otherwise a _Thread_Timeout() running on another processor may
interfere.
|
|
|
|
| |
MP support was not implemented.
|
|
|
|
|
|
|
|
|
|
|
| |
This field was only by the monitor in non-multiprocessing
configurations. Add new field Thread_Wait_information::remote_id in
multiprocessing configurations and use it for the remote procedure call
thread queue.
Add _Thread_Wait_get_id() to obtain the object identifier for debug and
system information tools. Ensure the object layout via static asserts.
Add test cases to sptests/spthreadq01.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Use unprotected chain operation in _User_extensions_Remove_set() since
the caller must own the object allocator lock.
Update #2555.
|
|
|
|
|
| |
Change parameters of the objects thread queue extract callout to avoid a
cast and explicit use of the thread wait information.
|
| |
|
|
|
|
|
|
| |
Bug introduced by be8897644043e4378db7add02c3c9e1ac7fde563.
Update #2555.
|
|
|
|
|
|
|
| |
We must provide thread queue heads for the thread wait information for
each thread proxy (thread queue heads were introduced by
d7665823b208daefb6855591d808e1f3075cedcb). The thread proxy must be
allocated before the enqueue operation.
|
| |
|
|
|
|
| |
Make sure that the thread proxy is registered as the mutex owner.
|
| |
|
|
|
|
|
|
|
|
|
| |
Remove the Thread_queue_Queue::operations field to reduce the size of
this structure. Add a thread queue operations parameter to the
_Thread_queue_First(), _Thread_queue_First_locked(),
_Thread_queue_Enqueue(), _Thread_queue_Dequeue() and
_Thread_queue_Flush() functions. This is a preparation patch to reduce
the size of several synchronization objects.
|
|
|
|
|
| |
The _CPU_Context_switch() in _Thread_Start_multitasking() does in fact
not return.
|
| |
|
|
|
|
|
|
|
| |
The rtems_extension_create() no longer uses the Giant lock. Ensure that
we call _User_extensions_Add_set() only in the right context.
Update #2555.
|
|
|
|
|
|
|
| |
Still define it only if RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES is
defined.
Close #2672.
|
|
|
|
| |
Update #2627.
|
|
|
|
|
|
|
|
|
|
| |
Use the default thread lock to protect rate-monotonic state changes.
This avoids use of the Giant lock. Split rtems_rate_monotonic_period()
body into several static functions. Introduce a new thread wait class
THREAD_WAIT_CLASS_PERIOD for period objects to synchronize the blocking
operation.
Close #2631.
|
|
|
|
|
|
| |
The object creation/deletion is protected by the object allocator lock.
Update #2555.
|
|
|
|
| |
Update #2555.
|
|
|
|
|
|
| |
Use an ISR lock to protect the spinlock state. Remove empty attributes.
Update #2555.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
Yields higher performance on SMP systems.
Close #2625.
|
|
|
|
| |
Update #2554.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The CPU time used of a thread was previously maintained per-processor
mostly during _Thread_Dispatch(). However, on SMP configurations the
actual processor of a thread is difficult to figure out since thread
dispatching is a highly asynchronous process (e.g. via inter-processor
interrupts). Only the intended processor of a thread is known to the
scheduler easily. Do the CPU usage accounting during thread heir
updates in the context of the scheduler operations. Provide the
function _Thread_Get_CPU_time_used() to get the CPU usage of a thread
using proper locks to get a consistent value.
Close #2627.
|
|
|
|
|
| |
In uni-processor configurations we have only one timehand. Do not issue
a memcpy() with equal source and destination.
|
|
|
|
| |
A mutex must be released by its owner.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
Define _CPU_SMP_Prepare_start_multitasking() as empty macro to prevent a
link-time error on SMP configurations.
|
|
|
|
|
|
|
|
|
| |
Use a red-black tree instead of delta chains.
Close #2344.
Update #2554.
Update #2555.
Close #2606.
|
|
|
|
| |
Update #2554.
|
|
|
|
|
|
|
|
|
| |
The use case for this is the Cortex-A9 MPCore which has per-processor
registers (only accessible by a particular processor) for the global
timer used by the clock driver. This might be useful for other drivers
as well.
Update #2554.
|
| |
|
| |
|
|
|
|
|
| |
Rename Per_CPU_Control::started into Per_CPU_Control::online to match
standard nomenclature.
|
| |
|
|
|
|
| |
Maximum number of processors of all systems supported by this CPU port.
|
|
|
|
| |
Fixes #2515.
|
| |
|
| |
|
| |
|
| |
|
| |
|