score: Add and use _Thread_Dispatch_is_enabled()

Delete _Thread_Dispatch_in_critical_section() and
_Thread_Is_dispatching_enabled().
This commit is contained in:
Sebastian Huber
2013-06-12 09:25:39 +02:00
parent ec978d97e0
commit 49cdf40afa
17 changed files with 32 additions and 59 deletions

View File

@@ -56,12 +56,12 @@ void _BSP_Fatal_error(unsigned int v)
printk(" UNKNOWN (0x%x)\n",THESRC);
break;
}
if ( _Thread_Dispatch_in_critical_section() )
if ( _Thread_Dispatch_is_enabled() )
printk("enabled\n");
else
printk(
" Error occurred in a Thread Dispatching DISABLED context (level %i)\n",
_Thread_Dispatch_get_disable_level());
else
printk("enabled\n");
if ( _ISR_Nest_level ) {
printk(

View File

@@ -170,7 +170,7 @@ void __ISR_Handler( uint32_t vector)
if ( _ISR_Nest_level )
return;
if ( _Thread_Dispatch_in_critical_section() ) {
if ( !_Thread_Dispatch_is_enabled() ) {
return;
}

View File

@@ -172,7 +172,7 @@ void __ISR_Handler( uint32_t vector)
if ( _ISR_Nest_level )
return;
if ( _Thread_Dispatch_in_critical_section() ) {
if ( !_Thread_Dispatch_is_enabled() ) {
return;
}

View File

@@ -95,7 +95,7 @@ void __ISR_Handler( uint32_t vector)
if ( _ISR_Nest_level )
return;
if ( _Thread_Dispatch_in_critical_section() ) {
if ( !_Thread_Dispatch_is_enabled() ) {
return;
}

View File

@@ -69,7 +69,7 @@ void __ISR_Handler( uint32_t vector)
if ( _ISR_Nest_level )
return;
if ( _Thread_Dispatch_in_critical_section() ) {
if ( !_Thread_Dispatch_is_enabled() ) {
return;
}

View File

@@ -31,7 +31,7 @@ RTEMS_CHAIN_DEFINE_EMPTY(RTEMS_Malloc_GC_list);
bool malloc_is_system_state_OK(void)
{
if ( _Thread_Dispatch_in_critical_section() )
if ( !_Thread_Dispatch_is_enabled() )
return false;
if ( _ISR_Nest_level > 0 )

View File

@@ -38,7 +38,7 @@ void *realloc(
*/
if (_System_state_Is_up(_System_state_Get())) {
if (_Thread_Dispatch_in_critical_section())
if (!_Thread_Dispatch_is_enabled())
return (void *) 0;
if (_ISR_Nest_level > 0)

View File

@@ -178,7 +178,7 @@ void rtems_filesystem_global_location_release(
rtems_filesystem_global_location_t *global_loc
)
{
if (!_Thread_Dispatch_in_critical_section()) {
if (_Thread_Dispatch_is_enabled()) {
release_with_count(global_loc, 1);
} else {
if (global_loc->deferred_released_count == 0) {

View File

@@ -35,7 +35,7 @@ rtems_status_code rtems_clock_tick( void )
_Scheduler_Tick();
if ( _Thread_Is_context_switch_necessary() &&
_Thread_Is_dispatching_enabled() )
_Thread_Dispatch_is_enabled() )
_Thread_Dispatch();
return RTEMS_SUCCESSFUL;

View File

@@ -72,7 +72,7 @@ void __ISR_Handler(uint32_t vector, CPU_Interrupt_frame *ifr)
if ( _ISR_Nest_level )
return;
if ( _Thread_Dispatch_necessary && !_Thread_Dispatch_in_critical_section() ) {
if ( _Thread_Dispatch_necessary && _Thread_Dispatch_is_enabled() ) {
/* save off our stack frame so the context switcher can get to it */
_exception_stack_frame = ifr;

View File

@@ -117,7 +117,7 @@ void __ISR_Handler(void)
stack_ptr = _old_stack_ptr;
#endif
if( !_Thread_Dispatch_in_critical_section() )
if( _Thread_Dispatch_is_enabled() )
{
if ( _Thread_Dispatch_necessary ) {
_CPU_ISR_Enable( level );

View File

@@ -352,7 +352,7 @@ void _CORE_mutex_Seize_interrupt_blocking(
#define _CORE_mutex_Check_dispatch_for_seize(_wait) 0
#else
#define _CORE_mutex_Check_dispatch_for_seize(_wait) \
(_Thread_Dispatch_in_critical_section() \
(!_Thread_Dispatch_is_enabled() \
&& (_wait) \
&& (_System_state_Get() >= SYSTEM_STATE_BEGIN_MULTITASKING))
#endif

View File

@@ -46,6 +46,19 @@ extern "C" {
*/
SCORE_EXTERN volatile uint32_t _Thread_Dispatch_disable_level;
/**
* @brief Indicates if the executing thread is inside a thread dispatch
* critical section.
*
* @retval true Thread dispatching is enabled.
* @retval false The executing thread is inside a thread dispatch critical
* section and dispatching is not allowed.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Dispatch_is_enabled(void)
{
return _Thread_Dispatch_disable_level == 0;
}
#if defined(RTEMS_SMP)
typedef struct {
SMP_lock_Control lock;
@@ -67,14 +80,6 @@ SCORE_EXTERN volatile uint32_t _Thread_Dispatch_disable_level;
*/
void _Thread_Dispatch_initialization(void);
/**
* @brief Checks if thread dispatch says that we are in a critical section.
*
* This routine returns true if thread dispatch indicates
* that we are in a critical section.
*/
bool _Thread_Dispatch_in_critical_section(void);
/**
* @brief Returns value of the the thread dispatch level.
*
@@ -104,20 +109,6 @@ SCORE_EXTERN volatile uint32_t _Thread_Dispatch_disable_level;
*/
uint32_t _Thread_Dispatch_decrement_disable_level(void);
#else /* RTEMS_SMP */
/**
* @brief _Thread_Dispatch_in_critical_section
*
* This routine returns true if thread dispatch indicates
* that we are in a critical section.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Dispatch_in_critical_section(void)
{
if ( _Thread_Dispatch_disable_level == 0 )
return false;
return true;
}
/**
* @brief Get thread dispatch disable level.
*
@@ -246,16 +237,6 @@ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
_Thread_Dispatch_decrement_disable_level();
}
/**
* This function returns true if dispatching is disabled, and false
* otherwise.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Is_dispatching_enabled( void )
{
return ( _Thread_Dispatch_in_critical_section() == false );
}
/** @} */
#ifdef __cplusplus

View File

@@ -87,7 +87,7 @@
* is the task stack of a thread that deletes itself. The thread dispatch
* disable level is a way to detect this use case.
*/
if ( !_Thread_Dispatch_in_critical_section() ) {
if ( _Thread_Dispatch_is_enabled() ) {
Heap_Block *const next = block->Protection_begin.next_delayed_free_block;
if ( next == NULL ) {
_Heap_Protection_delay_block_free( heap, block );

View File

@@ -37,7 +37,7 @@ bool _Protected_heap_Walk(
*
* NOTE: Dispatching is also disabled during initialization.
*/
if ( _Thread_Dispatch_in_critical_section() == false ) {
if ( _Thread_Dispatch_is_enabled() ) {
_RTEMS_Lock_allocator();
status = _Heap_Walk( the_heap, source, do_dump );
_RTEMS_Unlock_allocator();

View File

@@ -39,14 +39,6 @@ void _Thread_Dispatch_initialization( void )
_Thread_Dispatch_set_disable_level( 1 );
}
bool _Thread_Dispatch_in_critical_section(void)
{
if ( _Thread_Dispatch_disable_level == 0 )
return false;
return true;
}
uint32_t _Thread_Dispatch_get_disable_level(void)
{
return _Thread_Dispatch_disable_level;

View File

@@ -54,13 +54,13 @@ extern "C" {
#define check_dispatch_disable_level( _expect ) \
do { \
if ( (_expect) != -1 \
&& ((_Thread_Dispatch_in_critical_section() == false && (_expect) != 0) \
|| (_Thread_Dispatch_in_critical_section() && (_expect) == 0)) \
&& ((!_Thread_Dispatch_is_enabled() == false && (_expect) != 0) \
|| (!_Thread_Dispatch_is_enabled() && (_expect) == 0)) \
) { \
printk( \
"\n_Thread_Dispatch_disable_level is (%" PRId32 \
") not %d detected at %s:%d\n", \
_Thread_Dispatch_in_critical_section(), (_expect), __FILE__, __LINE__ ); \
!_Thread_Dispatch_is_enabled(), (_expect), __FILE__, __LINE__ ); \
FLUSH_OUTPUT(); \
rtems_test_exit( 1 ); \
} \