diff options
Diffstat (limited to 'cpukit/score/include/rtems/score/mrspimpl.h')
-rw-r--r-- | cpukit/score/include/rtems/score/mrspimpl.h | 97 |
1 files changed, 49 insertions, 48 deletions
diff --git a/cpukit/score/include/rtems/score/mrspimpl.h b/cpukit/score/include/rtems/score/mrspimpl.h index d5cf55dcbf..5173343293 100644 --- a/cpukit/score/include/rtems/score/mrspimpl.h +++ b/cpukit/score/include/rtems/score/mrspimpl.h @@ -54,19 +54,19 @@ RTEMS_INLINE_ROUTINE void _MRSP_Giant_release( ISR_lock_Context *lock_context ) } RTEMS_INLINE_ROUTINE void _MRSP_Acquire_critical( - MRSP_Control *mrsp, - ISR_lock_Context *lock_context + MRSP_Control *mrsp, + Thread_queue_Context *queue_context ) { - _ISR_lock_Acquire( &mrsp->Lock, lock_context ); + _ISR_lock_Acquire( &mrsp->Lock, &queue_context->Lock_context ); } RTEMS_INLINE_ROUTINE void _MRSP_Release( - MRSP_Control *mrsp, - ISR_lock_Context *lock_context + MRSP_Control *mrsp, + Thread_queue_Context *queue_context ) { - _ISR_lock_Release_and_ISR_enable( &mrsp->Lock, lock_context ); + _ISR_lock_Release_and_ISR_enable( &mrsp->Lock, &queue_context->Lock_context ); } RTEMS_INLINE_ROUTINE bool _MRSP_Restore_priority_filter( @@ -104,11 +104,11 @@ RTEMS_INLINE_ROUTINE void _MRSP_Restore_priority( } RTEMS_INLINE_ROUTINE void _MRSP_Claim_ownership( - MRSP_Control *mrsp, - Thread_Control *new_owner, - Priority_Control initial_priority, - Priority_Control ceiling_priority, - ISR_lock_Context *lock_context + MRSP_Control *mrsp, + Thread_Control *new_owner, + Priority_Control initial_priority, + Priority_Control ceiling_priority, + Thread_queue_Context *queue_context ) { Per_CPU_Control *cpu_self; @@ -118,8 +118,8 @@ RTEMS_INLINE_ROUTINE void _MRSP_Claim_ownership( mrsp->initial_priority_of_owner = initial_priority; _Scheduler_Thread_change_help_state( new_owner, SCHEDULER_HELP_ACTIVE_OWNER ); - cpu_self = _Thread_Dispatch_disable_critical( lock_context ); - _MRSP_Release( mrsp, lock_context ); + cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context ); + _MRSP_Release( mrsp, queue_context ); _Thread_Raise_priority( new_owner, ceiling_priority ); @@ -180,10 +180,11 @@ RTEMS_INLINE_ROUTINE void _MRSP_Timeout( Watchdog_Control *watchdog ) MRSP_Rival *rival = RTEMS_CONTAINER_OF( watchdog, MRSP_Rival, Watchdog ); MRSP_Control *mrsp = rival->resource; Thread_Control *thread = rival->thread; - ISR_lock_Context lock_context; + Thread_queue_Context queue_context; - _ISR_lock_ISR_disable( &lock_context ); - _MRSP_Acquire_critical( mrsp, &lock_context ); + _Thread_queue_Context_initialize( &queue_context, NULL ); + _ISR_lock_ISR_disable( &queue_context.Lock_context ); + _MRSP_Acquire_critical( mrsp, &queue_context ); if ( rival->status == MRSP_WAIT_FOR_OWNERSHIP ) { ISR_lock_Context giant_lock_context; @@ -200,20 +201,20 @@ RTEMS_INLINE_ROUTINE void _MRSP_Timeout( Watchdog_Control *watchdog ) rival->status = MRSP_TIMEOUT; - _MRSP_Release( mrsp, &lock_context ); + _MRSP_Release( mrsp, &queue_context ); } else { - _MRSP_Release( mrsp, &lock_context ); + _MRSP_Release( mrsp, &queue_context ); } } RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Wait_for_ownership( - MRSP_Control *mrsp, - Resource_Node *owner, - Thread_Control *executing, - Priority_Control initial_priority, - Priority_Control ceiling_priority, - Watchdog_Interval timeout, - ISR_lock_Context *lock_context + MRSP_Control *mrsp, + Resource_Node *owner, + Thread_Control *executing, + Priority_Control initial_priority, + Priority_Control ceiling_priority, + Watchdog_Interval timeout, + Thread_queue_Context *queue_context ) { MRSP_Status status; @@ -243,8 +244,8 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Wait_for_ownership( _MRSP_Giant_release( &giant_lock_context ); - cpu_self = _Thread_Dispatch_disable_critical( lock_context ); - _MRSP_Release( mrsp, lock_context ); + cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context ); + _MRSP_Release( mrsp, queue_context ); _Thread_Raise_priority( executing, ceiling_priority ); @@ -286,11 +287,11 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Wait_for_ownership( } RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Seize( - MRSP_Control *mrsp, - Thread_Control *executing, - bool wait, - Watchdog_Interval timeout, - ISR_lock_Context *lock_context + MRSP_Control *mrsp, + Thread_Control *executing, + bool wait, + Watchdog_Interval timeout, + Thread_queue_Context *queue_context ) { MRSP_Status status; @@ -306,11 +307,11 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Seize( Resource_Node *owner; if ( !priority_ok) { - _ISR_lock_ISR_enable( lock_context ); + _ISR_lock_ISR_enable( &queue_context->Lock_context ); return MRSP_INVALID_PRIORITY; } - _MRSP_Acquire_critical( mrsp, lock_context ); + _MRSP_Acquire_critical( mrsp, queue_context ); owner = _Resource_Get_owner( &mrsp->Resource ); if ( owner == NULL ) { _MRSP_Claim_ownership( @@ -318,7 +319,7 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Seize( executing, initial_priority, ceiling_priority, - lock_context + queue_context ); status = MRSP_SUCCESSFUL; } else if ( @@ -332,10 +333,10 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Seize( initial_priority, ceiling_priority, timeout, - lock_context + queue_context ); } else { - _MRSP_Release( mrsp, lock_context ); + _MRSP_Release( mrsp, queue_context ); /* Not available, nested access or deadlock */ status = MRSP_UNSATISFIED; } @@ -344,9 +345,9 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Seize( } RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Surrender( - MRSP_Control *mrsp, - Thread_Control *executing, - ISR_lock_Context *lock_context + MRSP_Control *mrsp, + Thread_Control *executing, + Thread_queue_Context *queue_context ) { Priority_Control initial_priority; @@ -354,7 +355,7 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Surrender( ISR_lock_Context giant_lock_context; if ( _Resource_Get_owner( &mrsp->Resource ) != &executing->Resource_node ) { - _ISR_lock_ISR_enable( lock_context ); + _ISR_lock_ISR_enable( &queue_context->Lock_context ); return MRSP_NOT_OWNER_OF_RESOURCE; } @@ -364,13 +365,13 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Surrender( &executing->Resource_node ) ) { - _ISR_lock_ISR_enable( lock_context ); + _ISR_lock_ISR_enable( &queue_context->Lock_context ); return MRSP_INCORRECT_STATE; } initial_priority = mrsp->initial_priority_of_owner; - _MRSP_Acquire_critical( mrsp, lock_context ); + _MRSP_Acquire_critical( mrsp, queue_context ); _MRSP_Giant_acquire( &giant_lock_context ); @@ -405,8 +406,8 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Surrender( _MRSP_Giant_release( &giant_lock_context ); - cpu_self = _Thread_Dispatch_disable_critical( lock_context ); - _MRSP_Release( mrsp, lock_context ); + cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context ); + _MRSP_Release( mrsp, queue_context ); _MRSP_Restore_priority( executing, initial_priority ); @@ -425,11 +426,11 @@ RTEMS_INLINE_ROUTINE MRSP_Status _MRSP_Can_destroy( MRSP_Control *mrsp ) } RTEMS_INLINE_ROUTINE void _MRSP_Destroy( - MRSP_Control *mrsp, - ISR_lock_Context *lock_context + MRSP_Control *mrsp, + Thread_queue_Context *queue_context ) { - _MRSP_Release( mrsp, lock_context ); + _MRSP_Release( mrsp, queue_context ); _ISR_lock_Destroy( &mrsp->Lock ); _Workspace_Free( mrsp->ceiling_priorities ); } |