From 8649b14591217331b80221833527674ea984cac5 Mon Sep 17 00:00:00 2001 From: x_xiny <1301913191@qq.com> Date: Tue, 22 Jun 2021 10:55:23 +0800 Subject: [PATCH] =?UTF-8?q?=20feat:=20m=E6=A0=B8=E6=96=B0=E5=A2=9Eposix?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3sem=5Fgetvalue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【背景】 m核新增posix接口适配 【修改方案】 接口新增sem_getvalue,并在内核适配相应接口 【影响】 无 re #I3WW8S Signed-off-by: x_xiny <1301913191@qq.com> Change-Id: I65a4baa242aaedc2fec9b6ed705dbb1ddb6e70c9 Change-Id: Id4c38a5dd4ac4e90f1bd032a39dcb97ce29de5f9 --- kal/posix/src/semaphore.c | 18 ++++++++++++++++++ kernel/include/los_sem.h | 2 ++ kernel/src/los_sem.c | 12 ++++++++++++ 3 files changed, 32 insertions(+) diff --git a/kal/posix/src/semaphore.c b/kal/posix/src/semaphore.c index 349a8fe9..87686681 100644 --- a/kal/posix/src/semaphore.c +++ b/kal/posix/src/semaphore.c @@ -186,3 +186,21 @@ int sem_timedwait(sem_t *sem, const struct timespec *timeout) return 0; } + +int sem_getvalue(sem_t *sem, int *currVal) +{ + UINT32 ret; + + if ((sem == NULL) || (currVal == NULL)) { + errno = EINVAL; + return -1; + } + + ret = LOS_SemGetValue(sem->s_handle, currVal); + if (ret) { + errno = EINVAL; + return -1; + } + + return LOS_OK; +} \ No newline at end of file diff --git a/kernel/include/los_sem.h b/kernel/include/los_sem.h index 49fbb816..cd403682 100644 --- a/kernel/include/los_sem.h +++ b/kernel/include/los_sem.h @@ -285,6 +285,8 @@ extern UINT32 LOS_SemPend(UINT32 semHandle, UINT32 timeout); */ extern UINT32 LOS_SemPost(UINT32 semHandle); +extern UINT32 LOS_SemGetValue(UINT32 semHandle, INT32 *currVal); + /** * @ingroup los_sem * Semaphore control structure. diff --git a/kernel/src/los_sem.c b/kernel/src/los_sem.c index fdf8f52d..685256ce 100644 --- a/kernel/src/los_sem.c +++ b/kernel/src/los_sem.c @@ -312,4 +312,16 @@ LITE_OS_SEC_TEXT UINT32 LOS_SemPost(UINT32 semHandle) return LOS_OK; } +LITE_OS_SEC_TEXT UINT32 LOS_SemGetValue(UINT32 semHandle, INT32 *currVal) +{ + LosSemCB *sem = GET_SEM(semHandle); + + if (semHandle >= (UINT32)LOSCFG_BASE_IPC_SEM_LIMIT) { + OS_RETURN_ERROR(LOS_ERRNO_SEM_INVALID); + } + + *currVal = sem->semCount; + return 0; +} + #endif /* (LOSCFG_BASE_IPC_SEM == 1) */