sched/semaphore: Optimize fast mutex acquire with CONFIG_PRIORITY_PROTECT or CONFIG_PRIORITY_INHERITANCE
When the semaphore priority flags is set to NONE, and the semaphore is a mutex, the fast locking path can be used, even when priority inheritance or priority protect are enabled globally. Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
This commit is contained in:
parent
504f838577
commit
73ee052b3f
3 changed files with 15 additions and 9 deletions
|
|
@ -259,8 +259,11 @@ int nxsem_post(FAR sem_t *sem)
|
|||
* else try to get it in slow mode.
|
||||
*/
|
||||
|
||||
#if !defined(CONFIG_PRIORITY_INHERITANCE) && !defined(CONFIG_PRIORITY_PROTECT)
|
||||
if (sem->flags & SEM_TYPE_MUTEX)
|
||||
if ((sem->flags & SEM_TYPE_MUTEX)
|
||||
#if defined(CONFIG_PRIORITY_PROTECT) || defined(CONFIG_PRIORITY_INHERITANCE)
|
||||
&& (sem->flags & SEM_PRIO_MASK) == SEM_PRIO_NONE
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int32_t old = 0;
|
||||
if (atomic_try_cmpxchg_release(NXSEM_COUNT(sem), &old, 1))
|
||||
|
|
@ -268,7 +271,6 @@ int nxsem_post(FAR sem_t *sem)
|
|||
return OK;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return nxsem_post_slow(sem);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -144,8 +144,11 @@ int nxsem_trywait(FAR sem_t *sem)
|
|||
* else try to get it in slow mode.
|
||||
*/
|
||||
|
||||
#if !defined(CONFIG_PRIORITY_INHERITANCE) && !defined(CONFIG_PRIORITY_PROTECT)
|
||||
if (sem->flags & SEM_TYPE_MUTEX)
|
||||
if ((sem->flags & SEM_TYPE_MUTEX)
|
||||
#if defined(CONFIG_PRIORITY_PROTECT) || defined(CONFIG_PRIORITY_INHERITANCE)
|
||||
&& (sem->flags & SEM_PRIO_MASK) == SEM_PRIO_NONE
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int32_t old = 1;
|
||||
if (atomic_try_cmpxchg_acquire(NXSEM_COUNT(sem), &old, 0))
|
||||
|
|
@ -155,7 +158,6 @@ int nxsem_trywait(FAR sem_t *sem)
|
|||
|
||||
return -EAGAIN;
|
||||
}
|
||||
#endif
|
||||
|
||||
return nxsem_trywait_slow(sem);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -265,8 +265,11 @@ int nxsem_wait(FAR sem_t *sem)
|
|||
* else try to get it in slow mode.
|
||||
*/
|
||||
|
||||
#if !defined(CONFIG_PRIORITY_INHERITANCE) && !defined(CONFIG_PRIORITY_PROTECT)
|
||||
if (sem->flags & SEM_TYPE_MUTEX)
|
||||
if ((sem->flags & SEM_TYPE_MUTEX)
|
||||
#if defined(CONFIG_PRIORITY_PROTECT) || defined(CONFIG_PRIORITY_INHERITANCE)
|
||||
&& (sem->flags & SEM_PRIO_MASK) == SEM_PRIO_NONE
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int32_t old = 1;
|
||||
if (atomic_try_cmpxchg_acquire(NXSEM_COUNT(sem), &old, 0))
|
||||
|
|
@ -274,7 +277,6 @@ int nxsem_wait(FAR sem_t *sem)
|
|||
return OK;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return nxsem_wait_slow(sem);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue