2008-01-25 Jennifer Averett <jennifer.averett@OARcorp.com>

* sapi/include/rtems/fatal.h, score/include/rtems/score/coremutex.h,
	score/include/rtems/score/interr.h,
	score/inline/rtems/score/thread.inl, score/src/coremutexseize.c:
	Modifications to aid in full path testing.
This commit is contained in:
Jennifer Averett
2008-01-25 20:14:45 +00:00
parent 41a7fef82b
commit 81f595760d
6 changed files with 48 additions and 5 deletions

View File

@@ -1,3 +1,10 @@
2008-01-25 Jennifer Averett <jennifer.averett@OARcorp.com>
* sapi/include/rtems/fatal.h, score/include/rtems/score/coremutex.h,
score/include/rtems/score/interr.h,
score/inline/rtems/score/thread.inl, score/src/coremutexseize.c:
Modifications to aid in full path testing.
2008-01-25 Joel Sherrill <joel.sherrill@oarcorp.com> 2008-01-25 Joel Sherrill <joel.sherrill@oarcorp.com>
* posix/src/mqueuesendsupp.c: Remove warning. * posix/src/mqueuesendsupp.c: Remove warning.

View File

@@ -41,7 +41,7 @@ extern "C" {
void rtems_fatal_error_occurred( void rtems_fatal_error_occurred(
uint32_t the_error uint32_t the_error
); ) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -354,7 +354,8 @@ void _CORE_mutex_Seize_interrupt_blocking(
* * If the caller is willing to wait * * If the caller is willing to wait
* then they are blocked. * then they are blocked.
*/ */
#define _CORE_mutex_Seize( \
#define _CORE_mutex_Seize_body( \
_the_mutex, _id, _wait, _timeout, _level ) \ _the_mutex, _id, _wait, _timeout, _level ) \
do { \ do { \
if ( _Thread_Dispatch_disable_level \ if ( _Thread_Dispatch_disable_level \
@@ -364,7 +365,8 @@ void _CORE_mutex_Seize_interrupt_blocking(
_Internal_error_Occurred( \ _Internal_error_Occurred( \
INTERNAL_ERROR_CORE, \ INTERNAL_ERROR_CORE, \
FALSE, \ FALSE, \
18 /* called from wrong environment */); \ INTERNAL_ERROR_MUTEX_OBTAIN_FROM_BAD_STATE \
); \
} \ } \
if ( _CORE_mutex_Seize_interrupt_trylock( _the_mutex, &_level ) ) { \ if ( _CORE_mutex_Seize_interrupt_trylock( _the_mutex, &_level ) ) { \
if ( !_wait ) { \ if ( !_wait ) { \
@@ -382,6 +384,18 @@ void _CORE_mutex_Seize_interrupt_blocking(
} \ } \
} while (0) } while (0)
#if defined(__RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE__)
void _CORE_mutex_Seize(
CORE_mutex_Control *_the_mutex,
Objects_Id _id,
boolean _wait,
Watchdog_Interval _timeout,
ISR_Level _level
);
#else
#define _CORE_mutex_Seize( _the_mutex, _id, _wait, _timeout, _level ) \
_CORE_mutex_Seize_body( _the_mutex, _id, _wait, _timeout, _level )
#endif
/** /**
* @brief Surrender the Mutex * @brief Surrender the Mutex
* *

View File

@@ -64,7 +64,8 @@ typedef enum {
INTERNAL_ERROR_BAD_STACK_HOOK, INTERNAL_ERROR_BAD_STACK_HOOK,
INTERNAL_ERROR_BAD_ATTRIBUTES, INTERNAL_ERROR_BAD_ATTRIBUTES,
INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY, INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY,
INTERNAL_ERROR_IMPLEMENTATION_BLOCKING_OPERATION_CANCEL INTERNAL_ERROR_IMPLEMENTATION_BLOCKING_OPERATION_CANCEL,
INTERNAL_ERROR_MUTEX_OBTAIN_FROM_BAD_STATE
} Internal_errors_Core_list; } Internal_errors_Core_list;
/** /**

View File

@@ -19,6 +19,8 @@
#ifndef _RTEMS_SCORE_THREAD_INL #ifndef _RTEMS_SCORE_THREAD_INL
#define _RTEMS_SCORE_THREAD_INL #define _RTEMS_SCORE_THREAD_INL
#include <rtems/score/sysstate.h>
/** /**
* @addtogroup ScoreThread * @addtogroup ScoreThread
* @{ * @{
@@ -32,7 +34,13 @@
RTEMS_INLINE_ROUTINE void _Thread_Stop_multitasking( void ) RTEMS_INLINE_ROUTINE void _Thread_Stop_multitasking( void )
{ {
_Context_Switch( &_Thread_Executing->Registers, &_Thread_BSP_context ); Context_Control context_area;
Context_Control *context_p = &context_area;
if ( _System_state_Is_up(_System_state_Get ()) )
context_p = &_Thread_Executing->Registers;
_Context_Switch( context_p, &_Thread_BSP_context );
} }
/** /**

View File

@@ -27,6 +27,19 @@
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/threadq.h>
#if defined(__RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE__)
void _CORE_mutex_Seize(
CORE_mutex_Control *_the_mutex,
Objects_Id _id,
boolean _wait,
Watchdog_Interval _timeout,
ISR_Level _level
)
{
_CORE_mutex_Seize_body( _the_mutex, _id, _wait, _timeout, _level );
}
#endif
/*PAGE /*PAGE
* *
* _CORE_mutex_Seize (interrupt blocking support) * _CORE_mutex_Seize (interrupt blocking support)