From 6ffd55dcd07ce17b693a97bb678668f763480e4d Mon Sep 17 00:00:00 2001 From: wangchen <253227059@qq.com> Date: Thu, 16 Sep 2021 15:52:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20shell=E6=A8=A1=E5=9D=97task=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E8=B8=A9=E5=86=85=E5=AD=98=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【背景】task命令获取内存时传入的参数过大,可能引起踩内存问题。 【修改方案】 1,对task命令中获取内存信息时的入参进行调整,避免引起内存问题 【影响】 对现有的产品编译不会有影响。 re #I4A70V Signed-off-by: wangchen <253227059@qq.com> --- components/shell/src/cmds/task_shellcmd.c | 2 +- kernel/include/los_memory.h | 2 +- kernel/src/mm/los_memory.c | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/components/shell/src/cmds/task_shellcmd.c b/components/shell/src/cmds/task_shellcmd.c index 79768eb5..eb0df1bf 100755 --- a/components/shell/src/cmds/task_shellcmd.c +++ b/components/shell/src/cmds/task_shellcmd.c @@ -105,7 +105,7 @@ LITE_OS_SEC_TEXT_MINOR STATIC VOID OsShellCmdTskInfoData(const LosTaskCB *allTas return; } (VOID)memset_s(getUsedSizeArray, arraySize, 0, arraySize); - OsTaskMemUsed(m_aucSysMem0, getUsedSizeArray, arraySize); + OsTaskMemUsed(m_aucSysMem0, getUsedSizeArray, (LOSCFG_BASE_CORE_TSK_LIMIT + 1)); #endif for (loop = 0; loop < g_taskMaxNum; ++loop) { diff --git a/kernel/include/los_memory.h b/kernel/include/los_memory.h index 7d71288d..134f6464 100644 --- a/kernel/include/los_memory.h +++ b/kernel/include/los_memory.h @@ -469,7 +469,7 @@ extern UINT32 LOS_MemIntegrityCheck(const VOID *pool); extern VOID LOS_MemUnlockEnable(VOID *pool); extern UINT32 OsMemSystemInit(VOID); -extern VOID OsTaskMemUsed(VOID *pool, UINT32 *outArray, UINT32 arraySize); +extern VOID OsTaskMemUsed(VOID *pool, UINT32 *tskMemInfoBuf, UINT32 tskMemInfoCnt); #ifdef __cplusplus #if __cplusplus diff --git a/kernel/src/mm/los_memory.c b/kernel/src/mm/los_memory.c index d7391cf0..99e15f12 100644 --- a/kernel/src/mm/los_memory.c +++ b/kernel/src/mm/los_memory.c @@ -345,23 +345,23 @@ STATIC VOID OsAllMemNodeDoHandle(VOID *pool, VOID (*handle)(struct OsMemNodeHead STATIC VOID GetTaskMemUsedHandle(struct OsMemNodeHead *curNode, VOID *arg) { UINT32 *args = (UINT32 *)arg; - UINT32 *outArray = (UINT32 *)(UINTPTR)*args; - UINT32 arraySize = *(args + 1); + UINT32 *tskMemInfoBuf = (UINT32 *)(UINTPTR)*args; + UINT32 tskMemInfoCnt = *(args + 1); #ifndef LOSCFG_MEM_MUL_REGIONS if (OS_MEM_NODE_GET_USED_FLAG(curNode->sizeAndFlag)) { #else if (OS_MEM_NODE_GET_USED_FLAG(curNode->sizeAndFlag) && !OS_MEM_IS_GAP_NODE(curNode)) { #endif - if (curNode->taskID < arraySize) { - outArray[curNode->taskID] += OS_MEM_NODE_GET_SIZE(curNode->sizeAndFlag); + if (curNode->taskID < tskMemInfoCnt) { + tskMemInfoBuf[curNode->taskID] += OS_MEM_NODE_GET_SIZE(curNode->sizeAndFlag); } } return; } -VOID OsTaskMemUsed(VOID *pool, UINT32 *outArray, UINT32 arraySize) +VOID OsTaskMemUsed(VOID *pool, UINT32 *tskMemInfoBuf, UINT32 tskMemInfoCnt) { - UINT32 args[2] = {(UINT32)(UINTPTR)outArray, arraySize}; + UINT32 args[2] = {(UINT32)(UINTPTR)tskMemInfoBuf, tskMemInfoCnt}; OsAllMemNodeDoHandle(pool, GetTaskMemUsedHandle, (VOID *)args); return; }