| Commit message (Collapse) | Author | Files | Lines |
|
Updates #3053.
|
|
This patch set replaces the CPU budget algorithm enumeration with a set of CPU
budget operations which implement a particular CPU budget algorithm. This
helps to hide the CPU budget algorithm implementation details from the general
thread handling. The CPU budget callouts are turned into CPU budget
operations. This slightly reduces the size of the thread control block.
All schedulers used the default scheduler tick implementation. The tick
scheduler operation is removed and the CPU budget operations are directly used
in _Watchdog_Tick() if the executing thread uses a CPU budget algorithm. This
is performance improvement for all threads which do not use a CPU budget
algorithm (default behaviour).
|
|
Do the ASR and preemption mode change only if requested by the mode
mask. The bug was introduced by
508f868237225a75e566d9fd304206363cfe441d.
|
|
Do the preemption and ASR processing changes in one rush and acquire the
thread state lock only once.
|
|
Update #4244.
|
|
Ensure that no invalid modes are set during ASR processing.
Update #4244.
|
|
This call just obfuscated the call to _ISR_Set_level().
Update #4244.
|
|
Remove superfluous ASR_Information::signals_posted. Move code out of
trivial inline functions.
Update #4244.
|
|
Use common phrases for the file brief descriptions.
Update #3706.
|
|
Use the following variant which was already used by most source files:
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
|
|
If the non-preempt mode for threads is supported depends on the
scheduler implementation. Add
_Scheduler_Is_non_preempt_mode_supported() to indicate this.
Update #3876.
|
|
Test for the proper system condition instead of using the
rtems_configuration_is_smp_enabled() workaround.
Update #3876.
|
|
In case the robust thread dispatch is enabled by the CPU port, then the
interrupt level must not be changed through the task mode.
Update #3000.
|
|
Update #3000.
|
|
Update #3000.
|
|
Update #3598.
|
|
Use _Thread_Dispatch_direct() for operations that block the executing
thread. This ensures that we get a fatal error
(INTERNAL_ERROR_BAD_THREAD_DISPATCH_DISABLE_LEVEL) if we try to block in
an invalid context, e.g. during system start or an interrupt handler.
|
|
A rtems_configuration_is_smp_enabled() inside a !defined( RTEMS_SMP)
block makes no sense.
Remove !defined( RTEMS_SMP ) conditions.
Test tm04 works now again.
Update #3000.
|
|
Also use single conditional expressions to simplify error checking.
Combined, this all resulted in a block of SMP enabled error checking.
Updates #3000.
|
|
In addition protect scheduler of thread by thread state lock. Enables
use of scheduler per-instance locks.
Update #2555.
|
|
|
|
Update #2556.
|
|
Update #2555.
|
|
Update #2555.
|
|
Remove the thread action handler parameter from
_Thread_Action_initialize() and instead set it later in
_Thread_Add_post_switch_action(). This avoids a dependency on the
thread action handler via the thread initialization.
|
|
This is currently a global lock for all scheduler instances. It should
get replaced with one lock per scheduler instance in the future.
Update #2273.
|
|
Previously, the _Thread_Heir was updated unconditionally in case a new
heir was determined. The _Thread_Dispatch_necessary was only updated in
case the executing thread was preemptible or an internal thread was
unblocked. Change this to update the _Thread_Heir and
_Thread_Dispatch_necessary only in case the currently selected heir
thread is preemptible or a dispatch is forced. Move the schedule
decision into the change priority operation and use the schedule
operation only in rtems_task_mode() in case preemption is enabled or an
ASR dispatch is necessary. This is a behaviour change. Previously, the
RTEMS_NO_PREEMPT also prevented signal delivery in certain cases (not
always). Now, signal delivery is no longer influenced by
RTEMS_NO_PREEMPT. Since the currently selected heir thread is used to
determine if a new heir is chosen, non-preemptible heir threads
currently not executing now prevent a new heir. This may have an
application impact, see change test tm04. Document this change in sp04.
Update #2273.
|
|
Use the Configuration instead.
|
|
|
|
|
|
|
|
Add and use _ISR_Disable_without_giant() and
_ISR_Enable_without_giant() if RTEMS_SMP is defined.
On single processor systems the ISR disable/enable was the big hammer
which ensured system-wide mutual exclusion. On SMP configurations this
no longer works since other processors do not care about disabled
interrupts on this processor and continue to execute freely.
On SMP in addition to ISR disable/enable an SMP lock must be used.
Currently we have only the Giant lock so we can check easily that ISR
disable/enable is used only in the right context.
|
|
|
|
Rename to _RTEMS_Tasks_Dispatch_if_necessary().
|
|
Move implementation specific parts of thread.h and thread.inl into new
header file threadimpl.h. The thread.h contains now only the
application visible API.
Remove superfluous header file includes from various files.
|
|
|
|
Move implementation specific parts of tasks.h and tasks.inl into new
header file tasksimpl.h. The tasks.h contains now only the application
visible API.
|
|
Move implementation specific parts of asr.h and asr.inl into new header
file asrimpl.h. The asr.h contains now only the application visible
API.
|
|
Move implementation specific parts of modes.h and modes.inl into new
header file modesimpl.h. The modes.h contains now only the application
visible API.
|
|
A common use case for disabled preemption was to ensure mutual exclusion
on single-processor configurations. On SMP this does not work.
To abandon non-preemptible tasks simplifies the scheduler.
|
|
|
|
Delete _Thread_Evaluate_is_dispatch_needed().
Use _Thread_Dispatch_is_enabled() in rtems_task_mode() instead of the
system state to determine if a thread dispatch is allowed. Signales are
now delivered in rtems_task_mode() even if preemption is disabled. This
is in line with rtems_signal_send().
|
|
|
|
http://www.google-melange.com/gci/task/view/google/gci2012/7950206
|
|
This file contains the parts of <rtems/score/userext.h> that are only
necessary for the RTEMS implementation.
|
|
Script does what is expected and tries to do it as
smartly as possible.
+ remove occurrences of two blank comment lines
next to each other after Id string line removed.
+ remove entire comment blocks which only exited to
contain CVS Ids
+ If the processing left a blank line at the top of
a file, it was removed.
|
|
* rtems/src/taskmode.c, score/inline/rtems/score/thread.inl: Rework a
bit to eliminate unreachable path for task blocked while calling
rtems_task_mode() on itself.
|
|
PR 1573/cpukit
* configure.ac, posix/src/killinfo.c,
posix/src/psignalclearprocesssignals.c,
posix/src/psignalsetprocesssignals.c,
posix/src/psignalunblockthread.c, posix/src/pthreadcreate.c,
posix/src/pthreadkill.c, posix/src/pthreadsigmask.c,
rtems/src/signalsend.c, rtems/src/taskmode.c, score/Makefile.am,
score/preinstall.am, score/include/rtems/system.h,
score/include/rtems/score/context.h, score/include/rtems/score/isr.h,
score/include/rtems/score/thread.h, score/src/isr.c,
score/src/isrthreaddispatch.c, score/src/thread.c,
score/src/threaddispatch.c, score/src/threadloadenv.c: Add a per cpu
data structure which contains the information required by RTEMS for
each CPU core. This encapsulates information such as thread
executing, heir, idle and dispatch needed.
* score/include/rtems/score/percpu.h, score/src/percpu.c: New files.
|
|
* rtems/src/taskmode.c, sapi/src/exshutdown.c,
score/include/rtems/score/sysstate.h,
score/inline/rtems/score/sysstate.inl: Added
_System_state_Is_shutdown(). Removed direct uses of
_System_state_Current. Documentation.
|
|
|