Commit Graph

991 Commits

Author SHA1 Message Date
Sebastian Huber
fcb11510c6 score: Fix context switch extensions (SMP)
In uniprocessor and SMP configurations, the context switch extensions
were called during _Thread_Do_dispatch():

void _Thread_Do_dispatch( Per_CPU_Control *cpu_self, ISR_Level level )
{
  Thread_Control *executing;

  executing = cpu_self->executing;

  ...
  do {
    Thread_Control *heir;

    heir = _Thread_Get_heir_and_make_it_executing( cpu_self );
    ...
    _User_extensions_Thread_switch( executing, heir );
    ...
    _Context_Switch( &executing->Registers, &heir->Registers );
    ...
  } while ( cpu_self->dispatch_necessary );
  ...
}

In uniprocessor configurations, this is fine and the context switch
extensions are called for all thread switches except the very first
thread switch to the initialization thread.  However, in SMP
configurations, the context switch may be invalidated and updated in the
low-level _Context_Switch() routine.  See:

  https://docs.rtems.org/branches/master/c-user/symmetric_multiprocessing_services.html#thread-dispatch-details

In case such an update happens, a thread will execute on the processor
which was not seen in the previous call of the context switch
extensions.  This can confuse for example event record consumers which
use events generated by a context switch extension.

Fixing this is not straight forward.  The context switch extensions call
must move after the low-level context switch.  The problem here is that
we may end up in _Thread_Handler().  Adding the context switch
extensions call to _Thread_Handler() covers now also the thread switch
to the initialization thread.  We also have to save the last executing
thread (ancestor) of the processor.  Registers or the stack cannot be
used for this purpose.  We have to add it to the per-processor
information.  Existing extensions may be affected, since now context
switch extensions use the stack of the heir thread.  The stack checker
is affected by this.

Calling the thread switch extensions in the low-level context switch is
difficult since at this point an intermediate stack is used which is
only large enough to enable servicing of interrupts.

Update #3885.
2020-02-28 07:50:19 +01:00
Sebastian Huber
ba46b9368e config: Add _SMP_Is_enabled
Move the is SMP enabled configuration constant out of the
configuration table.

Since this was the last configuration constant in
rtems_configuration_table, remove this type.

Update #3875.
2020-02-25 07:15:19 +01:00
Sebastian Huber
9520ec3a2a config: Simplify initialization task config
With the removal of the CONFIGURE_HAS_OWN_INIT_TASK_TABLE configuration
option at most one Classic API user initialization task can be
configured.

Provide an RTEMS API configuration table for backward compatibility.

Update #3873.
2020-02-25 07:15:18 +01:00
Sebastian Huber
c621c11b4f monitor: Use proper API for all config constants 2020-02-17 08:03:56 +01:00
Sebastian Huber
c184b0cf31 stackchk: Add RTEMS_SYSINIT_ISR_STACK
Use a dedicated system initialization step for the stack checker
interrupt stack support.

Update #3838.
2020-02-04 05:52:28 +01:00
Chris Johns
c737748bb1 libmisc/top: Fix the idle time and priorities on SMP
- This patch is based on the patch attached to #3552 submitted
  by jameszxj.

Closes #3552
2019-12-19 14:21:05 +01:00
Sebastian Huber
3cec2dfbc4 config: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
Rename CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS into
CONFIGURE_MAXIMUM_FILE_DESCRIPTORS.

Update #3753.
2019-12-19 08:53:03 +01:00
Sebastian Huber
24f8915a07 config: Add _MPCI_Configuration
Replace the user MPCI configuration table with a system provided
_MPCI_Configuration.

Update #3735.
2019-12-13 08:35:17 +01:00
Sebastian Huber
01f8c12ee5 rtems: Optimize semaphore control block
Move variant, discipline, and global information to flags stored in a
node pointer of active semaphores.

Update #3833.
2019-12-11 09:05:07 +01:00
Sebastian Huber
4551f5f0db untar: Properly make parent path
Close #3823.
2019-11-26 08:10:27 +01:00
Sebastian Huber
2de05dd588 untar: Make path also for symbolic links
Close #3823.
2019-11-25 11:32:19 +01:00
Sebastian Huber
b6f66d9345 untar: Unify untar support
Update #3823.
2019-11-25 11:32:19 +01:00
Sebastian Huber
38207a31e4 Move feature macro before "config.h" include
This allows to use header includes in "config.h" to reduce the build
configuration checks.

Update #3818.
2019-11-19 16:05:54 +01:00
Sebastian Huber
5ee70c5487 Add and use THREAD_DEFAULT_MAXIMUM_NAME_SIZE 2019-07-30 07:21:06 +02:00
Chris Johns
5cbee18e00 misc/rtemsdefaultconfig: Add bdbuf so libbsd can be used with configure. 2019-07-02 18:44:18 +10:00
Sebastian Huber
5803f3738f score: Add and use _Thread_Get_unmapped_priority().
Add and use _Thread_Get_unmapped_real_priority().
2019-06-28 08:30:11 +02:00
Sebastian Huber
cc060f0b35 shell: Avoid rtems_error()
Do not use the rtems_error() function since this function pulls in
exit() and abort().  The abort() function pulls in raise() which pulls
in the whole POSIX signals support.  This change saves about 16KiB of
text/rodata on ARM Thumb-2 systems.
2019-05-14 11:11:51 +02:00
Sebastian Huber
f9219db2a9 rtems: Add rtems_scheduler_get_processor_maximum()
Add rtems_scheduler_get_processor_maximum() as a replacement for
rtems_get_processor_count(). The rtems_get_processor_count() is a bit
orphaned. Adopt it by the Scheduler Manager. The count is also
misleading, since the processor set may have gaps and the actual count
of online processors may be less than the value returned by
rtems_get_processor_count().

Update #3732.
2019-04-09 08:06:46 +02:00
Sebastian Huber
03c9f24061 rtems: Add rtems_scheduler_get_processor()
Add rtems_scheduler_get_processor() as a replacement for
rtems_get_current_processor(). The rtems_get_current_processor() is a
bit orphaned. Adopt it by the Scheduler Manager. This is in line with
the glibc sched_getcpu() function.

Deprecate rtems_get_current_processor().

Update #3731.
2019-04-09 08:06:46 +02:00
Sebastian Huber
6fe01e4b3d build: Move test support to librtemstest.a
One reason to move the test support into a dedicated library are the
standard output __wrap_*() functions.  They may conflict with
application level wrappers.

Update #3199.
2019-03-26 11:29:58 +01:00
Joel Sherrill
c319945f53 main_edit.c: Use strncpy() to eliminate potential buffer overflow. 2019-03-14 08:21:44 -05:00
Sebastian Huber
3fe215502a Remove superfluous <rtems/system.h> includes 2019-03-14 13:13:27 +01:00
Jonathan Brandmeyer
2e8a66d13f shell: Correct argument order of mfill
Close #3720.
2019-03-08 07:39:42 +01:00
Sebastian Huber
feea03b625 Remove explicit file names from @file
This makes the @file documentation independent of the actual file name.

Update #3707.
2019-02-28 11:47:33 +01:00
Chris Johns
2d8a9c794c libmisc: Fix rtems_print_buffer
Closes #3684
2019-02-09 10:06:33 +11:00
Maksim E. Kozlov
afd50b3a62 libmisc: Fix swapped parameters and enable floating point usage. 2019-01-23 10:32:55 -06:00
Sebastian Huber
7bde91bd5f Fix format warnings due to ino_t changes 2019-01-10 09:06:56 +01:00
Sebastian Huber
9c12bcfdc5 Fix format warnings 2019-01-07 09:49:16 +01:00
Sebastian Huber
a7e89962df drvmgr: Improve LP64 compatibility 2018-12-27 09:00:59 +01:00
Sebastian Huber
0f5b2c0906 rtems: Use object information to get config max
Use functions instead of macros.  Add missing
rtems_configuration_get_maximum_*() functions.

Update #3621.
2018-12-14 06:57:55 +01:00
Sebastian Huber
577d9a59f0 testsupport: Include missing <rtems/bspIo.h> 2018-12-03 13:34:47 +01:00
Sebastian Huber
59e7209fb3 score: Remove support for RTEMS_USE_16_BIT_OBJECT
The RTEMS_USE_16_BIT_OBJECT define is not set by an RTEMS port.  Remove
support for 16-bit object identifiers.  If someone really wants to use
RTEMS on a 16-bit target, then it is better to use self-contained
objects instead of playing around with object identifier optimizations.

Update #3603.
2018-11-21 08:06:27 +01:00
Sebastian Huber
5fc855d960 rtems: Move internal structures to extensiondata.h
Update #3598.
2018-11-12 13:25:40 +01:00
Sebastian Huber
b7af3e449a rtems: Move internal structures to tasksdata.h
Update #3598.
2018-11-12 13:25:40 +01:00
Sebastian Huber
e8e914b3b1 rtems: Move internal structures to regiondata.h
Update #3598.
2018-11-12 13:25:40 +01:00
Sebastian Huber
f00c5c6e34 rtems: Move internal structures to partdata.h
Update #3598.
2018-11-12 13:25:40 +01:00
Sebastian Huber
bfcf1473cf m32c: Remove this target
Update #3599.
2018-11-12 07:01:16 +01:00
Sebastian Huber
d53862a30b rtems: Deprecate region_information_block
The region_information_block typedef as no corresponding API.  It has no
proper namespace prefix.  A user can do nothing with it.

Close #3591.
2018-11-09 07:25:09 +01:00
Sebastian Huber
ef30eb1c4d monitor: Remove dead code
Update #3587.
Update #3589.
2018-11-08 08:09:25 +01:00
Sebastian Huber
ff081aee72 score: Rename interrupt stack symbols
Rename

  * _Configuration_Interrupt_stack_area_begin in _ISR_Stack_area_begin,
  * _Configuration_Interrupt_stack_area_end in _ISR_Stack_area_end, and
  * _Configuration_Interrupt_stack_size in _ISR_Stack_size.

Move definitions to <rtems/score/isr.h>.  The new names are considerable
shorter and in the right namespace.

Update #3459.
2018-11-08 08:09:20 +01:00
Sebastian Huber
54f3588831 posix: Provide threads by default
Update #2514.
2018-10-29 10:52:45 +01:00
Sebastian Huber
96ad2b284a build: Merge libmisc/Makefile.am 2018-10-10 07:55:33 +02:00
Sebastian Huber
68e1ccc46d build: Remove specialized CPPFLAGS 2018-10-09 13:26:47 +02:00
Sebastian Huber
6cdaa850c8 shell: Use #include "..." for local header files
Update #3375.
2018-10-09 13:26:47 +02:00
Sebastian Huber
f004b2b8dc Use rtems_task_exit()
Update #3530.
Update #3533.
2018-10-02 10:22:15 +02:00
Sebastian Huber
7d1acc03f1 stackchk: Fix interrupt stack preparation
We have to prepare the interrupt stack of each processor.

Update #3459.
2018-09-24 09:16:31 +02:00
Sebastian Huber
4221d932b4 stackchk: Improve support for interrupt stacks
Prepare the interrupt stack which may be used by the boot processor as
initialization stack with the stack sanity pattern.  Check the interrupt
stack of the current processor in the thread begin and switch extension.

Update #3459.
2018-09-21 07:59:03 +02:00
Sebastian Huber
a75a7d3c57 stackchk: Remove heap hack
It is now guranteed that threads do not use a freed stack during
termination.
2018-09-21 07:49:42 +02:00
Daniel Hellstrom
0d51b6d87e capture: prevent unaligned access when reading time
LLVM warns about this:
 cpukit/libmisc/capture/capture.c:405:30: warning:
      taking address of packed member 'time' of class or structure
      'rtems_capture_record' may result in an unaligned pointer value
      [-Waddress-of-packed-member]
    rtems_capture_get_time (&in.time);

And on sparc it generates an unaligned trap which makes smpcapture01
and smpcapture02 test to fail on sparc.
2018-08-24 15:51:39 +02:00
Sebastian Huber
334e1d22f5 confdefs: Fix uniprocessor configuration
Introduce a new internal define _CONFIGURE_MAXIMUM_PROCESSORS and ensure
that it is _CONFIGURE_MAXIMUM_PROCESSORS > 1 only in SMP configurations.

This avoids to allocate data structures for non-existing additional
processors in uniprocessor configuration.

Update #3459.
2018-07-30 08:06:18 +02:00