Changeset 9b83a66 in rtems for testsuites/sptests/configure.ac

Timestamp:
10/02/12 14:13:00 (12 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, 5, master
Children:
c17d0b3
Parents:
cb7b57e1
git-author:
Sebastian Huber <sebastian.huber@…> (10/02/12 14:13:00)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/07/12 12:40:49)
Message:

score: Critical fix for thread dispatching

The changes in _Thread_Dispatch() of commits
dad36c52b8be5d7b46bc7af85655055db7208652 and
d4dc7c8196355f08044e67a3f5c1e19485f17ff1 introduced a severe bug which
destroys the real-time properties of RTEMS completely.

Consider the following scenario. We have three tasks L (lowest
priority), M (middle priority), and H (highest priority). Now let a
thread dispatch from M to L happen. An interrupt occurs in
_Thread_Dispatch() here:

void _Thread_Dispatch( void )
{

[...]

post_switch:

_ISR_Enable( level );

<-- INTERRUPT
<-- AFTER INTERRUPT

_Thread_Unnest_dispatch();

_API_extensions_Run_postswitch();

}

The interrupt event makes task H ready. The interrupt code will see
_Thread_Dispatch_disable_level > 0 and thus doesn't perform a
_Thread_Dispatch(). Now we return to position "AFTER INTERRUPT". This
means task L executes now although task H is ready! Task H will execute
once someone calls _Thread_Dispatch().

(No files)

Note: See TracChangeset for help on using the changeset viewer.