diff options
Diffstat (limited to 'cpukit/include/rtems/score/mrspimpl.h')
-rw-r--r-- | cpukit/include/rtems/score/mrspimpl.h | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/cpukit/include/rtems/score/mrspimpl.h b/cpukit/include/rtems/score/mrspimpl.h index 3e64ad94e6..daa309e7cb 100644 --- a/cpukit/include/rtems/score/mrspimpl.h +++ b/cpukit/include/rtems/score/mrspimpl.h @@ -268,7 +268,7 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Claim_ownership( _MRSP_Set_owner( mrsp, executing ); cpu_self = _Thread_queue_Dispatch_disable( queue_context ); _MRSP_Release( mrsp, queue_context ); - _Thread_Priority_and_sticky_update( executing, 1 ); + _Thread_Priority_update_and_make_sticky( executing ); _Thread_Dispatch_enable( cpu_self ); return STATUS_SUCCESSFUL; } @@ -384,13 +384,6 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Wait_for_ownership( _MRSP_Replace_priority( mrsp, executing, &ceiling_priority ); } else { Per_CPU_Control *cpu_self; - int sticky_level_change; - - if ( status != STATUS_DEADLOCK ) { - sticky_level_change = -1; - } else { - sticky_level_change = 0; - } _ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context ); _MRSP_Remove_priority( executing, &ceiling_priority, queue_context ); @@ -398,7 +391,13 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Wait_for_ownership( &queue_context->Lock_context.Lock_context ); _ISR_lock_ISR_enable( &queue_context->Lock_context.Lock_context ); - _Thread_Priority_and_sticky_update( executing, sticky_level_change ); + + if ( status != STATUS_DEADLOCK ) { + _Thread_Priority_update_and_clean_sticky( executing ); + } else { + _Thread_Priority_update_ignore_sticky( executing ); + } + _Thread_Dispatch_enable( cpu_self ); } @@ -493,7 +492,7 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Surrender( &queue_context->Lock_context.Lock_context ); _MRSP_Release( mrsp, queue_context ); - _Thread_Priority_and_sticky_update( executing, -1 ); + _Thread_Priority_update_and_clean_sticky( executing ); _Thread_Dispatch_enable( cpu_self ); return STATUS_SUCCESSFUL; } |