diff options
author | nanger <zhenyinan@huawei.com> | 2018-09-29 16:41:15 +0800 |
---|---|---|
committer | nanger <zhenyinan@huawei.com> | 2018-09-29 16:45:14 +0800 |
commit | 74c9aed15303d388d7d0429128bc3af96f7eb45c (patch) | |
tree | b4659364e410ef5b0f36b61bbf98c48e5763d8e5 /src/framework/ipc | |
parent | 31ea86798426cf236d70c9de1944c723a6cb1d95 (diff) |
Refactor: change to dmm share memory
Change-Id: Iff87eb5c6610c1db9247a898dd4c8ffbe6eeabdf
Signed-off-by: nanger <zhenyinan@huawei.com>
Diffstat (limited to 'src/framework/ipc')
-rw-r--r-- | src/framework/ipc/mgr_com/mgr_com.c | 65 | ||||
-rw-r--r-- | src/framework/ipc/mgr_com/mgr_com.h | 24 | ||||
-rw-r--r-- | src/framework/ipc/ps/nsfw_fd_timer.c | 38 | ||||
-rw-r--r-- | src/framework/ipc/ps/nsfw_ps_mem_module.c | 924 | ||||
-rw-r--r-- | src/framework/ipc/ps/nsfw_ps_mem_module.h | 87 | ||||
-rw-r--r-- | src/framework/ipc/ps/nsfw_ps_module.c | 50 | ||||
-rw-r--r-- | src/framework/ipc/ps/nsfw_ps_module.h | 6 | ||||
-rw-r--r-- | src/framework/ipc/ps/nsfw_recycle_module.c | 93 | ||||
-rw-r--r-- | src/framework/ipc/ps/nsfw_recycle_module.h | 6 | ||||
-rw-r--r-- | src/framework/ipc/ps/nsfw_soft_param.c | 4 |
10 files changed, 93 insertions, 1204 deletions
diff --git a/src/framework/ipc/mgr_com/mgr_com.c b/src/framework/ipc/mgr_com/mgr_com.c index 2fb9789..0541ba8 100644 --- a/src/framework/ipc/mgr_com/mgr_com.c +++ b/src/framework/ipc/mgr_com/mgr_com.c @@ -17,28 +17,27 @@ /*==============================================* * include header files * *----------------------------------------------*/ +#include <errno.h> +#include <sys/un.h> +#include <stddef.h> +#include <sys/epoll.h> +#include <fcntl.h> +#include <sys/stat.h> #include "types.h" #include "nstack_securec.h" #include "nsfw_init.h" -#include "common_mem_api.h" - #include "nsfw_mgr_com_api.h" #include "mgr_com.h" #include "nstack_log.h" #include "nsfw_base_linux_api.h" - -#include <sys/un.h> -#include <stddef.h> -#include <sys/epoll.h> -#include <fcntl.h> -#include <sys/stat.h> - #include "nsfw_maintain_api.h" #include "nsfw_ps_api.h" #include "nsfw_fd_timer_api.h" -#include "common_func.h" +#include "dmm_atomic.h" +#include "dmm_sys.h" +#include "dmm_memory.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -168,8 +167,7 @@ nsfw_mgr_msg_alloc (u16 msg_type, u8 dst_proc_type) if (FALSE == from_mem_flag) { - if (0 == - nsfw_mem_ring_dequeue (g_mgr_com_cfg.msg_pool, (void *) &p_msg)) + if (1 != dmm_dequeue (g_mgr_com_cfg.msg_pool, (void **) &p_msg)) { NSFW_LOGERR ("alloc msg full]type=%u,dst=%u", msg_type, dst_proc_type); @@ -200,7 +198,8 @@ nsfw_mgr_msg_alloc (u16 msg_type, u8 dst_proc_type) if (msg_type < MGR_MSG_RSP_BASE && msg_type > 0) { - p_msg->seq = common_mem_atomic32_add_return (&g_mgr_com_cfg.cur_idx, 1); + p_msg->seq = + dmm_atomic_add_return ((dmm_atomic_t *) & g_mgr_com_cfg.cur_idx, 1); } p_msg->from_mem = from_mem_flag; @@ -298,7 +297,7 @@ nsfw_mgr_msg_free (nsfw_mgr_msg * msg) NSFW_LOGERR ("msg err free]type=%u", msg->msg_type); } - if (0 == nsfw_mem_ring_enqueue (g_mgr_com_cfg.msg_pool, msg)) + if (1 != dmm_enqueue (g_mgr_com_cfg.msg_pool, msg)) { NSFW_LOGERR ("msg free failed pool full]msg=%p, type=%u", msg, msg->msg_type); @@ -693,7 +692,7 @@ nsfw_mgr_clr_fd_lock () } for (i = 0; i < (i32) NSFW_MGR_FD_MAX; i++) { - common_mem_spinlock_init (&(g_mgr_socket_map.sock[i].opr_lock)); + dmm_spin_init (&(g_mgr_socket_map.sock[i].opr_lock)); } return TRUE; } @@ -1953,32 +1952,8 @@ nsfw_mgr_com_module_init (void *param) mgr_cfg->proc_type = proc_type; - nsfw_mem_sppool pmpinfo; - if (EOK != MEMSET_S (&pmpinfo, sizeof (pmpinfo), 0, sizeof (pmpinfo))) - { - NSFW_LOGERR ("Error to memset!!!"); - nsfw_mgr_comm_fd_destroy (); - lint_unlock_1 (); - return -1; - } - - pmpinfo.enmptype = NSFW_MRING_MPMC; - pmpinfo.usnum = mgr_cfg->msg_size; - pmpinfo.useltsize = sizeof (nsfw_mgr_msg); - pmpinfo.isocket_id = NSFW_SOCKET_ANY; - pmpinfo.stname.entype = NSFW_NSHMEM; - if (-1 == - SPRINTF_S (pmpinfo.stname.aname, sizeof (pmpinfo.stname.aname), "%s", - "MS_MGR_MSGPOOL")) - { - NSFW_LOGERR ("Error to SPRINTF_S!!!"); - nsfw_mgr_comm_fd_destroy (); - lint_unlock_1 (); - return -1; - } - - mgr_cfg->msg_pool = nsfw_mem_sp_create (&pmpinfo); - + mgr_cfg->msg_pool = dmm_malloc_pool (sizeof (nsfw_mgr_msg), + mgr_cfg->msg_size, DMM_RING_INIT_MPMC); if (!mgr_cfg->msg_pool) { NSFW_LOGERR ("module mgr init msg_pool alloc failed!"); @@ -1987,8 +1962,8 @@ nsfw_mgr_com_module_init (void *param) return -1; } - (void) MEM_STAT (NSFW_MGR_COM_MODULE, pmpinfo.stname.aname, NSFW_NSHMEM, - nsfw_mem_get_len (mgr_cfg->msg_pool, NSFW_MEM_SPOOL)); +// (void) MEM_STAT (NSFW_MGR_COM_MODULE, pmpinfo.stname.aname, NSFW_NSHMEM, +// nsfw_mem_get_len (mgr_cfg->msg_pool, NSFW_MEM_SPOOL)); if ((NSFW_PROC_TOOLS == proc_type) || (NSFW_PROC_CTRL == proc_type) || (NSFW_PROC_MAIN == proc_type)) @@ -2048,8 +2023,8 @@ nsfw_mgr_run_script (const char *cmd, char *result, int result_buf_len) /* *INDENT-OFF* */ NSFW_MODULE_NAME(NSFW_MGR_COM_MODULE) -NSFW_MODULE_PRIORITY(10) -NSFW_MODULE_DEPENDS(NSFW_MEM_MGR_MODULE) +NSFW_MODULE_PRIORITY(20) +NSFW_MODULE_DEPENDS(DMM_MEMORY_MODULE) NSFW_MODULE_INIT(nsfw_mgr_com_module_init) /* *INDENT-ON* */ diff --git a/src/framework/ipc/mgr_com/mgr_com.h b/src/framework/ipc/mgr_com/mgr_com.h index 03f58c8..dbcce63 100644 --- a/src/framework/ipc/mgr_com/mgr_com.h +++ b/src/framework/ipc/mgr_com/mgr_com.h @@ -26,11 +26,13 @@ #ifndef _NSFW_MGRCOM_MODULE_H #define _NSFW_MGRCOM_MODULE_H -#include "pthread.h" -#include "nsfw_mem_api.h" -#include "common_mem_api.h" -#include "common_mem_memzone.h" -#include "common_func.h" +#include <pthread.h> + +#include "types.h" +#include "nsfw_mgr_com_api.h" + +#include "dmm_ring.h" +#include "dmm_spinlock.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -44,7 +46,7 @@ extern "C"{ #define MAX_RECV_BUF_DEF 0x34000*2 -#define MGR_COM_MSG_COUNT_DEF 1023 /*g_mgr_com_cfg */ +#define MGR_COM_MSG_COUNT_DEF 1024 /*g_mgr_com_cfg */ #define MGR_COM_RECV_TIMEOUT_DEF 5 #define MGR_COM_MAX_DROP_MSG_DEF 1024 @@ -64,9 +66,9 @@ typedef struct _nsfw_mgr_init_cfg u8 max_recv_timeout; u16 max_recv_drop_msg; u32 msg_size; - common_mem_atomic32_t cur_idx; + int cur_idx; u64 u64reserve; - mring_handle msg_pool; + struct dmm_ring *msg_pool; char domain_path[NSFW_MGRCOM_PATH_LEN]; } nsfw_mgr_init_cfg; @@ -85,7 +87,7 @@ typedef struct _nsfw_mgr_sock_info { u8 proc_type; /*_ns_poc_type*/ u32 host_pid; - common_mem_spinlock_t opr_lock; + dmm_spinlock_t opr_lock; } nsfw_mgr_sock_info; typedef struct _nsfw_mgr_sock_map @@ -123,14 +125,14 @@ u8 nsfw_mgr_stop (); #define LOCK_MGR_FD(_fd){\ if ((i32)NSFW_MGR_FD_MAX > _fd)\ {\ - common_mem_spinlock_lock(&g_mgr_socket_map.sock[_fd].opr_lock);\ + dmm_spin_lock(&g_mgr_socket_map.sock[_fd].opr_lock);\ }\ } #define UNLOCK_MGR_FD(_fd){\ if ((i32)NSFW_MGR_FD_MAX > _fd)\ {\ - common_mem_spinlock_unlock(&g_mgr_socket_map.sock[_fd].opr_lock);\ + dmm_spin_unlock(&g_mgr_socket_map.sock[_fd].opr_lock);\ }\ } diff --git a/src/framework/ipc/ps/nsfw_fd_timer.c b/src/framework/ipc/ps/nsfw_fd_timer.c index cea2486..643348a 100644 --- a/src/framework/ipc/ps/nsfw_fd_timer.c +++ b/src/framework/ipc/ps/nsfw_fd_timer.c @@ -22,17 +22,16 @@ #include "types.h" #include "list.h" -#include "common_mem_common.h" - #include "nstack_securec.h" #include "nsfw_init.h" #include "nsfw_mgr_com_api.h" -#include "nsfw_mem_api.h" #include "nstack_log.h" #include "nsfw_base_linux_api.h" #include "nsfw_fd_timer_api.h" #include "nsfw_maintain_api.h" +#include "dmm_memory.h" + #ifdef __cplusplus /* *INDENT-OFF* */ extern "C"{ @@ -40,7 +39,7 @@ extern "C"{ #endif /* __cplusplus */ #define NSFW_TIMER_CYCLE 1 -#define NSFW_TIMER_INFO_MAX_COUNT_DEF 8191 +#define NSFW_TIMER_INFO_MAX_COUNT_DEF 8192 #define NSFW_TIMER_INFO_MAX_COUNT (g_timer_cfg.timer_info_size) /* *INDENT-OFF* */ nsfw_timer_init_cfg g_timer_cfg; @@ -66,8 +65,7 @@ nsfw_timer_reg_timer (u32 timer_type, void *data, nsfw_timer_proc_fun fun, struct timespec time_left) { nsfw_timer_info *tm_info = NULL; - if (0 == - nsfw_mem_ring_dequeue (g_timer_cfg.timer_info_pool, (void *) &tm_info)) + if (1 != dmm_dequeue (g_timer_cfg.timer_info_pool, (void **) &tm_info)) { NSFW_LOGERR ("dequeue error]data=%p,fun=%p", data, fun); return NULL; @@ -75,7 +73,7 @@ nsfw_timer_reg_timer (u32 timer_type, void *data, if (EOK != MEMSET_S (tm_info, sizeof (*tm_info), 0, sizeof (*tm_info))) { - if (0 == nsfw_mem_ring_enqueue (g_timer_cfg.timer_info_pool, tm_info)) + if (1 != dmm_enqueue (g_timer_cfg.timer_info_pool, tm_info)) { NSFW_LOGERR ("enqueue error]data=%p,fun=%p", data, fun); } @@ -121,7 +119,7 @@ nsfw_timer_rmv_timer (nsfw_timer_info * tm_info) tm_info->alloc_flag = FALSE; list_del (&tm_info->node); - if (0 == nsfw_mem_ring_enqueue (g_timer_cfg.timer_info_pool, tm_info)) + if (1 != dmm_enqueue (g_timer_cfg.timer_info_pool, tm_info)) { NSFW_LOGERR ("tm_info free failed]tm_info=%p,argv=%p,fun=%p", tm_info, tm_info->argv, tm_info->fun); @@ -334,29 +332,17 @@ nsfw_timer_module_init (void *param) timer_cfg->timer_info_size = NSFW_TIMER_INFO_MAX_COUNT_DEF; - nsfw_mem_sppool pmpinfo; - pmpinfo.enmptype = NSFW_MRING_MPMC; - pmpinfo.usnum = timer_cfg->timer_info_size; - pmpinfo.useltsize = sizeof (nsfw_timer_info); - pmpinfo.isocket_id = NSFW_SOCKET_ANY; - pmpinfo.stname.entype = NSFW_NSHMEM; - if (-1 == - SPRINTF_S (pmpinfo.stname.aname, NSFW_MEM_NAME_LENGTH, "%s", - "MS_TM_INFOPOOL")) - { - NSFW_LOGERR ("SPRINTF_S failed"); - return -1; - } - timer_cfg->timer_info_pool = nsfw_mem_sp_create (&pmpinfo); - + timer_cfg->timer_info_pool = dmm_malloc_pool (sizeof (nsfw_timer_info), + timer_cfg->timer_info_size, + DMM_RING_INIT_MPMC); if (!timer_cfg->timer_info_pool) { NSFW_LOGERR ("alloc timer info pool_err"); return -1; } - MEM_STAT (NSFW_TIMER_MODULE, pmpinfo.stname.aname, NSFW_NSHMEM, - nsfw_mem_get_len (timer_cfg->timer_info_pool, NSFW_MEM_SPOOL)); +// MEM_STAT (NSFW_TIMER_MODULE, pmpinfo.stname.aname, NSFW_NSHMEM, +// nsfw_mem_get_len (timer_cfg->timer_info_pool, NSFW_MEM_SPOOL)); INIT_LIST_HEAD (&(timer_cfg->timer_head)); INIT_LIST_HEAD (&(timer_cfg->exp_timer_head)); @@ -367,7 +353,7 @@ nsfw_timer_module_init (void *param) /* *INDENT-OFF* */ NSFW_MODULE_NAME (NSFW_TIMER_MODULE) -NSFW_MODULE_PRIORITY (10) +NSFW_MODULE_PRIORITY (30) NSFW_MODULE_DEPENDS (NSFW_MGR_COM_MODULE) NSFW_MODULE_INIT (nsfw_timer_module_init) /* *INDENT-ON* */ diff --git a/src/framework/ipc/ps/nsfw_ps_mem_module.c b/src/framework/ipc/ps/nsfw_ps_mem_module.c deleted file mode 100644 index 55af158..0000000 --- a/src/framework/ipc/ps/nsfw_ps_mem_module.c +++ /dev/null @@ -1,924 +0,0 @@ -/* -* -* Copyright (c) 2018 Huawei Technologies Co.,Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at: -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#include <stdlib.h> -#include "types.h" -#include "nstack_securec.h" -#include "nsfw_init.h" - -#include "nsfw_ps_module.h" -#include "nsfw_mgr_com_api.h" -#include "nsfw_ps_mem_api.h" -#include "nsfw_ps_mem_module.h" -#include "nsfw_ps_api.h" -#include "nsfw_maintain_api.h" -#include "nsfw_fd_timer_api.h" - -#include "nstack_log.h" - -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C"{ -/* *INDENT-ON* */ -#endif /* __cplusplus */ - -ns_mem_mng_init_cfg g_mem_cfg; - -int mem_ps_exiting (void *pps_info, void *argv); - -int -nsfw_mem_ps_exit_resend_timeout (u32 timer_type, void *data) -{ - nsfw_ps_info *ps_info = data; - if (NULL == ps_info) - { - NSFW_LOGERR ("ps_info nul!"); - return FALSE; - } - - if (NSFW_PROC_APP != ps_info->proc_type) - { - return FALSE; - } - - if (NSFW_PS_EXITING != ps_info->state) - { - return FALSE; - } - - ps_info->resend_timer_ptr = NULL; - (void) mem_ps_exiting (ps_info, NULL); - return TRUE; -} - -/***************************************************************************** -* Prototype : mem_ps_exiting -* Description : send exiting message when ps_info exiting -* Input : void *pps_info -* void* argv -* Output : None -* Return Value : int -* Calls : -* Called By : -*****************************************************************************/ -int -mem_ps_exiting (void *pps_info, void *argv) -{ - if (NULL == pps_info) - { - NSFW_LOGERR ("ps_info nul!"); - return FALSE; - } - - if (TRUE == NSFW_SRV_STATE_SUSPEND) - { - NSFW_LOGERR ("main suspend]ps_info=%d,pid=%u", pps_info, - ((nsfw_ps_info *) pps_info)->host_pid); - return FALSE; - } - - nsfw_mgr_msg *msg = - nsfw_mgr_msg_alloc (MGR_MSG_APP_EXIT_REQ, NSFW_PROC_MAIN); - if (NULL == msg) - { - NSFW_LOGERR ("ps_exit alloc msg failed]ps_info=%p,pid=%u", pps_info, - ((nsfw_ps_info *) pps_info)->host_pid); - return FALSE; - } - - nsfw_ps_info_msg *ps_msg = GET_USER_MSG (nsfw_ps_info_msg, msg); - ps_msg->host_pid = ((nsfw_ps_info *) pps_info)->host_pid; - - (void) nsfw_mgr_send_msg (msg); - NSFW_LOGINF ("ps_exiting send msg]ps_info=%p,pid=%u", pps_info, - ps_msg->host_pid); - nsfw_mgr_msg_free (msg); - return TRUE; -} - -/***************************************************************************** -* Prototype : mem_alloc_ps_info -* Description : alloc ps_info -* Input : u32 pid -* u8 proc_type -* Output : None -* Return Value : u8 -* Calls : -* Called By : -*****************************************************************************/ -u8 -mem_alloc_ps_info (u32 pid, u8 proc_type) -{ - nsfw_ps_info *pps_info = NULL; - pps_info = nsfw_ps_info_get (pid); - if (NULL != pps_info) - { - return TRUE; - } - - pps_info = nsfw_ps_info_alloc (pid, proc_type); - if (NULL == pps_info) - { - NSFW_LOGERR ("alloc ps_info failed!]pid=%u,proc_type=%u", pid, - proc_type); - return FALSE; - } - - NSFW_LOGINF ("alloc new ps_info]pps_info=%p,pid=%u", pps_info, pid); - return TRUE; -} - -/*mem alloc by msg begin*/ -void * -mem_item_zone_create (void *mem_info) -{ - return (void *) nsfw_mem_zone_create ((nsfw_mem_zone *) mem_info); -} - -void * -mem_item_mbfmp_create (void *mem_info) -{ - return (void *) nsfw_mem_mbfmp_create ((nsfw_mem_mbfpool *) mem_info); -} - -void * -mem_item_sp_create (void *mem_info) -{ - return (void *) nsfw_mem_sp_create ((nsfw_mem_sppool *) mem_info); -} - -void * -mem_item_ring_create (void *mem_info) -{ - return (void *) nsfw_mem_ring_create ((nsfw_mem_mring *) mem_info); -} - -nsfw_ps_mem_item_cfg g_ps_mem_map[] = { - { - NSFW_RESERV_REQ_MSG, - sizeof (nsfw_shmem_reserv_req), - NSFW_MEM_MZONE, - mem_item_zone_create, - mem_item_get_callargv} - , - - { - NSFW_MBUF_REQ_MSG, - sizeof (nsfw_shmem_mbuf_req), - NSFW_MEM_MBUF, - mem_item_mbfmp_create, - mem_item_get_callargv} - , - { - NSFW_SPPOOL_REQ_MSG, - sizeof (nsfw_shmem_sppool_req), - NSFW_MEM_SPOOL, - mem_item_sp_create, - mem_item_get_callargv} - , - { - NSFW_RING_REQ_MSG, - sizeof (nsfw_shmem_ring_req), - NSFW_MEM_RING, - mem_item_ring_create, - mem_item_get_callargv} - , - { - NSFW_RELEASE_REQ_MSG, - sizeof (nsfw_shmem_free_req), - 0xFFFF, - mem_item_free, - mem_item_get_callargv, - } - , - { - NSFW_MEM_LOOKUP_REQ_MSG, - sizeof (nsfw_shmem_lookup_req), - 0xFFFF, - mem_item_lookup, - mem_item_get_callargv, - } -}; - -/***************************************************************************** -* Prototype : mem_item_get_cfg_from_msg -* Description : get memory config -* Input : u16 msg_type -* Output : None -* Return Value : nsfw_ps_mem_item_cfg * -* Calls : -* Called By : -*****************************************************************************/ -nsfw_ps_mem_item_cfg * -mem_item_get_cfg_from_msg (u16 msg_type) -{ - int idx; - int map_count = sizeof (g_ps_mem_map) / sizeof (nsfw_ps_mem_item_cfg); - for (idx = 0; idx < map_count; idx++) - { - if (g_ps_mem_map[idx].usmsg_type == msg_type) - { - return &g_ps_mem_map[idx]; - } - } - - return NULL; -} - -/***************************************************************************** -* Prototype : mem_item_get_callargv -* Description : change the message value to structure value -* Input : u16 msg_type -* char* msg_body -* char *memstr_buf -* i32 buf_len -* Output : None -* Return Value : u8 -* Calls : -* Called By : -*****************************************************************************/ -u8 -mem_item_get_callargv (u16 msg_type, char *msg_body, char *memstr_buf, - i32 buf_len) -{ - switch (msg_type) - { - case NSFW_RESERV_REQ_MSG: - MEM_GET_CALLARGV (length, length, nsfw_mem_zone, nsfw_shmem_reserv_req, - memstr_buf, msg_body); - MEM_GET_CALLARGV (isocket_id, isocket_id, nsfw_mem_zone, - nsfw_shmem_reserv_req, memstr_buf, msg_body); - break; - case NSFW_MBUF_REQ_MSG: - MEM_GET_CALLARGV (usnum, usnum, nsfw_mem_mbfpool, nsfw_shmem_mbuf_req, - memstr_buf, msg_body); - MEM_GET_CALLARGV (uscash_size, uscash_size, nsfw_mem_mbfpool, - nsfw_shmem_mbuf_req, memstr_buf, msg_body); - MEM_GET_CALLARGV (uspriv_size, uspriv_size, nsfw_mem_mbfpool, - nsfw_shmem_mbuf_req, memstr_buf, msg_body); - MEM_GET_CALLARGV (usdata_room, usdata_room, nsfw_mem_mbfpool, - nsfw_shmem_mbuf_req, memstr_buf, msg_body); - MEM_GET_CALLARGV (enmptype, enmptype, nsfw_mem_mbfpool, - nsfw_shmem_mbuf_req, memstr_buf, msg_body); - MEM_GET_CALLARGV (isocket_id, isocket_id, nsfw_mem_mbfpool, - nsfw_shmem_mbuf_req, memstr_buf, msg_body); - break; - case NSFW_SPPOOL_REQ_MSG: - MEM_GET_CALLARGV (usnum, usnum, nsfw_mem_sppool, - nsfw_shmem_sppool_req, memstr_buf, msg_body); - MEM_GET_CALLARGV (useltsize, useltsize, nsfw_mem_sppool, - nsfw_shmem_sppool_req, memstr_buf, msg_body); - MEM_GET_CALLARGV (enmptype, enmptype, nsfw_mem_sppool, - nsfw_shmem_sppool_req, memstr_buf, msg_body); - MEM_GET_CALLARGV (isocket_id, isocket_id, nsfw_mem_sppool, - nsfw_shmem_sppool_req, memstr_buf, msg_body); - break; - case NSFW_RING_REQ_MSG: - MEM_GET_CALLARGV (usnum, usnum, nsfw_mem_mring, nsfw_shmem_ring_req, - memstr_buf, msg_body); - MEM_GET_CALLARGV (enmptype, enmptype, nsfw_mem_mring, - nsfw_shmem_ring_req, memstr_buf, msg_body); - MEM_GET_CALLARGV (isocket_id, isocket_id, nsfw_mem_mring, - nsfw_shmem_ring_req, memstr_buf, msg_body); - break; - case NSFW_RELEASE_REQ_MSG: - MEM_GET_CALLARGV (ustype, ustype, nsfw_mem_type_info, - nsfw_shmem_free_req, memstr_buf, msg_body); - break; - case NSFW_MEM_LOOKUP_REQ_MSG: - MEM_GET_CALLARGV (ustype, ustype, nsfw_mem_type_info, - nsfw_shmem_lookup_req, memstr_buf, msg_body); - break; - default: - NSFW_LOGERR ("error msg]type=%u", msg_type); - return FALSE; - } - if (EOK != - STRCPY_S (((nsfw_mem_zone *) memstr_buf)->stname.aname, - NSFW_MEM_NAME_LENGTH, - ((nsfw_shmem_reserv_req *) msg_body)->aname)) - { - NSFW_LOGERR ("STRCPY_S failed]msg_type=%u", msg_type); - return FALSE; - } - - ((nsfw_mem_zone *) memstr_buf)->stname.entype = NSFW_SHMEM; - - return TRUE; -} - -/***************************************************************************** -* Prototype : mem_item_free -* Description : free memory item -* Input : void *pdata -* Output : None -* Return Value : void* -* Calls : -* Called By : -*****************************************************************************/ -void * -mem_item_free (void *pdata) -{ - nsfw_mem_type_info *mem_free = (nsfw_mem_type_info *) pdata; - i32 ret; - NSFW_LOGINF ("free mem]type=%u,name=%s", mem_free->ustype, - mem_free->stname.aname); - switch (mem_free->ustype) - { - case NSFW_MEM_MZONE: - ret = nsfw_mem_zone_release (&mem_free->stname); - break; - case NSFW_MEM_MBUF: - ret = nsfw_mem_mbfmp_release (&mem_free->stname); - break; - case NSFW_MEM_SPOOL: - ret = nsfw_mem_sp_release (&mem_free->stname); - break; - case NSFW_MEM_RING: - ret = nsfw_mem_ring_release (&mem_free->stname); - break; - default: - NSFW_LOGERR ("free mem err type]type=%u", mem_free->ustype); - return NULL; - } - - if (NSFW_MEM_OK != ret) - { - NSFW_LOGERR ("mem free failed!]ret=%d", ret); - return NULL; - } - - return pdata; -} - -/***************************************************************************** -* Prototype : mem_item_lookup -* Description : lookup memory item -* Input : void *pdata -* Output : None -* Return Value : void* -* Calls : -* Called By : -*****************************************************************************/ -void * -mem_item_lookup (void *pdata) -{ - nsfw_mem_type_info *mem_lookup = (nsfw_mem_type_info *) pdata; - void *ret; - NSFW_LOGDBG ("lookup mem]type=%u,name=%s", mem_lookup->ustype, - mem_lookup->stname.aname); - switch (mem_lookup->ustype) - { - case NSFW_MEM_MZONE: - ret = nsfw_mem_zone_lookup (&mem_lookup->stname); - break; - case NSFW_MEM_MBUF: - ret = nsfw_mem_mbfmp_lookup (&mem_lookup->stname); - break; - case NSFW_MEM_SPOOL: - ret = nsfw_mem_sp_lookup (&mem_lookup->stname); - break; - case NSFW_MEM_RING: - ret = nsfw_mem_ring_lookup (&mem_lookup->stname); - break; - default: - NSFW_LOGERR ("lookup mem err type]type=%d", mem_lookup->ustype); - return NULL; - } - - if (NULL == ret) - { - NSFW_LOGERR ("mem lookup failed!]ret=%p,name=%s", ret, - mem_lookup->stname.aname); - return NULL; - } - - return ret; -} - -/***************************************************************************** -* Prototype : mem_item_proc_by_msg -* Description : call memory item process function -* Input : void *pdata -* nsfw_ps_mem_item_cfg* item_cfg -* Output : None -* Return Value : void* -* Calls : -* Called By : -*****************************************************************************/ -void * -mem_item_proc_by_msg (void *pdata, nsfw_ps_mem_item_cfg * item_cfg) -{ - char argv_buf[NSFW_MEM_CALL_ARG_BUF] = { 0 }; - - if ((NULL == item_cfg->change_fun) || (NULL == item_cfg->create_fun)) - { - NSFW_LOGERR ("item error]change_fun=%p,create_fun=%p", - item_cfg->change_fun, item_cfg->create_fun); - return NULL; - } - - if (FALSE == - item_cfg->change_fun (item_cfg->usmsg_type, pdata, argv_buf, - NSFW_MEM_CALL_ARG_BUF)) - { - NSFW_LOGERR ("call change_fun failed!]type=%u", item_cfg->usmsg_type); - return NULL; - } - - void *pdataret = NULL; - pdataret = (item_cfg->create_fun) ((void *) argv_buf); - return pdataret; -} - -/***************************************************************************** -* Prototype : mem_init_rsp_msg -* Description : init the rsp message -* Input : nsfw_shmem_msg_head* msg -* nsfw_shmem_msg_head *rsp -* Output : None -* Return Value : u8 -* Calls : -* Called By : -* -*****************************************************************************/ -u8 -mem_init_rsp_msg (nsfw_shmem_msg_head * msg, nsfw_shmem_msg_head * rsp) -{ - nsfw_ps_mem_item_cfg *item_cfg = - mem_item_get_cfg_from_msg (msg->usmsg_type); - if (NULL == item_cfg) - { - NSFW_LOGERR ("get item cfg failed!]msg_type=%u", msg->usmsg_type); - return FALSE; - } - - int idx; - int mem_count = msg->uslength / item_cfg->item_size; - - rsp->usmsg_type = msg->usmsg_type + 1; - rsp->uslength = mem_count * sizeof (nsfw_shmem_ack); - nsfw_shmem_ack *pack = (nsfw_shmem_ack *) & (rsp->aidata[0]); - char *pdata = NULL; - for (idx = 0; idx < mem_count; idx++) - { - pdata = (char *) msg->aidata + idx * item_cfg->item_size; - pack->pbase_addr = NULL; - pack->usseq = ((nsfw_shmem_reserv_req *) pdata)->usseq; - pack->cstate = NSFW_MEM_ALLOC_FAIL; - pack++; - } - - NSFW_LOGDBG ("init all rsp ack]mem_count=%d,msg_type=%u", mem_count, - msg->usmsg_type); - return TRUE; -} - -/***************************************************************************** -* Prototype : mem_rel_mem_by_msg -* Description : release memory by message -* Input : nsfw_shmem_msg_head* req_msg -* nsfw_shmem_msg_head *rsp -* u32 pid -* Output : None -* Return Value : u8 -* Calls : -* Called By : -*****************************************************************************/ -u8 -mem_rel_mem_by_msg (nsfw_shmem_msg_head * req_msg, - nsfw_shmem_msg_head * rsp, u32 pid) -{ - u32 i; - nsfw_ps_mem_item_cfg *item_cfg = - mem_item_get_cfg_from_msg (req_msg->usmsg_type); - if (NULL == item_cfg) - { - NSFW_LOGERR ("get item cfg failed!]msg_type=%u", req_msg->usmsg_type); - return FALSE; - } - - unsigned int mem_count = req_msg->uslength / item_cfg->item_size; - char *pdata = NULL; - nsfw_shmem_ack *pack = (nsfw_shmem_ack *) & (rsp->aidata[0]); - for (i = 0; i < mem_count; i++) - { - pdata = (char *) req_msg->aidata + i * item_cfg->item_size; - if (NULL != mem_item_proc_by_msg ((void *) pdata, item_cfg)) - { - pack->cstate = NSFW_MEM_ALLOC_SUCC; - pack->pbase_addr = NULL; - } - pack++; - } - - return TRUE; -} - -/***************************************************************************** -* Prototype : mem_lookup_mem_by_msg -* Description : lookup memory by message -* Input : nsfw_shmem_msg_head* mgr_msg -* nsfw_shmem_msg_head *rsp -* u32 pid -* Output : None -* Return Value : u8 -* Calls : -* Called By : -*****************************************************************************/ -u8 -mem_lookup_mem_by_msg (nsfw_shmem_msg_head * mgr_msg, - nsfw_shmem_msg_head * rsp, u32 pid) -{ - i32 idx; - nsfw_ps_mem_item_cfg *item_cfg = - mem_item_get_cfg_from_msg (mgr_msg->usmsg_type); - if (NULL == item_cfg) - { - NSFW_LOGERR ("get item cfg failed!]msg_type=%u", mgr_msg->usmsg_type); - return FALSE; - } - - int mem_count = mgr_msg->uslength / item_cfg->item_size; - char *pdata = NULL; - void *paddr = NULL; - nsfw_shmem_ack *pack = (nsfw_shmem_ack *) & (rsp->aidata[0]); - - for (idx = 0; idx < mem_count; idx++) - { - pdata = (char *) mgr_msg->aidata + idx * item_cfg->item_size; - paddr = mem_item_proc_by_msg ((void *) pdata, item_cfg); - if (NULL != paddr) - { - pack->cstate = NSFW_MEM_ALLOC_SUCC; - pack->pbase_addr = paddr; - } - pack++; - } - - return TRUE; -} - -/***************************************************************************** -* Prototype : mem_alloc_mem_by_msg -* Description : alloc memory by message -* Input : nsfw_shmem_msg_head* mem_msg -* nsfw_shmem_msg_head *rsp -* Output : None -* Return Value : ns_mem_info* -* Calls : -* Called By : -*****************************************************************************/ -void * -mem_alloc_mem_by_msg (nsfw_shmem_msg_head * mem_msg, - nsfw_shmem_msg_head * rsp) -{ - nsfw_ps_mem_item_cfg *item_cfg = - mem_item_get_cfg_from_msg (mem_msg->usmsg_type); - if (NULL == item_cfg) - { - NSFW_LOGERR ("get item cfg failed!]msg_type=%u", mem_msg->usmsg_type); - return NULL; - } - - int i; - int j; - nsfw_mem_type_info mem_free; - char *pdata = NULL; - void *p_addr = NULL; - - int mem_count = mem_msg->uslength / item_cfg->item_size; - nsfw_shmem_ack *pack = (nsfw_shmem_ack *) & (rsp->aidata[0]); - for (i = 0; i < mem_count; i++) - { - pdata = (char *) mem_msg->aidata + i * item_cfg->item_size; - p_addr = mem_item_proc_by_msg ((void *) pdata, item_cfg); - if (NULL == p_addr) - { - NSFW_LOGERR - ("alloc mem failed!]type=%u,mem_count=%d,item=%d,name=%s", - mem_msg->usmsg_type, mem_count, i, - ((nsfw_shmem_reserv_req *) pdata)->aname); - goto fail_free_mem; - } - - pack->cstate = NSFW_MEM_ALLOC_SUCC; - pack->pbase_addr = p_addr; - NSFW_LOGINF - ("alloc mem suc!]addr=%p,type=%u,mem_count=%d,item=%d,name=%s", - p_addr, mem_msg->usmsg_type, mem_count, i, - ((nsfw_shmem_reserv_req *) pdata)->aname); - pack++; - } - return p_addr; - -fail_free_mem: - for (j = 0; j < i; j++) - { - pdata = (char *) mem_msg->aidata + j * item_cfg->item_size; - if (EOK != - STRCPY_S (mem_free.stname.aname, NSFW_MEM_NAME_LENGTH, - ((nsfw_shmem_reserv_req *) pdata)->aname)) - { - NSFW_LOGERR ("STRCPY_S failed]j=%d", j); - continue; - } - - mem_free.ustype = item_cfg->mem_type; - mem_free.stname.entype = NSFW_SHMEM; - (void) mem_item_free (&mem_free); - NSFW_LOGINF ("free mem]addr=%p,type=%u,mem_count=%d,item=%d,name=%s", - p_addr, mem_msg->usmsg_type, mem_count, j, - ((nsfw_shmem_reserv_req *) pdata)->aname); - pack++; - } - - return NULL; - -} - -/***************************************************************************** -* Prototype : mem_alloc_req_proc -* Description : memory message -* Input : nsfw_mgr_msg* msg -* Output : None -* Return Value : int -* Calls : -* Called By : -*****************************************************************************/ -int -mem_alloc_req_proc (nsfw_mgr_msg * msg) -{ - void *mem_addr = NULL; - - if (NULL == msg) - { - NSFW_LOGERR ("msg nul"); - return FALSE; - } - - nsfw_shmem_msg_head *mem_msg = GET_USER_MSG (nsfw_shmem_msg_head, msg); - nsfw_mgr_msg *rsp_msg = nsfw_mgr_rsp_msg_alloc (msg); - if (NULL == rsp_msg) - { - NSFW_LOGERR ("alloc rsp msg failed]msg_type=%u", mem_msg->usmsg_type); - return FALSE; - } - - nsfw_shmem_msg_head *mem_rsp_msg = - GET_USER_MSG (nsfw_shmem_msg_head, rsp_msg); - - if (!mem_init_rsp_msg (mem_msg, mem_rsp_msg)) - { - NSFW_LOGERR ("init rsp msg failed]msg_type=%u", mem_msg->usmsg_type); - nsfw_mgr_msg_free (rsp_msg); - return FALSE; - } - - switch (mem_msg->usmsg_type) - { - case NSFW_MEM_LOOKUP_REQ_MSG: - if (!mem_lookup_mem_by_msg (mem_msg, mem_rsp_msg, msg->src_pid)) - { - NSFW_LOGERR ("lookup mem msg failed]msg_type=%u", - mem_msg->usmsg_type); - goto sendrspmsg; - } - (void) mem_alloc_ps_info (msg->src_pid, msg->src_proc_type); - break; - case NSFW_RESERV_REQ_MSG: - case NSFW_MBUF_REQ_MSG: - case NSFW_SPPOOL_REQ_MSG: - case NSFW_RING_REQ_MSG: - mem_addr = mem_alloc_mem_by_msg (mem_msg, mem_rsp_msg); - if (NULL == mem_addr) - { - NSFW_LOGERR ("alloc mem msg failed]msg_type=%u", - mem_msg->usmsg_type); - (void) mem_init_rsp_msg (mem_msg, mem_rsp_msg); - goto sendrspmsg; - } - (void) mem_alloc_ps_info (msg->src_pid, msg->src_proc_type); - break; - case NSFW_RELEASE_REQ_MSG: - if (!mem_rel_mem_by_msg (mem_msg, mem_rsp_msg, msg->src_pid)) - { - NSFW_LOGERR ("rel mem msg failed]msg_type=%u", mem_msg->usmsg_type); - goto sendrspmsg; - } - break; - default: - break; - } - -sendrspmsg: - (void) nsfw_mgr_send_msg (rsp_msg); - nsfw_mgr_msg_free (rsp_msg); - return TRUE; -} - -/***************************************************************************** -* Prototype : mem_ps_exiting_resend -* Description : send the exiting message again -* Input : void *pps_info -* void* argv -* Output : None -* Return Value : int -* Calls : -* Called By : -*****************************************************************************/ -int -mem_ps_exiting_resend (void *pps_info, void *argv) -{ - u32 *count = argv; - nsfw_ps_info *ps_info = pps_info; - if (NULL == ps_info) - { - NSFW_LOGERR ("ps_info nul!"); - return FALSE; - } - - if (NSFW_PROC_APP != ps_info->proc_type) - { - return FALSE; - } - - if (NSFW_PS_EXITING != ps_info->state) - { - return FALSE; - } - - if (NULL != count) - { - NSFW_LOGINF ("send count]count=%u,pid=%u", *count, ps_info->host_pid); - if (NSFW_PS_SEND_PER_TIME < (*count)++) - { - struct timespec time_left = - { NSFW_PS_MEM_RESEND_TVLAUE + -((*count) / NSFW_PS_SEND_PER_TIME), 0 - }; - ps_info->resend_timer_ptr = - (void *) nsfw_timer_reg_timer (NSFW_PS_MEM_RESEND_TIMER, - pps_info, - nsfw_mem_ps_exit_resend_timeout, - time_left); - return TRUE; - } - } - - (void) mem_ps_exiting (ps_info, NULL); - return TRUE; -} - -/***************************************************************************** -* Prototype : nsfw_mem_srv_restore_timeout -* Description : service waiting resume timeout -* Input : u32 timer_type -* void* data -* Output : None -* Return Value : int -* Calls : -* Called By : -*****************************************************************************/ -int -nsfw_mem_srv_restore_timeout (u32 timer_type, void *data) -{ - u32 max_count = 0; - - g_mem_cfg.p_restore_timer = NULL; - if (TRUE == NSFW_SRV_STATE_SUSPEND) - { - NSFW_SRV_STATE_SUSPEND = FALSE; - (void) nsfw_ps_iterator (mem_ps_exiting_resend, &max_count); - } - return TRUE; -} - -/***************************************************************************** -* Prototype : mem_srv_ctrl_proc -* Description : service control message process -* Input : nsfw_mgr_msg* msg -* Output : None -* Return Value : int -* Calls : -* Called By : -*****************************************************************************/ -int -mem_srv_ctrl_proc (nsfw_mgr_msg * msg) -{ - if (NULL == msg) - { - NSFW_LOGERR ("msg nul"); - return FALSE; - } - - nsfw_srv_ctrl_msg *ctrl_msg = GET_USER_MSG (nsfw_srv_ctrl_msg, msg); - nsfw_mgr_msg *rsp_msg = nsfw_mgr_rsp_msg_alloc (msg); - if (NULL == rsp_msg) - { - NSFW_LOGERR ("alloc rsp msg failed]msg=%p", msg); - return FALSE; - } - nsfw_srv_ctrl_msg *ctrl_rsp_msg = GET_USER_MSG (nsfw_srv_ctrl_msg, rsp_msg); - NSFW_LOGINF ("get srv ctrl state] state=%d", ctrl_msg->srv_state); - - ctrl_rsp_msg->rsp_code = NSFW_MGR_SUCCESS; - - (void) nsfw_mgr_send_msg (rsp_msg); - nsfw_mgr_msg_free (rsp_msg); - - if (NSFW_SRV_CTRL_RESUME == ctrl_msg->srv_state) - { - if (TRUE == NSFW_SRV_STATE_SUSPEND) - { - NSFW_SRV_STATE_SUSPEND = FALSE; - } - u32 max_count = 0; - (void) nsfw_ps_iterator (mem_ps_exiting_resend, &max_count); - if (NULL != g_mem_cfg.p_restore_timer) - { - nsfw_timer_rmv_timer ((nsfw_timer_info *) - g_mem_cfg.p_restore_timer); - g_mem_cfg.p_restore_timer = NULL; - } - } - else - { - NSFW_SRV_STATE_SUSPEND = TRUE; - struct timespec time_left = { NSFW_SRV_RESTORE_TVALUE, 0 }; - g_mem_cfg.p_restore_timer = - (void *) nsfw_timer_reg_timer (0, NULL, - nsfw_mem_srv_restore_timeout, - time_left); - } - - return TRUE; -} - -/***************************************************************************** -* Prototype : nsfw_ps_mem_module_init -* Description : module init -* Input : void* param -* Output : None -* Return Value : int -* Calls : -* Called By : -*****************************************************************************/ -int -nsfw_ps_mem_module_init (void *param) -{ - u32 proc_type = (u32) ((long long) param); - NSFW_LOGINF ("ps_mem module init]type=%u", proc_type); - switch (proc_type) - { - case NSFW_PROC_MAIN: - (void) nsfw_ps_reg_global_fun (NSFW_PROC_APP, NSFW_PS_EXITING, - mem_ps_exiting, NULL); - (void) nsfw_mgr_reg_msg_fun (MGR_MSG_MEM_ALLOC_REQ, mem_alloc_req_proc); - (void) NSFW_REG_SOFT_INT (NSFW_SRV_RESTORE_TIMER, - NSFW_SRV_RESTORE_TVALUE, 1, 0xFFFF); - (void) NSFW_REG_SOFT_INT (NSFW_APP_RESEND_TIMER, - NSFW_PS_MEM_RESEND_TVLAUE, 1, 0xFFFF); - (void) NSFW_REG_SOFT_INT (NSFW_APP_SEND_PER_TIME, - NSFW_PS_SEND_PER_TIME, 1, 0xFFFF); - break; - default: - if (proc_type < NSFW_PROC_MAX) - { - return 0; - } - return -1; - } - - g_mem_cfg.srv_restore_tvalue = NSFW_SRV_RESTORE_TVALUE_DEF; - g_mem_cfg.ps_exit_resend_tvalue = NSFW_PS_MEM_RESEND_TVLAUE_DEF; - g_mem_cfg.ps_send_per_time = NSFW_PS_SEND_PER_TIME_DEF; - - return 0; -} - -/* *INDENT-OFF* */ -NSFW_MODULE_NAME (NSFW_PS_MEM_MODULE) -NSFW_MODULE_PRIORITY (10) -NSFW_MODULE_DEPENDS (NSFW_PS_MODULE) -NSFW_MODULE_INIT (nsfw_ps_mem_module_init) -/* *INDENT-ON* */ - -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif /* __cplusplus */ diff --git a/src/framework/ipc/ps/nsfw_ps_mem_module.h b/src/framework/ipc/ps/nsfw_ps_mem_module.h deleted file mode 100644 index 6b2b3c9..0000000 --- a/src/framework/ipc/ps/nsfw_ps_mem_module.h +++ /dev/null @@ -1,87 +0,0 @@ -/* -* -* Copyright (c) 2018 Huawei Technologies Co.,Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at: -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#ifndef _NSFW_PS_MEM_MODULE_H -#define _NSFW_PS_MEM_MODULE_H - -#include "list.h" -#include "pidinfo.h" - -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C"{ -/* *INDENT-ON* */ -#endif /* __cplusplus */ - -#define MEMZONE_MAX_NAME 32 -#define NS_MAX_FORK_NUM 32 -#define NSFW_PS_MEM_MAX_FILTER 4 - -#define NSFW_SRV_RESTORE_TVALUE_DEF 120 -#define NSFW_SRV_RESTORE_TVALUE g_mem_cfg.srv_restore_tvalue -#define NSFW_SRV_STATE_SUSPEND g_mem_cfg.srv_suspend - -#define NSFW_PS_MEM_RESEND_TIMER 1 -#define NSFW_PS_MEM_RESEND_TVLAUE_DEF 2 -#define NSFW_PS_SEND_PER_TIME_DEF 150 -#define NSFW_PS_SEND_PER_TIME (g_mem_cfg.ps_send_per_time) -#define NSFW_PS_MEM_RESEND_TVLAUE (g_mem_cfg.ps_exit_resend_tvalue) - -typedef struct _ns_mem_mng_init_cfg -{ - u16 srv_restore_tvalue; - u16 ps_exit_resend_tvalue; - u16 ps_send_per_time; - u16 srv_suspend; - void *p_restore_timer; -} ns_mem_mng_init_cfg; - -/*mem alloc by msg begin*/ -typedef struct -{ - nsfw_mem_name stname; - u16 ustype; -} nsfw_mem_type_info; - -#define NSFW_MEM_CALL_ARG_BUF 256 -#define MEM_GET_CALLARGV(_dst_member,_src_member, _dst_type,_srctype,_dst_buf, _src_buf) \ - ((_dst_type*)(void*)_dst_buf)->_dst_member = ((_srctype*)(void*)_src_buf)->_src_member - -typedef void *(*nsfw_ps_mem_create_fun) (void *memstr); -typedef u8 (*nsfw_ps_mem_msg_to_memstr) (u16 msg_type, char *msg_body, - char *memstr_buf, i32 buf_len); - -typedef struct __nsfw_ps_mem_item_cfg -{ - u16 usmsg_type; - u16 item_size; - u16 mem_type; - nsfw_ps_mem_create_fun create_fun; - nsfw_ps_mem_msg_to_memstr change_fun; -} nsfw_ps_mem_item_cfg; - -void *mem_item_free (void *pdata); -void *mem_item_lookup (void *pdata); -u8 mem_item_get_callargv (u16 msg_type, char *msg_body, char *memstr_buf, - i32 buf_len); - -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif /* __cplusplus */ - -#endif /* _NSFW_PS_MEM_MODULE_H */ diff --git a/src/framework/ipc/ps/nsfw_ps_module.c b/src/framework/ipc/ps/nsfw_ps_module.c index 6e03e11..3f7cae0 100644 --- a/src/framework/ipc/ps/nsfw_ps_module.c +++ b/src/framework/ipc/ps/nsfw_ps_module.c @@ -22,7 +22,6 @@ #include "nsfw_mgr_com_api.h" #include "nsfw_ps_api.h" #include "nsfw_ps_module.h" -#include "nsfw_mem_api.h" #include "nstack_log.h" #include "nsfw_base_linux_api.h" #include "nsfw_fd_timer_api.h" @@ -39,7 +38,7 @@ #include <linux/netlink.h> #include <dirent.h> #include <fnmatch.h> -#include "common_mem_common.h" +#include "dmm_memory.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -259,7 +258,7 @@ nsfw_ps_info * nsfw_ps_info_alloc (u32 pid, u8 proc_type) { nsfw_ps_info *pps_info = NULL; - if (0 == nsfw_mem_ring_dequeue (g_ps_cfg.ps_info_pool, (void *) &pps_info)) + if (1 != dmm_dequeue (g_ps_cfg.ps_info_pool, (void **) &pps_info)) { NSFW_LOGERR ("alloc ps_info failed]pid=%u,type=%u", pid, proc_type); return NULL; @@ -397,7 +396,7 @@ nsfw_ps_info_free (nsfw_ps_info * ps_info) ps_info->host_pid, ps_info->state); if (ps_info != &g_main_ps_info) { - if (0 == nsfw_mem_ring_enqueue (g_ps_cfg.ps_info_pool, ps_info)) + if (1 != dmm_enqueue (g_ps_cfg.ps_info_pool, ps_info)) { NSFW_LOGERR ("ps_info free failed]ps_info=%p,pid=%u,state=%u", ps_info, ps_info->host_pid, ps_info->state); @@ -1554,6 +1553,8 @@ nsfw_ps_cfg_set_chk_count (u16 count) g_ps_cfg.ps_chk_hbt_count = count; } +#define MAS_PS_INFO_NAME "MAS_PS_INFO" + /***************************************************************************** * Prototype : nsfw_ps_module_init * Description : ps_module init @@ -1566,6 +1567,7 @@ nsfw_ps_cfg_set_chk_count (u16 count) int nsfw_ps_module_init (void *param) { + size_t length; u32 proc_type = (u32) ((long long) param); nsfw_ps_init_cfg *ps_cfg = &g_ps_cfg; int retval; @@ -1576,17 +1578,7 @@ nsfw_ps_module_init (void *param) ps_cfg->ps_chk_hbt_tvalue = NSFW_CHK_HBT_TVLAUE_DEF; ps_cfg->ps_chk_hbt_soft_count = ps_cfg->ps_chk_hbt_count; - nsfw_mem_zone pzoneinfo; - pzoneinfo.isocket_id = NSFW_SOCKET_ANY; - pzoneinfo.stname.entype = NSFW_SHMEM; - pzoneinfo.length = sizeof (nsfw_pid_item) * NSFW_MAX_PID; - if (-1 == - SPRINTF_S (pzoneinfo.stname.aname, NSFW_MEM_NAME_LENGTH, "%s", - "MAS_PS_INFO")) - { - NSFW_LOGERR ("SPRINTF_S failed]"); - return -1; - } + length = sizeof (nsfw_pid_item) * NSFW_MAX_PID; switch (proc_type) { @@ -1611,8 +1603,7 @@ nsfw_ps_module_init (void *param) g_ps_info = pid_info; - pzoneinfo.stname.enowner = NSFW_PROC_MAIN; - pid_info = nsfw_mem_zone_create (&pzoneinfo); + pid_info = dmm_locked_map (length, MAS_PS_INFO_NAME); if (NULL == pid_info) { NSFW_LOGERR ("create pid_info failed!"); @@ -1632,30 +1623,17 @@ nsfw_ps_module_init (void *param) INIT_LIST_HEAD (&(g_ps_runing_list)); - nsfw_mem_sppool pmpinfo; - pmpinfo.enmptype = NSFW_MRING_MPMC; - pmpinfo.usnum = ps_cfg->ps_info_size; - pmpinfo.useltsize = sizeof (nsfw_ps_info); - pmpinfo.isocket_id = NSFW_SOCKET_ANY; - pmpinfo.stname.entype = NSFW_NSHMEM; - if (-1 == - SPRINTF_S (pmpinfo.stname.aname, NSFW_MEM_NAME_LENGTH, "%s", - "MAS_PS_INFOPOOL")) - { - NSFW_LOGERR ("SPRINTF_S failed]"); - return -1; - } - - ps_cfg->ps_info_pool = nsfw_mem_sp_create (&pmpinfo); - + ps_cfg->ps_info_pool = dmm_malloc_pool (sizeof (nsfw_ps_info), + ps_cfg->ps_info_size, + DMM_RING_INIT_MPMC); if (!ps_cfg->ps_info_pool) { NSFW_LOGERR ("alloc ps info pool_err"); return -1; } - MEM_STAT (NSFW_PS_MODULE, pmpinfo.stname.aname, NSFW_NSHMEM, - nsfw_mem_get_len (ps_cfg->ps_info_pool, NSFW_MEM_SPOOL)); +// MEM_STAT (NSFW_PS_MODULE, pmpinfo.stname.aname, NSFW_NSHMEM, +// nsfw_mem_get_len (ps_cfg->ps_info_pool, NSFW_MEM_SPOOL)); if (NSFW_PROC_MAIN != proc_type) { @@ -1677,7 +1655,7 @@ nsfw_ps_module_init (void *param) /* *INDENT-OFF* */ NSFW_MODULE_NAME (NSFW_PS_MODULE) -NSFW_MODULE_PRIORITY (10) +NSFW_MODULE_PRIORITY (40) NSFW_MODULE_DEPENDS (NSFW_MGR_COM_MODULE) NSFW_MODULE_DEPENDS (NSFW_TIMER_MODULE) NSFW_MODULE_INIT (nsfw_ps_module_init) diff --git a/src/framework/ipc/ps/nsfw_ps_module.h b/src/framework/ipc/ps/nsfw_ps_module.h index b754cea..c09644d 100644 --- a/src/framework/ipc/ps/nsfw_ps_module.h +++ b/src/framework/ipc/ps/nsfw_ps_module.h @@ -18,7 +18,7 @@ #define _NSFW_PS_MODULE_H #include "nsfw_ps_api.h" -#include "nsfw_mem_api.h" +#include "dmm_ring.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -33,7 +33,7 @@ extern "C"{ #define NSFW_MAX_PID 65535 COMPAT_PROTECT (NSFW_MAX_PID, 65535); -#define NSFW_PS_INFO_MAX_COUNT 4095 +#define NSFW_PS_INFO_MAX_COUNT 4096 #define MAX_NET_LINK_BUF_DEF 0x34000*32 #define NSFW_PS_WEXIT_TIMER 1 @@ -52,7 +52,7 @@ typedef struct _nsfw_ps_init_cfg u16 ps_chk_hbt_soft_count; u16 ps_chk_hbt_tvalue; - mring_handle ps_info_pool; + struct dmm_ring *ps_info_pool; } nsfw_ps_init_cfg; #define NSFW_PS_CHK_TIMER 1 diff --git a/src/framework/ipc/ps/nsfw_recycle_module.c b/src/framework/ipc/ps/nsfw_recycle_module.c index 01e16fb..c561b7c 100644 --- a/src/framework/ipc/ps/nsfw_recycle_module.c +++ b/src/framework/ipc/ps/nsfw_recycle_module.c @@ -20,14 +20,14 @@ #include "nsfw_init.h" #include "nsfw_mgr_com_api.h" -#include "nsfw_mem_api.h" #include "nsfw_ps_api.h" -#include "nsfw_ps_mem_api.h" #include "nsfw_fd_timer_api.h" #include "nsfw_recycle_module.h" #include "nsfw_maintain_api.h" #include "nstack_log.h" -#include "common_mem_api.h" + +#include "dmm_memory.h" +#include "dmm_sys.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -432,22 +432,13 @@ nsfw_recycle_obj_timeout (u32 timer_type, void *data) u8 mem_rec_zone_init () { - nsfw_mem_mring pringinfo; - pringinfo.enmptype = NSFW_MRING_MPMC; - pringinfo.isocket_id = NSFW_SOCKET_ANY; - pringinfo.stname.entype = NSFW_NSHMEM; - pringinfo.usnum = MEM_RECYCLE_PER_PRO_QUE; + size_t length; u32 i; + for (i = 0; i < NSFW_REC_PRO_MAX; i++) { - if (-1 == - SPRINTF_S (pringinfo.stname.aname, NSFW_MEM_NAME_LENGTH, "%s%d", - MEM_REC_QUEUE_NAME, i)) - { - NSFW_LOGERR ("SPRINTF_S failed]"); - return FALSE; - } - g_rec_cfg.mem_rec_pro[i] = nsfw_mem_ring_create (&pringinfo); + g_rec_cfg.mem_rec_pro[i] = dmm_malloc_ring (MEM_RECYCLE_PER_PRO_QUE, + DMM_RING_INIT_MPMC); if (NULL == g_rec_cfg.mem_rec_pro[i]) { NSFW_LOGERR ("alloc rec ring nul!"); @@ -455,66 +446,36 @@ mem_rec_zone_init () } } - MEM_STAT (NSFW_RECYCLE_MODULE, MEM_REC_QUEUE_NAME, NSFW_NSHMEM, - NSFW_REC_PRO_MAX * nsfw_mem_get_len (g_rec_cfg.mem_rec_pro[0], - NSFW_MEM_RING)); - - nsfw_mem_zone pzoneinfo; - pzoneinfo.isocket_id = NSFW_SOCKET_ANY; - pzoneinfo.stname.entype = NSFW_NSHMEM; - pzoneinfo.length = - MEM_RECYCLE_OBJ_MAX_NUM * sizeof (nsfw_recycle_obj) + - sizeof (nsfw_recycle_pool); - if (-1 == - SPRINTF_S (pzoneinfo.stname.aname, NSFW_MEM_NAME_LENGTH, "%s", - MEM_REC_POOL_NAME)) - { - NSFW_LOGERR ("SPRINTF_S failed]"); - return FALSE; - } +// MEM_STAT (NSFW_RECYCLE_MODULE, MEM_REC_QUEUE_NAME, NSFW_NSHMEM, +// NSFW_REC_PRO_MAX * nsfw_mem_get_len (g_rec_cfg.mem_rec_pro[0], +// NSFW_MEM_RING)); - g_rec_cfg.mem_rec_obj_pool = nsfw_mem_zone_create (&pzoneinfo); + length = sizeof (nsfw_recycle_pool) + + MEM_RECYCLE_OBJ_MAX_NUM * sizeof (nsfw_recycle_obj); + g_rec_cfg.mem_rec_obj_pool = calloc (1, length); if (NULL == g_rec_cfg.mem_rec_obj_pool) { NSFW_LOGERR ("alloc rec pool nul!"); return FALSE; } - MEM_STAT (NSFW_RECYCLE_MODULE, MEM_REC_POOL_NAME, NSFW_NSHMEM, - pzoneinfo.length); +// MEM_STAT (NSFW_RECYCLE_MODULE, MEM_REC_POOL_NAME, NSFW_NSHMEM, +// pzoneinfo.length); - int retval; - retval = - MEMSET_S (g_rec_cfg.mem_rec_obj_pool, pzoneinfo.length, 0, - pzoneinfo.length); - if (EOK != retval) - { - NSFW_LOGERR ("mem set init failed!"); - return FALSE; - } - - i32 j; - nsfw_recycle_pool *rec_pool = - (nsfw_recycle_pool *) g_rec_cfg.mem_rec_obj_pool; + nsfw_recycle_pool *rec_pool = g_rec_cfg.mem_rec_obj_pool; rec_pool->pool_size = MEM_RECYCLE_OBJ_MAX_NUM; nsfw_recycle_obj *p_start = rec_pool->obj; for (i = 0; i < NSFW_REC_PRO_MAX; i++) { - for (j = 0; j < MEM_RECYCLE_PER_PRO_QUE; j++) + int ret = dmm_array_enqueue (g_rec_cfg.mem_rec_pro[i], p_start, + MEM_RECYCLE_PER_PRO_QUE, + sizeof (nsfw_recycle_obj)); + if (ret != MEM_RECYCLE_PER_PRO_QUE) { - if (FALSE == p_start[j].alloc_flag) - { - if (0 == - nsfw_mem_ring_enqueue (g_rec_cfg.mem_rec_pro[i], - &p_start[j])) - { - NSFW_LOGERR ("enqueue failed"); - break; - } - } + NSFW_LOGERR ("enqueue failed"); } - p_start = p_start + MEM_RECYCLE_PER_PRO_QUE; + p_start += MEM_RECYCLE_PER_PRO_QUE; } NSFW_LOGINF ("init rec pool and ring suc!"); @@ -543,8 +504,7 @@ nsfw_recycle_reg_obj (u8 priority, u16 rec_type, void *data) } nsfw_recycle_obj *obj = NULL; - if (0 == - nsfw_mem_ring_dequeue (g_rec_cfg.mem_rec_pro[priority], (void *) &obj)) + if (1 != dmm_dequeue (g_rec_cfg.mem_rec_pro[priority], (void **) &obj)) { NSFW_LOGERR ("dequeue error]priority=%d,rec_type=%d,data=%p", priority, rec_type, data); @@ -553,7 +513,7 @@ nsfw_recycle_reg_obj (u8 priority, u16 rec_type, void *data) if (EOK != MEMSET_S (obj, sizeof (*obj), 0, sizeof (*obj))) { - if (0 == nsfw_mem_ring_enqueue (g_rec_cfg.mem_rec_pro[priority], obj)) + if (1 != dmm_enqueue (g_rec_cfg.mem_rec_pro[priority], obj)) { NSFW_LOGERR ("enqueue error]priority=%d,rec_type=%d,data=%p", priority, rec_type, data); @@ -651,8 +611,9 @@ nsfw_recycle_fork_init () /* *INDENT-OFF* */ NSFW_MODULE_NAME (NSFW_RECYCLE_MODULE) -NSFW_MODULE_PRIORITY (10) -NSFW_MODULE_DEPENDS (NSFW_PS_MEM_MODULE) +NSFW_MODULE_PRIORITY (60) +NSFW_MODULE_DEPENDS (DMM_MEMORY_MODULE) +NSFW_MODULE_DEPENDS (NSFW_PS_MODULE) NSFW_MODULE_INIT (nsfw_recycle_module_init) /* *INDENT-ON* */ diff --git a/src/framework/ipc/ps/nsfw_recycle_module.h b/src/framework/ipc/ps/nsfw_recycle_module.h index 694c1d2..73f9317 100644 --- a/src/framework/ipc/ps/nsfw_recycle_module.h +++ b/src/framework/ipc/ps/nsfw_recycle_module.h @@ -18,6 +18,7 @@ #define _NSFW_RECYCLE_MODULE_H #include "nsfw_recycle_api.h" +#include "dmm_ring.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -45,7 +46,6 @@ typedef struct _nsfw_recycle_obj u16 rec_type; u32 host_pid; void *data; - u64 u64reserve; } nsfw_recycle_obj; #define NSFW_REC_LOCK_REL_MAX_FUN 32 @@ -66,8 +66,8 @@ typedef struct _nsfw_recycle_pool typedef struct _nsfw_recycle_cfg { u16 rec_waite_end_tvalue; - mring_handle mem_rec_obj_pool; - mzone_handle mem_rec_pro[NSFW_REC_PRO_MAX]; + nsfw_recycle_pool *mem_rec_obj_pool; + struct dmm_ring *mem_rec_pro[NSFW_REC_PRO_MAX]; } nsfw_recycle_cfg; extern nsfw_rcc_stat nsfw_recycle_callback_all_obj (u32 pid, diff --git a/src/framework/ipc/ps/nsfw_soft_param.c b/src/framework/ipc/ps/nsfw_soft_param.c index 743276f..6294acc 100644 --- a/src/framework/ipc/ps/nsfw_soft_param.c +++ b/src/framework/ipc/ps/nsfw_soft_param.c @@ -26,8 +26,6 @@ #include "nstack_log.h" #include "nsfw_maintain_api.h" -#include "nsfw_mem_api.h" - #ifdef __cplusplus /* *INDENT-OFF* */ extern "C"{ @@ -286,7 +284,7 @@ nsfw_softparam_module_init (void *param) /* *INDENT-OFF* */ NSFW_MODULE_NAME (NSFW_SOFT_PARAM_MODULE) -NSFW_MODULE_PRIORITY (99) +NSFW_MODULE_PRIORITY (50) NSFW_MODULE_INIT (nsfw_softparam_module_init) /* *INDENT-ON* */ |