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;
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
/* get task info */
|
||||
|
|
|
@ -199,6 +199,9 @@ STATIC INLINE VOID OsFutexReplaceQueueListHeadNode(FutexNode *oldHeadNode, Futex
|
|||
LOS_DL_LIST *futexList = oldHeadNode->futexList.pstPrev;
|
||||
LOS_ListDelete(&oldHeadNode->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)
|
||||
|
@ -319,11 +322,10 @@ STATIC VOID OsFutexInsertNewFutexKeyToHash(FutexNode *node)
|
|||
futexList != &(hashNode->lockList);
|
||||
futexList = futexList->pstNext) {
|
||||
headNode = OS_FUTEX_FROM_FUTEXLIST(futexList);
|
||||
if (node->key <= headNode->key) {
|
||||
if (node->key <= headNode->key) {
|
||||
LOS_ListTailInsert(&(headNode->futexList), &(node->futexList));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
EXIT:
|
||||
|
@ -797,6 +799,7 @@ EXIT_UNLOCK_ERR:
|
|||
|
||||
STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, FutexNode *oldHeadNode)
|
||||
{
|
||||
BOOL queueListIsEmpty = FALSE;
|
||||
INT32 ret;
|
||||
UINT32 intSave;
|
||||
LosTaskCB *task = NULL;
|
||||
|
@ -817,25 +820,33 @@ STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, Fut
|
|||
nextNode = OS_FUTEX_FROM_QUEUELIST(queueList);
|
||||
SCHEDULER_LOCK(intSave);
|
||||
if (LOS_ListEmpty(&nextNode->pendList)) {
|
||||
queueList = queueList->pstNext;
|
||||
if (LOS_ListEmpty(queueList)) {
|
||||
queueListIsEmpty = TRUE;
|
||||
} else {
|
||||
queueList = queueList->pstNext;
|
||||
}
|
||||
OsFutexDeinitFutexNode(nextNode);
|
||||
SCHEDULER_UNLOCK(intSave);
|
||||
if (queueList->pstNext != NULL) {
|
||||
continue;
|
||||
} else {
|
||||
if (queueListIsEmpty) {
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
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);
|
||||
ret = OsFutexInsertTasktoPendList(&newHeadNode, nextNode, task);
|
||||
SCHEDULER_UNLOCK(intSave);
|
||||
if (ret != LOS_OK) {
|
||||
PRINT_ERR("Futex requeue insert new key failed!\n");
|
||||
}
|
||||
} while (queueList->pstNext != NULL);
|
||||
} while (!queueListIsEmpty);
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
|
|
@ -108,6 +108,7 @@ typedef enum {
|
|||
READ,
|
||||
READ_DROP,
|
||||
READ_TIMEOUT,
|
||||
KILL,
|
||||
OPERATION_NUM
|
||||
} IpcOpertion;
|
||||
|
||||
|
@ -1099,6 +1100,14 @@ LITE_OS_SEC_TEXT STATIC UINT32 LiteIpcRead(IpcContent *content)
|
|||
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);
|
||||
} else {
|
||||
listNode = LOS_DL_LIST_FIRST(listHead);
|
||||
|
@ -1178,7 +1187,7 @@ BUFFER_FREE:
|
|||
if ((content->flag & RECV) == RECV) {
|
||||
ret = LiteIpcRead(content);
|
||||
if (ret != LOS_OK) {
|
||||
PRINT_ERR("LiteIpcRead failed\n");
|
||||
PRINT_ERR("LiteIpcRead failed ERROR: %d\n", (INT32)ret);
|
||||
return ret;
|
||||
}
|
||||
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 "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)
|
||||
{
|
||||
void *argpbak = argp;
|
||||
|
@ -1483,11 +1528,12 @@ int socks_ioctl(int sockfd, long cmd, void *argp)
|
|||
case SIOCADDRT:
|
||||
nbytes = sizeof(struct rtentry);
|
||||
break;
|
||||
case SIOCGIFCONF:
|
||||
return do_ioctl_SIOCGIFCONF(sockfd, cmd, argp);
|
||||
case SIOCSIPV6DAD:
|
||||
case SIOCGIPV6DAD:
|
||||
case SIOCSIPV6DPCTD:
|
||||
case SIOCGIPV6DPCTD:
|
||||
case SIOCGIFCONF:
|
||||
case SIOCGIFADDR:
|
||||
case SIOCSIFADDR:
|
||||
case SIOCDIFADDR:
|
||||
|
|
|
@ -40,6 +40,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
|
|||
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
||||
LOSCFG_DRIVERS_HDF_SENSOR=y
|
||||
LOSCFG_DRIVERS_HDF_STORAGE=y
|
||||
LOSCFG_DRIVERS_HDF_VIBRATOR=y
|
||||
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
|
||||
LOSCFG_DRIVERS_SD=y
|
||||
LOSCFG_DRIVERS_EMMC=y
|
||||
LOSCFG_DRIVERS_HIEVENT=y
|
||||
|
|
|
@ -40,6 +40,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
|
|||
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
||||
LOSCFG_DRIVERS_HDF_SENSOR=y
|
||||
LOSCFG_DRIVERS_HDF_STORAGE=y
|
||||
LOSCFG_DRIVERS_HDF_VIBRATOR=y
|
||||
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
|
||||
LOSCFG_DRIVERS_SD=y
|
||||
LOSCFG_DRIVERS_EMMC=y
|
||||
LOSCFG_DRIVERS_TZDRIVER=y
|
||||
|
|
|
@ -37,6 +37,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
|
|||
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
||||
LOSCFG_DRIVERS_HDF_SENSOR=y
|
||||
LOSCFG_DRIVERS_HDF_STORAGE=y
|
||||
LOSCFG_DRIVERS_HDF_VIBRATOR=y
|
||||
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
|
||||
LOSCFG_DRIVERS_SD=y
|
||||
LOSCFG_DRIVERS_EMMC=y
|
||||
LOSCFG_DRIVERS_HIEVENT=y
|
||||
|
|
|
@ -38,6 +38,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
|
|||
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
|
||||
LOSCFG_DRIVERS_HDF_SENSOR=y
|
||||
LOSCFG_DRIVERS_HDF_STORAGE=y
|
||||
LOSCFG_DRIVERS_HDF_VIBRATOR=y
|
||||
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
|
||||
LOSCFG_DRIVERS_SD=y
|
||||
LOSCFG_DRIVERS_EMMC=y
|
||||
LOSCFG_DRIVERS_TZDRIVER=y
|
||||
|
|
|
@ -365,13 +365,13 @@ ifeq ($(LOSCFG_NET_LWIP_SACK_2_1), y)
|
|||
|
||||
LITEOS_CMACRO += $(LWIP_MACROS)
|
||||
else ifeq ($(LOSCFG_NET_LWIP_SACK_2_0), y)
|
||||
LWIPDIR := $(LITEOSTHIRDPARTY)/lwip_enhanced
|
||||
LWIPDIR := $(LITEOSTHIRDPARTY)/lwip_enhanced/src
|
||||
LITEOS_BASELIB += -llwip
|
||||
LIB_SUBDIRS += $(LWIPDIR)
|
||||
LITEOS_LWIP_SACK_INCLUDE += \
|
||||
-I $(LWIPDIR)/include \
|
||||
-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)
|
||||
else
|
||||
$(error "unknown lwip version")
|
||||
|
|
Loading…
Reference in New Issue