Compare commits
12 Commits
master
...
OpenHarmon
Author | SHA1 | Date |
---|---|---|
|
8faf909bf7 | |
|
7ab0e7d690 | |
|
bc6eee70d8 | |
|
088b02056a | |
|
47935660fd | |
|
962353c192 | |
|
9e0a2f9ca7 | |
|
051d985af0 | |
|
e6794a4026 | |
|
4496e71356 | |
|
e278c9a7ae | |
|
83a3c291f2 |
|
@ -470,6 +470,15 @@ STATIC INLINE BOOL OsTaskIsPending(const LosTaskCB *taskCB)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STATIC INLINE BOOL OsTaskIsKilled(const LosTaskCB *taskCB)
|
||||||
|
{
|
||||||
|
if (taskCB->taskStatus & OS_TASK_FLAG_EXIT_KILL) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
#define OS_TID_CHECK_INVALID(taskID) ((UINT32)(taskID) >= g_taskMaxNum)
|
#define OS_TID_CHECK_INVALID(taskID) ((UINT32)(taskID) >= g_taskMaxNum)
|
||||||
|
|
||||||
/* get task info */
|
/* get task info */
|
||||||
|
|
|
@ -199,6 +199,9 @@ STATIC INLINE VOID OsFutexReplaceQueueListHeadNode(FutexNode *oldHeadNode, Futex
|
||||||
LOS_DL_LIST *futexList = oldHeadNode->futexList.pstPrev;
|
LOS_DL_LIST *futexList = oldHeadNode->futexList.pstPrev;
|
||||||
LOS_ListDelete(&oldHeadNode->futexList);
|
LOS_ListDelete(&oldHeadNode->futexList);
|
||||||
LOS_ListHeadInsert(futexList, &newHeadNode->futexList);
|
LOS_ListHeadInsert(futexList, &newHeadNode->futexList);
|
||||||
|
if ((newHeadNode->queueList.pstNext == NULL) || (newHeadNode->queueList.pstPrev == NULL)) {
|
||||||
|
LOS_ListInit(&newHeadNode->queueList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC INLINE VOID OsFutexDeleteKeyFromFutexList(FutexNode *node)
|
STATIC INLINE VOID OsFutexDeleteKeyFromFutexList(FutexNode *node)
|
||||||
|
@ -319,11 +322,10 @@ STATIC VOID OsFutexInsertNewFutexKeyToHash(FutexNode *node)
|
||||||
futexList != &(hashNode->lockList);
|
futexList != &(hashNode->lockList);
|
||||||
futexList = futexList->pstNext) {
|
futexList = futexList->pstNext) {
|
||||||
headNode = OS_FUTEX_FROM_FUTEXLIST(futexList);
|
headNode = OS_FUTEX_FROM_FUTEXLIST(futexList);
|
||||||
if (node->key <= headNode->key) {
|
if (node->key <= headNode->key) {
|
||||||
LOS_ListTailInsert(&(headNode->futexList), &(node->futexList));
|
LOS_ListTailInsert(&(headNode->futexList), &(node->futexList));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EXIT:
|
EXIT:
|
||||||
|
@ -797,6 +799,7 @@ EXIT_UNLOCK_ERR:
|
||||||
|
|
||||||
STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, FutexNode *oldHeadNode)
|
STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, FutexNode *oldHeadNode)
|
||||||
{
|
{
|
||||||
|
BOOL queueListIsEmpty = FALSE;
|
||||||
INT32 ret;
|
INT32 ret;
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *task = NULL;
|
LosTaskCB *task = NULL;
|
||||||
|
@ -817,25 +820,33 @@ STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, Fut
|
||||||
nextNode = OS_FUTEX_FROM_QUEUELIST(queueList);
|
nextNode = OS_FUTEX_FROM_QUEUELIST(queueList);
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (LOS_ListEmpty(&nextNode->pendList)) {
|
if (LOS_ListEmpty(&nextNode->pendList)) {
|
||||||
queueList = queueList->pstNext;
|
if (LOS_ListEmpty(queueList)) {
|
||||||
|
queueListIsEmpty = TRUE;
|
||||||
|
} else {
|
||||||
|
queueList = queueList->pstNext;
|
||||||
|
}
|
||||||
OsFutexDeinitFutexNode(nextNode);
|
OsFutexDeinitFutexNode(nextNode);
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
if (queueList->pstNext != NULL) {
|
if (queueListIsEmpty) {
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
return LOS_OK;
|
return LOS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
task = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(nextNode->pendList)));
|
task = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(nextNode->pendList)));
|
||||||
queueList = queueList->pstNext;
|
if (LOS_ListEmpty(queueList)) {
|
||||||
|
queueListIsEmpty = TRUE;
|
||||||
|
} else {
|
||||||
|
queueList = queueList->pstNext;
|
||||||
|
}
|
||||||
LOS_ListDelete(&nextNode->queueList);
|
LOS_ListDelete(&nextNode->queueList);
|
||||||
ret = OsFutexInsertTasktoPendList(&newHeadNode, nextNode, task);
|
ret = OsFutexInsertTasktoPendList(&newHeadNode, nextNode, task);
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
if (ret != LOS_OK) {
|
if (ret != LOS_OK) {
|
||||||
PRINT_ERR("Futex requeue insert new key failed!\n");
|
PRINT_ERR("Futex requeue insert new key failed!\n");
|
||||||
}
|
}
|
||||||
} while (queueList->pstNext != NULL);
|
} while (!queueListIsEmpty);
|
||||||
|
|
||||||
return LOS_OK;
|
return LOS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,6 +108,7 @@ typedef enum {
|
||||||
READ,
|
READ,
|
||||||
READ_DROP,
|
READ_DROP,
|
||||||
READ_TIMEOUT,
|
READ_TIMEOUT,
|
||||||
|
KILL,
|
||||||
OPERATION_NUM
|
OPERATION_NUM
|
||||||
} IpcOpertion;
|
} IpcOpertion;
|
||||||
|
|
||||||
|
@ -1099,6 +1100,14 @@ LITE_OS_SEC_TEXT STATIC UINT32 LiteIpcRead(IpcContent *content)
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (OsTaskIsKilled(tcb)) {
|
||||||
|
#if (LOSCFG_KERNEL_TRACE == YES)
|
||||||
|
IpcTrace(NULL, KILL, tcb->ipcStatus, syncFlag ? MT_REPLY : MT_REQUEST);
|
||||||
|
#endif
|
||||||
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
return -ERFKILL;
|
||||||
|
}
|
||||||
|
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
} else {
|
} else {
|
||||||
listNode = LOS_DL_LIST_FIRST(listHead);
|
listNode = LOS_DL_LIST_FIRST(listHead);
|
||||||
|
@ -1178,7 +1187,7 @@ BUFFER_FREE:
|
||||||
if ((content->flag & RECV) == RECV) {
|
if ((content->flag & RECV) == RECV) {
|
||||||
ret = LiteIpcRead(content);
|
ret = LiteIpcRead(content);
|
||||||
if (ret != LOS_OK) {
|
if (ret != LOS_OK) {
|
||||||
PRINT_ERR("LiteIpcRead failed\n");
|
PRINT_ERR("LiteIpcRead failed ERROR: %d\n", (INT32)ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
UINT32 offset = LOS_OFF_SET_OF(IpcContent, inMsg);
|
UINT32 offset = LOS_OFF_SET_OF(IpcContent, inMsg);
|
||||||
|
|
|
@ -1468,6 +1468,51 @@ static err_t lwip_do_ioctl_impl(struct tcpip_api_call_data *call)
|
||||||
|
|
||||||
#include "los_vm_map.h"
|
#include "los_vm_map.h"
|
||||||
#include "user_copy.h"
|
#include "user_copy.h"
|
||||||
|
static int do_ioctl_SIOCGIFCONF(int sockfd, long cmd, void *argp)
|
||||||
|
{
|
||||||
|
int nbytes;
|
||||||
|
struct ifconf ifc;
|
||||||
|
char *buf_bak = NULL;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (LOS_ArchCopyFromUser(&ifc, argp, sizeof(struct ifconf)) != 0) {
|
||||||
|
set_errno(EFAULT);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
nbytes = ifc.ifc_len;
|
||||||
|
if (nbytes < 0) {
|
||||||
|
set_errno(EINVAL);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
buf_bak = ifc.ifc_buf;
|
||||||
|
if (!LOS_IsUserAddress((VADDR_T)(uintptr_t)buf_bak)) {
|
||||||
|
set_errno(EFAULT);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ifc.ifc_buf = malloc(nbytes);
|
||||||
|
if (ifc.ifc_buf == NULL) {
|
||||||
|
set_errno(ENOMEM);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
(void)memset_s(ifc.ifc_buf, nbytes, 0, nbytes);
|
||||||
|
|
||||||
|
ret = lwip_ioctl(sockfd, cmd, &ifc);
|
||||||
|
if (ret == 0) {
|
||||||
|
if (LOS_ArchCopyToUser(buf_bak, ifc.ifc_buf, nbytes) != 0) {
|
||||||
|
set_errno(EFAULT);
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(ifc.ifc_buf);
|
||||||
|
ifc.ifc_buf = buf_bak;
|
||||||
|
if (LOS_ArchCopyToUser(argp, &ifc, sizeof(struct ifconf)) != 0) {
|
||||||
|
set_errno(EFAULT);
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int socks_ioctl(int sockfd, long cmd, void *argp)
|
int socks_ioctl(int sockfd, long cmd, void *argp)
|
||||||
{
|
{
|
||||||
void *argpbak = argp;
|
void *argpbak = argp;
|
||||||
|
@ -1483,11 +1528,12 @@ int socks_ioctl(int sockfd, long cmd, void *argp)
|
||||||
case SIOCADDRT:
|
case SIOCADDRT:
|
||||||
nbytes = sizeof(struct rtentry);
|
nbytes = sizeof(struct rtentry);
|
||||||
break;
|
break;
|
||||||
|
case SIOCGIFCONF:
|
||||||
|
return do_ioctl_SIOCGIFCONF(sockfd, cmd, argp);
|
||||||
case SIOCSIPV6DAD:
|
case SIOCSIPV6DAD:
|
||||||
case SIOCGIPV6DAD:
|
case SIOCGIPV6DAD:
|
||||||
case SIOCSIPV6DPCTD:
|
case SIOCSIPV6DPCTD:
|
||||||
case SIOCGIPV6DPCTD:
|
case SIOCGIPV6DPCTD:
|
||||||
case SIOCGIFCONF:
|
|
||||||
case SIOCGIFADDR:
|
case SIOCGIFADDR:
|
||||||
case SIOCSIFADDR:
|
case SIOCSIFADDR:
|
||||||
case SIOCDIFADDR:
|
case SIOCDIFADDR:
|
||||||
|
|
|
@ -40,6 +40,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
|
||||||
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
||||||
LOSCFG_DRIVERS_HDF_SENSOR=y
|
LOSCFG_DRIVERS_HDF_SENSOR=y
|
||||||
LOSCFG_DRIVERS_HDF_STORAGE=y
|
LOSCFG_DRIVERS_HDF_STORAGE=y
|
||||||
|
LOSCFG_DRIVERS_HDF_VIBRATOR=y
|
||||||
|
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
|
||||||
LOSCFG_DRIVERS_SD=y
|
LOSCFG_DRIVERS_SD=y
|
||||||
LOSCFG_DRIVERS_EMMC=y
|
LOSCFG_DRIVERS_EMMC=y
|
||||||
LOSCFG_DRIVERS_HIEVENT=y
|
LOSCFG_DRIVERS_HIEVENT=y
|
||||||
|
|
|
@ -40,6 +40,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
|
||||||
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
||||||
LOSCFG_DRIVERS_HDF_SENSOR=y
|
LOSCFG_DRIVERS_HDF_SENSOR=y
|
||||||
LOSCFG_DRIVERS_HDF_STORAGE=y
|
LOSCFG_DRIVERS_HDF_STORAGE=y
|
||||||
|
LOSCFG_DRIVERS_HDF_VIBRATOR=y
|
||||||
|
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
|
||||||
LOSCFG_DRIVERS_SD=y
|
LOSCFG_DRIVERS_SD=y
|
||||||
LOSCFG_DRIVERS_EMMC=y
|
LOSCFG_DRIVERS_EMMC=y
|
||||||
LOSCFG_DRIVERS_TZDRIVER=y
|
LOSCFG_DRIVERS_TZDRIVER=y
|
||||||
|
|
|
@ -37,6 +37,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
|
||||||
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
||||||
LOSCFG_DRIVERS_HDF_SENSOR=y
|
LOSCFG_DRIVERS_HDF_SENSOR=y
|
||||||
LOSCFG_DRIVERS_HDF_STORAGE=y
|
LOSCFG_DRIVERS_HDF_STORAGE=y
|
||||||
|
LOSCFG_DRIVERS_HDF_VIBRATOR=y
|
||||||
|
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
|
||||||
LOSCFG_DRIVERS_SD=y
|
LOSCFG_DRIVERS_SD=y
|
||||||
LOSCFG_DRIVERS_EMMC=y
|
LOSCFG_DRIVERS_EMMC=y
|
||||||
LOSCFG_DRIVERS_HIEVENT=y
|
LOSCFG_DRIVERS_HIEVENT=y
|
||||||
|
|
|
@ -38,6 +38,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
|
||||||
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
||||||
LOSCFG_DRIVERS_HDF_SENSOR=y
|
LOSCFG_DRIVERS_HDF_SENSOR=y
|
||||||
LOSCFG_DRIVERS_HDF_STORAGE=y
|
LOSCFG_DRIVERS_HDF_STORAGE=y
|
||||||
|
LOSCFG_DRIVERS_HDF_VIBRATOR=y
|
||||||
|
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
|
||||||
LOSCFG_DRIVERS_SD=y
|
LOSCFG_DRIVERS_SD=y
|
||||||
LOSCFG_DRIVERS_EMMC=y
|
LOSCFG_DRIVERS_EMMC=y
|
||||||
LOSCFG_DRIVERS_TZDRIVER=y
|
LOSCFG_DRIVERS_TZDRIVER=y
|
||||||
|
|
|
@ -365,13 +365,13 @@ ifeq ($(LOSCFG_NET_LWIP_SACK_2_1), y)
|
||||||
|
|
||||||
LITEOS_CMACRO += $(LWIP_MACROS)
|
LITEOS_CMACRO += $(LWIP_MACROS)
|
||||||
else ifeq ($(LOSCFG_NET_LWIP_SACK_2_0), y)
|
else ifeq ($(LOSCFG_NET_LWIP_SACK_2_0), y)
|
||||||
LWIPDIR := $(LITEOSTHIRDPARTY)/lwip_enhanced
|
LWIPDIR := $(LITEOSTHIRDPARTY)/lwip_enhanced/src
|
||||||
LITEOS_BASELIB += -llwip
|
LITEOS_BASELIB += -llwip
|
||||||
LIB_SUBDIRS += $(LWIPDIR)
|
LIB_SUBDIRS += $(LWIPDIR)
|
||||||
LITEOS_LWIP_SACK_INCLUDE += \
|
LITEOS_LWIP_SACK_INCLUDE += \
|
||||||
-I $(LWIPDIR)/include \
|
-I $(LWIPDIR)/include \
|
||||||
-I $(LITEOSTOPDIR)/net/mac
|
-I $(LITEOSTOPDIR)/net/mac
|
||||||
LWIP_MACROS += -DLWIP_CONFIG_FILE=\"lwip/lwipopts.h\"
|
LWIP_MACROS += -DLWIP_CONFIG_FILE=\"lwip/lwipopts.h\" -DLWIP_LITEOS_A_COMPAT
|
||||||
LITEOS_CMACRO += $(LWIP_MACROS)
|
LITEOS_CMACRO += $(LWIP_MACROS)
|
||||||
else
|
else
|
||||||
$(error "unknown lwip version")
|
$(error "unknown lwip version")
|
||||||
|
|
Loading…
Reference in New Issue