Commit Graph
36095 Commits
Author SHA1 Message Date
Kinsey Moore d7aa1ab86f cpukit/jffs2: Implement JFFS2 spinlocks
This provides a non-noop implementation of spinlocks for JFFS2 in terms
of RTEMS mutexes. POSIX spinlocks are not appropriate for the types of
actions that occur during a held JFFS2 spinlock and can cause bad
dispatch level conditions.
2023-10-12 18:56:43 -05:00
Kinsey Moore c5476e2b8c bsps/xilinx-zynqmp: Unify JFFS2 OOB write locking
Ensure that a single locking session is carried over OOB writes
including the OOB read that is sometimes required. This removes the
possibility of another write occurring between the read and write that
would make the write incorrect.
2023-10-12 18:56:43 -05:00
Joel Sherrill b9f7eb2a92 fat_fat_operations.c: Fix incorrect indentation 2023-10-12 18:56:29 -05:00
Sebastian Huber 43b74b142e validation: Support powerpc in test case
Update #4955.
2023-10-12 16:33:37 +02:00
Sebastian Huber f7632d0dad testsuites/unit: Fix build error on aarch64
Update #3716.
2023-10-12 15:22:22 +02:00
Sebastian Huber 429727cdf3 testsuites/unit: Add tests for compiler builtins
Explicitly test the 64-bit integer division and modulo operations.  They
are essential for the timekeeping services.  On most 32-bit targets,
they need a software implementation.

Update #3716.
2023-10-12 14:11:03 +02:00
Sebastian Huber 2cb3d75d9e validation: Test CPU performance
Measure the runtime of 1000 no-operation instructions.  This may help to
investigate runtime measurement variations which do not result from code
generation or source code changes.

The runtime measurement of a function which does nothing and just
returns gives an estimate of the measurement overhead.

Update #3716.
2023-10-12 14:10:57 +02:00
Sebastian Huber 1781b517dd validation: Check thread dispatching detail
Update #3716.
2023-10-12 14:10:45 +02:00
Sebastian Huber 1c36971d92 sparc: Fix stack corruption
Fix a potential stack corruption in uniprocessor configurations during
start multitasking.

The system initialization uses the interrupt stack.  A first level
interrupt shall never interrupt a context which uses the interrupt
stack.  Such a use would lead to stack corruption and undefined system
behaviour.  Unfortunately, in uniprocessor configurations this was the
case.  Multiprocessing is started using _CPU_Context_restore().  The
caller of this function (_Thread_Start_multitasking()) uses the
interrupt stack.  Later we have in cpukit/score/cpu/sparc/cpu_asm.S:

        mov     %g1, %psr                     ! restore status register and
                                              ! **** ENABLE TRAPS ****

        ld      [%o1 + G5_OFFSET], %g5        ! restore the global registers
        ld      [%o1 + G7_OFFSET], %g7

        ! Load thread specific ISR dispatch prevention flag
        ld      [%o1 + ISR_DISPATCH_DISABLE_STACK_OFFSET], %o2
        ! Store it to memory later to use the cycles

        ldd     [%o1 + L0_OFFSET], %l0        ! restore the local registers
        ldd     [%o1 + L2_OFFSET], %l2
        ldd     [%o1 + L4_OFFSET], %l4
        ldd     [%o1 + L6_OFFSET], %l6

        ! Now restore thread specific ISR dispatch prevention flag
        st      %o2, [%g6 + PER_CPU_ISR_DISPATCH_DISABLE]

        ldd     [%o1 + I0_OFFSET], %i0        ! restore the input registers
        ldd     [%o1 + I2_OFFSET], %i2
        ldd     [%o1 + I4_OFFSET], %i4
        ldd     [%o1 + I6_FP_OFFSET], %i6

        ldd     [%o1 + O6_SP_OFFSET], %o6     ! restore the output registers

Between the ENABLE TRAPS and the restore of the output registers, we
still use the stack of the caller and interrupts may be enabled.  If an
interrupt happens in this code block, the interrupt stack is
concurrently used which may lead to a crash.

Fix this by adding a new function _SPARC_Start_multiprocessing() for
uniprocessor configurations.  This function first sets the stack pointer
to use the stack of the heir thread.

Close #4955.
2023-10-12 14:10:40 +02:00
Chris Johns 25a4dff56e bsp/i386/pc686: Clean up warnings 2023-10-04 13:17:13 +11:00
Sebastian Huber a1fc6555a6 libtest: Include missing header file
This fixes the build if RTEMS_PROFILING is enabled.
2023-10-02 07:31:20 +02:00
Kinsey Moore f3f8aa5b9b cpukit/aarch64: Resolve warnings with ILP32 ABI
Casts from uint64_t to void* must go through a uintptr_t cast to avoid
warnings when building with the ILP32 ABI since this is otherwise an
implicit truncation to 32bits for a pointer.
2023-09-26 09:02:48 -05:00
Kinsey Moore 99c637fbd9 cpukit/jffs2: Avoid use of off-chain semantics
This reworks the JFFS2 delayed work queue to avoid use of
on-chain/off-chain semantics since they vary in behavior under
RTEMS_DEBUG and are not guaranteed to be safe to use in SMP systems.
This adds all delayed work structs to the chain on FS init and does not
remove them until umount.

Updates #4956
2023-09-26 09:02:48 -05:00
Kinsey Moore 41d43cef6c bsps/xnandpsu: Ensure buffer cache sync
When a buffer is modified by both hardware components such as DMA and by
software components, the buffer cache state must be kept in sync so that
data is not accidentally thrown away during future invalidations.
2023-09-26 09:02:48 -05:00
Kinsey Moore 2b5526aa5e bsps/xnandpsu: Don't rely on usleep for polling
When polling hardware registers in high performance situations, don't
rely on usleep or other standard sleep functions since they will
necessarily rely on kernel ticks to be woken up. This can easily cause
an immense reduction in throughput.
2023-09-26 09:02:48 -05:00
Sebastian Huber 5a21b1d133 validation: Compatibility for other RTEMS versions
Make some performance tests compatible to other RTEMS versions which do
not allow changing the priority of a task which owns a priority
inheritance mutex.

Update #3716.
2023-09-26 09:40:20 +02:00
Sebastian Huber 3fa6e41c4c validation: Simplify partition performance test
Do not depend on <rtems/chain.h>.

Update #3716.
2023-09-26 09:40:10 +02:00
Sebastian Huber a986262380 validation: Check stack of interrupted context
Check the stack of the interrupted context during the multitasking
start.

Update #4955.
2023-09-26 08:08:06 +02:00
Sebastian Huber b3e4c41941 arm: Use a valid signed integer constant
Enumerators are restricted to signed integers in some C standards.
2023-09-26 08:04:30 +02:00
Sebastian Huber 535999041a psx13: Fix use of uninitialized variable warning 2023-09-26 08:04:30 +02:00
Sebastian Huber ee63681aeb tests: Add header for RTEMS test printer
The <rtems/test-info.h> header file is required for every RTEMS test
program.  Move the RTEMS test printer support to a dedicated header file
<rtems/test-printer.h>.  This removes an unnecessary dependency to the
RTEMS printer support in <rtems/test-info.h>.

Tests using the RTEMS Testing Framework no longer depend on the
<rtems/printer.h>.
2023-09-26 08:04:30 +02:00
Kinsey Moore 3f3c646dea bsps/xqspipsu: Add SFDP config space read ability
This adds a function to allow reading of the SFDP configuration space
that describes attributes of NOR flash chips.
2023-09-23 09:42:30 -05:00
Kinsey Moore 853429c3f8 bsps/xqspipsu: Break out RDID
Expose a function to read the NOR flash chip ID information beyond the
minimum 3 bytes for the lookup table.
2023-09-23 09:42:30 -05:00
Sebastian Huber 109479e874 build: Remove enabled-by special case
Doing the enabled-by processing just for the ldflags and just for the
link custom commands is confusing.  Use an option instead which is
intended to be used for such use cases.
2023-09-22 07:59:11 +02:00
Sebastian Huber de25f012b7 libdl: Use _CPU_Get_TLS_thread_pointer()
Update #4920.
2023-09-15 10:44:08 +02:00
Sebastian Huber 49a88a73a8 score: Add _CPU_Get_TLS_thread_pointer()
Add _CPU_Get_TLS_thread_pointer() to get the thread pointer which is
used to get the address of thread-local storage objects associated with
a thread.

Update #4920.
2023-09-15 10:44:08 +02:00
Sebastian Huber 580a457724 build: Add target to build scripts
Document that the build scripts in the testsuites produce a test program.
2023-09-15 10:44:08 +02:00
Sebastian Huber 2111497c0f rtems: rtems_configuration_get_interrupt_stack_size()
Fix rtems_configuration_get_interrupt_stack_size() for some code models.

The _ISR_Stack_size symbol has an arbitrary absolute address and may not
be representable in the code model used by the compiler.

Update #4953.
2023-09-15 10:44:08 +02:00
Sebastian Huber 206bbeb31b score: Fix TLS support for some code models
Store symbols with an arbitrary absolute address such as _TLS_Size,
_TLS_Alignment, _TLS_Data_size, and _TLS_BSS_size in an object to avoid issues
with some code models.

Update #4953.
2023-09-15 10:44:08 +02:00
Sebastian Huber 36b330910d bsp/stm32h7: Exclude some tests 2023-09-15 10:44:08 +02:00
Sebastian Huber 92fc82b54d arm/lm3s69xx: Exclude monitor test program
It is too big with GCC 13.
2023-09-15 10:44:08 +02:00
Sebastian Huber 5f8415b92e validation: Add RTEMS_DEFINE_GLOBAL_SYMBOL() test
Update #4953.
2023-09-14 14:25:49 +02:00
Sebastian Huber 1e7733aca6 sp37: Check ISR level of system init 2023-09-14 07:59:18 +02:00
Sebastian Huber 5dc43a04ef build: Merge regulator build into library item
There is no need to use a separate build object item.
2023-09-13 07:56:38 +02:00
Sebastian Huber d7a6e80398 tests: Improve RTEMS_DEFINE_GLOBAL_SYMBOL() tests
Use a symbol value relative to an existing symbol address to make the
test work on more code models.

Update #4953.
2023-09-13 07:45:35 +02:00
Sebastian Huber 0add2d2edc score: Fix RTEMS_DEFINE_GLOBAL_SYMBOL()
The availability of a proper RTEMS_DEFINE_GLOBAL_SYMBOL() implementation
depends on __asm__() and thus __GNUC__.

Clarify documentation.

Update #4953.
2023-09-13 07:45:35 +02:00
Alex White 2bb23c7e84 microblaze: Fix relocation targets
Previously the addend was only used in 64 bit relocations. This
behavior was incorrect but did not cause the RTEMS libdl tests to
fail.
2023-09-12 11:20:58 -05:00
Sebastian Huber d2d1fa18a9 build: Use build context for custom commands
Revert duplicated listing of TEST_OPTIMIZATION_FLAGS.

Close #4947.
2023-09-11 11:36:58 +02:00
Kinsey Moore e152c9e06d bsps/zynqmp: Add locking around JFFS2 NAND adapter
The internal JFFS2 locking does not guarantee that delayed writes will
not step on other reads and writes to the device. This adds locking to
prevent that in the JFFS2 NAND interworking layer.
2023-09-06 08:53:02 -05:00
Kinsey Moore 8cea348934 bsps/xnandpsu: Ensure correct cache maintenance
The changes here ensure correct cache maintenance around DMA operations.
One cache flush was missing and two cache invalidations occurred before
the corresponding read that would make them necessary.
2023-09-06 08:53:02 -05:00
Kinsey Moore fa85760c99 cpukit/jffs2: Avoid delayed work lock inversion
This moves delayed work to a temporary chain to prevent a locking
inversion between the delayed work lock and the alloc_sem lock. Delayed
work is now processed after the delayed work lock is released. Locking
order is any JFFS2 locks before the delayed work lock.
2023-09-06 08:53:02 -05:00
Alex White 51a79912e0 microblaze: Add link options to dl07, dl08, and dl09
This adds `-u__extendsfdf2` to the `ldflags` for the dl07, dl08, and
dl09 tests to force the inclusion of `__extendsfdf2` in the base image.
This function is part of the GCC software floating point library and is
used in the tests to convert floats to doubles when calling `printf`.
2023-08-30 11:05:33 -05:00
Alex White cfb8a68f51 build: Allow enabled-by in ldflags for link_cc and link_cxx
This allows for conditionally setting 'ldflags' in scripts that use
`link_cc` and `link_cxx`. The immediate use case is allowing a linker
flag to be used only for MicroBlaze builds of certain tests.
2023-08-30 11:05:33 -05:00
Alex White cd7ad64602 microblaze: Add dl05 to expected failures
Updates #4949
2023-08-30 11:05:33 -05:00
Alex White d5318d6ae3 microblaze: Add dl06 to expected failures
Updates #4948
2023-08-30 11:05:33 -05:00
Alex White a1b23d0e23 microblaze: Align exception-related sections
This fixes unaligned data access exceptions found while debugging test
dl05.
2023-08-30 11:05:33 -05:00
Alex White feee169aa7 microblaze: Add libdl support 2023-08-30 11:05:33 -05:00
Chris Johns ceb136c7b6 cpukit/libdl: Fix incorrect operator precedence access the name
Coverity Issue: CID 1442635 Out-of-bounds access
2023-08-28 13:52:46 +10:00
Chris Johns ac6de5a3e9 cpukit/libdl: Correctly account for section alignments
- Add the section alignment to the size as the allocator may not
  provide correctly aligned memory

- Only include symbols in the section when locating symbols. The
  powerpc was incorrectly adding SDATA BSS symbols to the BSS offset
  overrunning the section

Closes #4950
2023-08-28 13:21:48 +10:00
Chris Johns b9f11607b1 libdl: Realloc text memory if there are trampolines
- Add resize to the allocator interface

- Rework the trampoline variables in the obj struct
  to make better sense of what is happening

Closes #4944
2023-08-27 07:31:49 +10:00