The T_now_tick() is a fall back time measurement using the CPU counter
in case no Clock Driver is configured. Some CPU counter may overflow
during the test execution. Accumulate the elapsed time to reduce the
chance of CPU counter overflows.
If SMP support is enabled and the system has exactly one processor, then
it may use an uniprocessor scheduler. The ask for help, reconsider help
request, and withdraw node operations can be NULL in this case, since
they are only used if a thread has at least one helping scheduler node.
At least two schedulers are required to get a helping node and each
scheduler involved must own at least one processor. This is not
possible on a system with exactly one processor.
Issue the new fatal SMP error
SMP_FATAL_SCHEDULER_REQUIRES_EXACTLY_ONE_PROCESSOR if the system starts
with not exactly one processor and an uniprocessor scheduler is
configured.
The uniprocessor schedulers do not support systems with more than more
processors. So they rivially support thread pinning and thus the
SMP_FATAL_SCHEDULER_PIN_OR_UNPIN_NOT_SUPPORTED cannot happen.
Add a second default implementation for SMP schedulers which do not
support thread pinning.
Change license to BSD-2-Clause according to file history and re-licensing
agreement.
Update #3053.
psxdevctl is supposed to return the value in errno. Before, it was
returning -1 and setting errno. Changed the tests to reflect these
changes. Added code from RRADE's posix_devctl.c.
Closes#4506
Remove the duplicated description which is an out dated copy and paste
from the Classic API Guide. Instead, thoroughly document the individual
extensions.
Change license to BSD-2-Clause according to file histories and
documentation re-licensing agreement.
Update #3899.
Update #3993.
Certain files related to the Zynq BSP's I2C driver are useable by the ZynqMP BSP as well.
Moved these files to shared directory in anticipation of I2C support for ZynqMP.
The rtems_rate_monotonic_get_status() directive returns an arbitrary
number for the count of postponed jobs if it is called for a newly
created period object. Set the count of postponed jobs to zero during
object creation.
Close#4511.
Split up rbtreenext.c since only _RBTree_Minimum() is used by the operating
system core services (thread queues and the EDF scheduler).
Change license to BSD-2-Clause according to file history and re-licensing
agreement.
Update #3053.
This simplifies the implementation a bit. Declare _TOD_Days_to_date[] in
<rtems/score/todimpl.h>. Make _TOD_Days_per_month[] and
_TOD_Days_since_last_leap_year[] static.
Update #4338.
Move the TOD validation to the callers of _TOD_Set(). This avoids dead code in
case only rtems_clock_set() is used in an application because rtems_clock_set()
always calls _TOD_Set() with a valid time of day.
The _Thread_Dispatch() function was customized over time and now the
work is done by _Thread_Do_dispatch() and specialized wrappers. The
plain _Thread_Dispatch() is now only used in some CPU ports. Move it to
a separate file to avoid dead code in the general.
Change license to BSD-2-Clause according to file history and
re-licensing agreement.
Update #3053.
Rename LEON3_FATAL_INVALID_CACHE_CONFIG_MAIN_PROCESSOR in
LEON3_FATAL_INVALID_CACHE_CONFIG_BOOT_PROCESSOR since the term
"boot processor" is used elsewhere in the code base.
Move the transition map members of the test context to a dedicated
structure. Move the transition variant pre-condition prepare, action,
and post-condition checks to a separate function to reduce the
indentation level and allow skipping of transition variants.
It wasn't possible to keep the CS line low between multiple message
descriptors in one transfer. This patch reworks the driver so that it is
possible.
Update #4180
In _Thread_queue_Flush_critical(), update the priority of the thread
queue owner only if necessary. The scheduler update priority operation
could be expensive.
In order to ensure FIFO fairness across schedulers, the thread queue
surrender operation must be used to dequeue a thread from the thread
queue. The thread queue extract operation is intended for timeouts.
Add _Thread_queue_Resume() which may be used to make extracted or
surrendered threads ready again.
Remove the now unused _Thread_queue_Extract_critical() function.
Close#4509.
The priority queues in clustered scheduling configurations use a per
scheduler priority queue rotation to ensure FIFO fairness across
schedulers. This mechanism is implemented in the thread queue surrender
operation. Unfortunately some semaphore and message queue directives
used wrongly the thread queue extract operation. Fix this through the
use of _Thread_queue_Surrender().
Update #4358.
The behaviour of the futex operations is defined by Linux:
https://man7.org/linux/man-pages/man2/futex.2.html
Use EAGIN instead of EWOULDBLOCK to be in line with the Linux man page.
These error numbers have the same value in Newlib. Using the same error
numbers helps to avoid confusion.
When you look at the history of the Linux man page you see that they
replaced EWOULDBLOCK with EAGAIN over time. At the time of the RTEMS
futex implementation they used EWOULDBLOCK.