forked from Imagelibrary/rtems
smp: Protect decrement operation
This commit is contained in:
@@ -88,16 +88,16 @@ uint32_t _Thread_Dispatch_decrement_disable_level( void )
|
|||||||
|
|
||||||
_ISR_Disable_on_this_core( isr_level );
|
_ISR_Disable_on_this_core( isr_level );
|
||||||
|
|
||||||
|
disable_level = _Thread_Dispatch_disable_level;
|
||||||
|
--disable_level;
|
||||||
|
_Thread_Dispatch_disable_level = disable_level;
|
||||||
|
|
||||||
--level_lock->nest_level;
|
--level_lock->nest_level;
|
||||||
if ( level_lock->nest_level == 0 ) {
|
if ( level_lock->nest_level == 0 ) {
|
||||||
level_lock->owner_cpu = NO_OWNER_CPU;
|
level_lock->owner_cpu = NO_OWNER_CPU;
|
||||||
_SMP_lock_Release( &level_lock->lock );
|
_SMP_lock_Release( &level_lock->lock );
|
||||||
}
|
}
|
||||||
|
|
||||||
disable_level = _Thread_Dispatch_disable_level;
|
|
||||||
--disable_level;
|
|
||||||
_Thread_Dispatch_disable_level = disable_level;
|
|
||||||
|
|
||||||
_ISR_Enable_on_this_core( isr_level );
|
_ISR_Enable_on_this_core( isr_level );
|
||||||
|
|
||||||
return disable_level;
|
return disable_level;
|
||||||
|
|||||||
Reference in New Issue
Block a user