| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
This avoids having conditional statements to get the API-specific status
code.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Last use was removed by:
commit 54550e048d3a49435912797d2024f80671e93267
Author: Sebastian Huber <sebastian.huber@embedded-brains.de>
Date: Fri May 13 08:16:30 2016 +0200
posix: Rework pthread_join()
Rework pthread_join() to use _Thread_Join().
|
|
|
|
|
|
|
| |
The _CPU_ISR_Is_enabled() function operates on ISR cookies and so must
mask off the appropriate status bits. This also fixes the naming of the
parameters of the _CPU_ISR_* functions to indicate use of ISR cookies
instead of interrupt enable/disable levels.
|
|
|
|
|
| |
Replace Objects_Name_or_id_lookup_errors with new Status_Control codes.
Get rid of the _Status_Object_name_errors_to_status lookup table.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Do not adjust the stack area begin address since this may confuse the
stack allocator and result in failed stack frees.
Account for the alignment overhead in the stack space size estimate.
Check that the stack size is in the expected interval.
|
|
|
|
|
| |
Move the CPU time budget to the thread configuration. This simplifies
_Thread_Initialize().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Overview
========
The errata is worked around in the kernel without requiring toolchain
modifications. It is triggered the JMPL/RETT return from trap instruction
sequence never generated by the compiler and. There are also other
conditions that must must be true to trigger the errata, for example the
instruction that the trap returns to has to be a JMPL instruction. The
errata can only be triggered if certain data is corrected by ECC
(inflicted by radiation), thus it can not be triggered under normal
operation. For more information see:
www.gaisler.com/notes
Affected RTEMS target BSPs:
* GR712RC
* UT699
* UT700/699E
The work around is enabled by defining __FIX_LEON3_TN0018 at build time.
After applying the following GCC patch, GCC will set the define when
compiling for an affected multilib:
* GR712RC (-mcpu=leon3 -mfix-gr712rc)
* UT700/UT699E (-mpcu=leon3 -mfix-ut700)
* UT699 (-mcpu=leon -mfix-ut699)
When building for another multilib and TN0018 is still required, it
is possible to enable it on the RTEMS kernel configure line using the
TARGET_CFLAGS (-D__FIX_LEON3FT_TN0018) or other by other means.
The following GCC patch sets __FIX_LEON3FT_TN0018 for the affected RTEMS
multilibs:
---------
diff --git a/gcc/config/sparc/rtemself.h b/gcc/config/sparc/rtemself.h
index 6570590..ddec98c 100644
--- a/gcc/config/sparc/rtemself.h
+++ b/gcc/config/sparc/rtemself.h
@@ -33,6 +33,8 @@
builtin_assert ("system=rtems"); \
if (sparc_fix_b2bst) \
builtin_define ("__FIX_LEON3FT_B2BST"); \
+ if (sparc_fix_gr712rc || sparc_fix_ut700 || sparc_fix_ut699) \
+ builtin_define ("__FIX_LEON3FT_TN0018"); \
} \
while (0)
---------
Workaround Implementation
=========================
In general there are two approaches that the workaround uses:
A) avoid ECC restarting the RETT instruction
B) avoid returning from trap to a JMPL instruction
Where A) comes at a higher performance cost than B), so B) is used
where posssible. B) can be achived for certain returns from trap
handlers if trap entry is controlled by assembly, such as system calls.
A)
A special JMPL/RETT sequence where instruction cache is disabled
temporarily to avoid RETT containing ECC errors, and reading of RETT
source registers to "clean" them from incorrect ECC just before RETT
is executed.
B)
The work around prevents JMPL after system calls (TA instruction) and
modifies assembly code on return from traps jumping back to application
code. Note that for some traps the trapped instruction is always
re-executed and can therefore not trigger the errata, for example the
SAVE instruction causing window overflow or an float instruction causing
FPU disabled trap.
RTEMS SPARC traps workaround implementation:
NAME NOTE TRAP COMMENT
* window overflow 1 - 0x05 always returns to a SAVE
* window underflow 1 - 0x06 always returns to a RESTORE
* interrupt traps 2 - 0x10..1f special rett sequence workaround
* syscall 3 - 0x80 shutdown system - never returns
* ABI flush windows 2 - 0x83 special rett sequence workaround
* syscall_irqdis 4 - 0x89
* syscall_irqen 4 - 0x8A
* syscall_irqdis_fp 1 - 0x8B always jumps back to FP instruction
* syscall_lazy_fp_switch 5 - 0x04 A) jumps back to FP instruction, or to
B) _Internal_error() starting with SAVE
Notes:
1) no workaround needed because trap always returns to non-JMPL instruction
2) workaround implemented by special rett sequence
3) no workaround needed because system call never returns
4) workaround implemented by inserting NOP in system call generation. Thus
fall into 1) when workaround is enabled and no trap handler fix needed.
5) trap handler branches into both 1) and returning to _Internal_error()
which starts with a SAVE and besides since it shuts down the system that
RETT should never be in cache (only executed once) so fix not necessary
in this case.
Any custom trap handlers may also have to be updated. To simplify that,
helper work around assembly code in macros are available in a separate
include file <libcpu/grlib-tn-0018.h>.
Close #4155.
|
|
|
|
| |
Close #4336.
|
|
|
|
| |
Update #4336.
|
| |
|
|
|
|
| |
Update #4336.
|
|
|
|
|
|
| |
Run with stack alignment faults enabled under RTEMS_DEBUG to catch any
stack misalignments early. This makes it easier to track them down
should they ever occur.
|
| |
|
|
|
|
|
|
| |
The Per_CPU_Control::isr_dispatch_disable is a 32-bit integer.
Close #4206.
|
|
|
|
|
|
|
|
| |
Make sure that a user-provided stack size is the minimum size allocated
for the stack.
Make sure we meet the stack alignment requirement also for CPU ports
with CPU_STACK_ALIGNMENT > CPU_HEAP_ALIGNMENT.
|
|
|
|
|
| |
Clarify CPU_STACK_ALIGNMENT requirements in no_cpu port. Add static
assertion to enforce CPU_STACK_ALIGNMENT requirements.
|
|
|
|
|
|
|
| |
Remove superfluous check for the objects maximum since the maximum is
also used as a loop limit.
Fix formatting.
|
|
|
|
|
|
|
|
| |
Close the thread object if a thread create extension fails. Also call
the delete extension to avoid resource leaks in early extensions if a
late extension fails.
Close #4270.
|
|
|
|
| |
Update #4267.
|
|
|
|
| |
Update #4267.
|
|
|
|
| |
Call _Thread_queue_Flush_critical() directly.
|
|
|
|
|
|
| |
Use the number of threads which must arrive at the barrier to trip the
automatic release also to indicate if the barrier is a manual release
barrier.
|
|
|
|
|
| |
Use the type safe _Objects_Open_u32() instead. Return the object
identifier to enforce a common usage pattern.
|
|
|
|
|
|
|
|
| |
Require that the corresponding lock is acquired before the action
handler returns. This helps to avoid recursion in the signal
processing.
Update #4244.
|
| |
|
|
|
|
|
|
|
| |
This fixes a missing decrement of the number of waiting threads during a
barrier wait timeout.
Close #4230.
|
|
|
|
| |
Update #4230.
|
|
|
|
| |
Update #4230.
|
|
|
|
|
|
| |
Rename _Nios2_ISR_Dispatch_with_shadow_non_preemptive() in
_Nios2_ISR_Dispatch_with_shadow_register_set(). Remove
_Nios2_ISR_Dispatch_with_shadow_preemptive().
|
|
|
|
|
| |
Use _Thread_Do_dispatch() in
_Nios2_ISR_Dispatch_with_shadow_non_preemptive().
|
| |
|
|
|
|
| |
Update #4214.
|
|
|
|
| |
This allows the BSP to override this function.
|
|
|
|
|
| |
The thread dispatch disabled level moved to _Per_CPU_Information some
time ago.
|
|
|
|
| |
This fix relates to a Coverity issue (UNUSED_VALUE).
|
|
|
|
| |
This fix relates to a Coverity issue (PW.SET_BUT_NOT_USED).
|
|
|
|
| |
This fix relates to a Coverity issue (PW.DECLARED_BUT_NOT_REFERENCED).
|
|
|
|
| |
This fix relates to a Coverity issue (NESTING_INDENT_MISMATCH).
|
|
|
|
| |
This fix relates to a Coverity issue (NESTING_INDENT_MISMATCH).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We do not need all the checks if we have a valid indentifier to a thread
class object.
Using the new _Thread_Get_objects_information() instead of the inline
function _Thread_Get_objects_information_by_id() avoids dead code since
the identifier in a thread control is always valid and the return NULL
path in _Thread_Get_objects_information_by_id() would be dead code. The
_Thread_Get_objects_information_by_id() should be an inline function
since it is used by _Thread_Get() and thus performance critical. Static
analyzers which cannot derive that the identifier in a thread control is
always valid, may find a potential NULL pointer access (or otherwise
find dead code).
The identifier in an object control is always valid, see
_Objects_Initialize_information() and _Objects_Extend_information().
Move _RTEMS_tasks_Free() to the only source file which calls this
function.
|
|
|
|
|
|
| |
Rename _Thread_Get_objects_information() in
_Thread_Get_objects_information_by_id() to emphasize that this thread
method uses an object identifier and not a thread control.
|
| |
|
|
|
|
| |
Update #4202.
|
|
|
|
| |
Update #4202.
|
|
|
|
| |
Update #4202.
|
|
|
|
|
|
|
|
| |
Somehow the table index has been missing in the latest patch version.
With that, the configuration for the first region has been applied
multiple times.
Update #4180
|
| |
|