提交 52379242 编写于 作者: Z zhushengle

feat: liteipc 静态内存优化

Close #I4G4HP
Signed-off-by: Nzhushengle <zhushengle@huawei.com>
Change-Id: I259c792365d9747f391c5bd275e77f04b83e0792
上级 ebfac57d
...@@ -373,10 +373,7 @@ LITE_OS_SEC_TEXT VOID OsProcessResourcesToFree(LosProcessCB *processCB) ...@@ -373,10 +373,7 @@ LITE_OS_SEC_TEXT VOID OsProcessResourcesToFree(LosProcessCB *processCB)
#endif #endif
#ifdef LOSCFG_KERNEL_LITEIPC #ifdef LOSCFG_KERNEL_LITEIPC
if (OsProcessIsUserMode(processCB)) { (VOID)LiteIpcPoolDestroy(processCB->processID);
LiteIpcPoolDelete(&(processCB->ipcInfo), processCB->processID);
(VOID)memset_s(&(processCB->ipcInfo), sizeof(ProcIpcInfo), 0, sizeof(ProcIpcInfo));
}
#endif #endif
if (processCB->resourceLimit != NULL) { if (processCB->resourceLimit != NULL) {
...@@ -750,16 +747,6 @@ STATIC UINT32 OsProcessCreateInit(LosProcessCB *processCB, UINT32 flags, const C ...@@ -750,16 +747,6 @@ STATIC UINT32 OsProcessCreateInit(LosProcessCB *processCB, UINT32 flags, const C
goto EXIT; goto EXIT;
} }
#ifdef LOSCFG_KERNEL_LITEIPC
if (OsProcessIsUserMode(processCB)) {
ret = LiteIpcPoolInit(&(processCB->ipcInfo));
if (ret != LOS_OK) {
ret = LOS_ENOMEM;
goto EXIT;
}
}
#endif
#ifdef LOSCFG_FS_VFS #ifdef LOSCFG_FS_VFS
processCB->files = alloc_files(); processCB->files = alloc_files();
if (processCB->files == NULL) { if (processCB->files == NULL) {
...@@ -1439,10 +1426,7 @@ LITE_OS_SEC_TEXT UINT32 OsExecRecycleAndInit(LosProcessCB *processCB, const CHAR ...@@ -1439,10 +1426,7 @@ LITE_OS_SEC_TEXT UINT32 OsExecRecycleAndInit(LosProcessCB *processCB, const CHAR
} }
#ifdef LOSCFG_KERNEL_LITEIPC #ifdef LOSCFG_KERNEL_LITEIPC
ret = LiteIpcPoolInit(&(processCB->ipcInfo)); (VOID)LiteIpcPoolDestroy(processCB->processID);
if (ret != LOS_OK) {
return LOS_NOK;
}
#endif #endif
processCB->sigHandler = 0; processCB->sigHandler = 0;
...@@ -1833,9 +1817,9 @@ STATIC UINT32 OsCopyProcessResources(UINT32 flags, LosProcessCB *child, LosProce ...@@ -1833,9 +1817,9 @@ STATIC UINT32 OsCopyProcessResources(UINT32 flags, LosProcessCB *child, LosProce
} }
#ifdef LOSCFG_KERNEL_LITEIPC #ifdef LOSCFG_KERNEL_LITEIPC
if (OsProcessIsUserMode(child)) { if (run->ipcInfo != NULL) {
ret = LiteIpcPoolReInit(&child->ipcInfo, (const ProcIpcInfo *)(&run->ipcInfo)); child->ipcInfo = LiteIpcPoolReInit((const ProcIpcInfo *)(run->ipcInfo));
if (ret != LOS_OK) { if (child->ipcInfo == NULL) {
return LOS_ENOMEM; return LOS_ENOMEM;
} }
} }
......
...@@ -510,7 +510,7 @@ LITE_OS_SEC_TEXT VOID OsTaskResourcesToFree(LosTaskCB *taskCB) ...@@ -510,7 +510,7 @@ LITE_OS_SEC_TEXT VOID OsTaskResourcesToFree(LosTaskCB *taskCB)
} }
#ifdef LOSCFG_KERNEL_LITEIPC #ifdef LOSCFG_KERNEL_LITEIPC
LiteIpcRemoveServiceHandle(taskCB); LiteIpcRemoveServiceHandle(taskCB->taskID);
#endif #endif
} }
#endif #endif
...@@ -552,9 +552,6 @@ LITE_OS_SEC_TEXT_INIT STATIC VOID OsTaskCBInitBase(LosTaskCB *taskCB, ...@@ -552,9 +552,6 @@ LITE_OS_SEC_TEXT_INIT STATIC VOID OsTaskCBInitBase(LosTaskCB *taskCB,
taskCB->currCpu = OS_TASK_INVALID_CPUID; taskCB->currCpu = OS_TASK_INVALID_CPUID;
taskCB->cpuAffiMask = (initParam->usCpuAffiMask) ? taskCB->cpuAffiMask = (initParam->usCpuAffiMask) ?
initParam->usCpuAffiMask : LOSCFG_KERNEL_CPU_MASK; initParam->usCpuAffiMask : LOSCFG_KERNEL_CPU_MASK;
#endif
#ifdef LOSCFG_KERNEL_LITEIPC
LOS_ListInit(&(taskCB->msgListHead));
#endif #endif
taskCB->policy = (initParam->policy == LOS_SCHED_FIFO) ? LOS_SCHED_FIFO : LOS_SCHED_RR; taskCB->policy = (initParam->policy == LOS_SCHED_FIFO) ? LOS_SCHED_FIFO : LOS_SCHED_RR;
taskCB->taskStatus = OS_TASK_STATUS_INIT; taskCB->taskStatus = OS_TASK_STATUS_INIT;
......
...@@ -103,7 +103,7 @@ typedef struct ProcessCB { ...@@ -103,7 +103,7 @@ typedef struct ProcessCB {
UINTPTR sigHandler; /**< Signal handler */ UINTPTR sigHandler; /**< Signal handler */
sigset_t sigShare; /**< Signal share bit */ sigset_t sigShare; /**< Signal share bit */
#ifdef LOSCFG_KERNEL_LITEIPC #ifdef LOSCFG_KERNEL_LITEIPC
ProcIpcInfo ipcInfo; /**< Memory pool for lite ipc */ ProcIpcInfo *ipcInfo; /**< Memory pool for lite ipc */
#endif #endif
#ifdef LOSCFG_KERNEL_VM #ifdef LOSCFG_KERNEL_VM
LosVmSpace *vmSpace; /**< VMM space for processes */ LosVmSpace *vmSpace; /**< VMM space for processes */
......
...@@ -44,7 +44,9 @@ ...@@ -44,7 +44,9 @@
#ifdef LOSCFG_KERNEL_CPUP #ifdef LOSCFG_KERNEL_CPUP
#include "los_cpup_pri.h" #include "los_cpup_pri.h"
#endif #endif
#ifdef LOSCFG_KERNEL_LITEIPC
#include "hm_liteipc.h"
#endif
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
extern "C" { extern "C" {
...@@ -359,8 +361,7 @@ typedef struct { ...@@ -359,8 +361,7 @@ typedef struct {
UINT16 waitFlag; /**< The type of child process that is waiting, belonging to a group or parent, UINT16 waitFlag; /**< The type of child process that is waiting, belonging to a group or parent,
a specific child process, or any child process */ a specific child process, or any child process */
#ifdef LOSCFG_KERNEL_LITEIPC #ifdef LOSCFG_KERNEL_LITEIPC
LOS_DL_LIST msgListHead; IpcTaskInfo *ipcTaskInfo;
BOOL accessMap[LOSCFG_BASE_CORE_TSK_LIMIT];
#endif #endif
#ifdef LOSCFG_KERNEL_PERF #ifdef LOSCFG_KERNEL_PERF
UINTPTR pc; UINTPTR pc;
......
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
#include "sys/ioctl.h" #include "sys/ioctl.h"
#include "los_config.h" #include "los_config.h"
#include "los_task_pri.h"
#include "los_typedef.h" #include "los_typedef.h"
#include "los_vm_map.h" #include "los_vm_map.h"
...@@ -70,9 +69,15 @@ typedef struct { ...@@ -70,9 +69,15 @@ typedef struct {
typedef struct { typedef struct {
IpcPool pool; IpcPool pool;
UINT32 ipcTaskID; UINT32 ipcTaskID;
LOS_DL_LIST ipcUsedNodelist;
UINT32 access[LOSCFG_BASE_CORE_TSK_LIMIT]; UINT32 access[LOSCFG_BASE_CORE_TSK_LIMIT];
} ProcIpcInfo; } ProcIpcInfo;
typedef struct {
LOS_DL_LIST msgListHead;
BOOL accessMap[LOSCFG_BASE_CORE_TSK_LIMIT];
} IpcTaskInfo;
typedef enum { typedef enum {
OBJ_FD, OBJ_FD,
OBJ_PTR, OBJ_PTR,
...@@ -172,17 +177,13 @@ typedef struct { ...@@ -172,17 +177,13 @@ typedef struct {
/* init liteipc driver */ /* init liteipc driver */
extern UINT32 OsLiteIpcInit(VOID); extern UINT32 OsLiteIpcInit(VOID);
/* init process liteipc memory pool */
extern UINT32 LiteIpcPoolInit(ProcIpcInfo *ipcInfo);
/* reinit process liteipc memory pool, using in fork situation */ /* reinit process liteipc memory pool, using in fork situation */
extern UINT32 LiteIpcPoolReInit(ProcIpcInfo *childIpcInfo, const ProcIpcInfo *parentIpcInfo); extern ProcIpcInfo *LiteIpcPoolReInit(const ProcIpcInfo *parentIpcInfo);
/* delete process liteipc memory pool */
extern VOID LiteIpcPoolDelete(ProcIpcInfo *ipcInfo, UINT32 processID);
/* remove service handle and send death notify */ /* remove service handle and send death notify */
extern VOID LiteIpcRemoveServiceHandle(LosTaskCB *taskCB); extern VOID LiteIpcRemoveServiceHandle(UINT32 taskID);
extern UINT32 LiteIpcPoolDestroy(UINT32 processID);
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册