score: Simplify _Thread_Change_priority()

The function to change a thread priority was too complex.  Simplify it
with a new scheduler operation.  This increases the average case
performance due to the simplified logic.  The interrupt disabled
critical section is a bit prolonged since now the extract, update and
enqueue steps are executed atomically.  This should however not impact
the worst-case interrupt latency since at least for the Deterministic
Priority Scheduler this sequence can be carried out with a wee bit of
instructions and no loops.

Add _Scheduler_Change_priority() to replace the sequence of
  - _Thread_Set_transient(),
  - _Scheduler_Extract(),
  - _Scheduler_Enqueue(), and
  - _Scheduler_Enqueue_first().

Delete STATES_TRANSIENT, _States_Is_transient() and
_Thread_Set_transient() since this state is now superfluous.

With this change it is possible to get rid of the
SCHEDULER_SMP_NODE_IN_THE_AIR state.  This considerably simplifies the
implementation of the new SMP locking protocols.
This commit is contained in:
Sebastian Huber
2014-05-14 13:50:48 +02:00
parent 2369b10a71
commit f39f667a69
49 changed files with 477 additions and 1162 deletions

View File

@@ -116,7 +116,6 @@ rtems_monitor_dump_priority(rtems_task_priority priority)
static const rtems_assoc_t rtems_monitor_state_assoc[] = {
{ "DORM", STATES_DORMANT, 0 },
{ "SUSP", STATES_SUSPENDED, 0 },
{ "TRANS", STATES_TRANSIENT, 0 },
{ "DELAY", STATES_DELAYING, 0 },
{ "Wtime", STATES_WAITING_FOR_TIME, 0 },
{ "Wbuf", STATES_WAITING_FOR_BUFFER, 0 },