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 | |
parent | 31ea86798426cf236d70c9de1944c723a6cb1d95 (diff) |
Refactor: change to dmm share memory
Change-Id: Iff87eb5c6610c1db9247a898dd4c8ffbe6eeabdf
Signed-off-by: nanger <zhenyinan@huawei.com>
133 files changed, 2096 insertions, 1376 deletions
@@ -5,8 +5,6 @@ /release/include/common/ /release/include/generic/ /release/include/*.h -!/release/include/declare_syscalls.h -!/release/include/nsocket_dmm_api.h #ignoring the changes in sub folders of build folder /build/app_example/ @@ -30,14 +28,8 @@ /stacks/lwip_stack/lwip_src/lwip/ /stacks/lwip_stack/build/ /stacks/lwip_stack/release/ -/scripts/checkstyle.sh /stacks/lwip_stack/release/bin/ /stacks/lwip_stack/release/script/ -/stacks/lwip_stack/src/include/ -!/stacks/lwip_stack/src/include/nsfw_msg_api.h -!/stacks/lwip_stack/src/include/nsfw_msg.h -!/stacks/lwip_stack/src/include/nsfw_mt_config.h -!/stacks/lwip_stack/src/include/nsfw_rti.h #ignoring the changes in sub folders of thirdparty folder /thirdparty/ /thirdparty/glog/glog-0.3.4/compile/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f5e9f0..43b228d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,21 +110,23 @@ if(WITH_HAL_LIB) else() FILE(APPEND ${post_compile} " +mkdir -p ${DMM_REL_INC_DIR} + +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/nSocket/include/nstack_dmm_api.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/adapt/nstack_dmm_adpt.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/adapt/nstack_share_res.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/nSocket/include/declare_syscalls.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/include/* ${DMM_REL_INC_DIR} +cp -rf ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/base/include/*.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/include/*.h ${DMM_REL_INC_DIR} +cp -rf ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/include/generic ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/include/arch/${DMM_ARCH}/* ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/ipc/mgr_com/mgr_com.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/hal/hal.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/nSocket/include/nstack_dmm_api.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/ipc/ps/*.h ${DMM_REL_INC_DIR} +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/ring/*.h ${DMM_REL_INC_DIR} -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/nSocket/include/nstack_dmm_api.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/adapt/nstack_dmm_adpt.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/adapt/nstack_share_res.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/nSocket/include/declare_syscalls.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/include/* ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -rf ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/base/include/*.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -rf ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/base/include/common/* ${CMAKE_CURRENT_LIST_DIR}/release/include/ - -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/include/*.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -rf ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/include/generic ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/include/arch/${DMM_ARCH}/* ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/ipc/mgr_com/mgr_com.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/hal/hal.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ -cp -f ${CMAKE_CURRENT_LIST_DIR}/src/nSocket/include/nstack_dmm_api.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ echo post compile process success. " ) @@ -143,15 +145,15 @@ echo post clean process success. " ) -ADD_CUSTOM_TARGET(DPDK ALL COMMAND sh post_compile.sh) -ADD_DEPENDENCIES(DPDK dmm_api) +ADD_CUSTOM_TARGET(post-compile ALL COMMAND sh post_compile.sh) +ADD_DEPENDENCIES(post-compile dmm_api) ADD_CUSTOM_TARGET(pkg-rpm COMMAND sh ../scripts/generate_dmm_rpm.sh) ADD_CUSTOM_TARGET(pkg-deb COMMAND sh ../scripts/generate_dmm_deb.sh) ADD_CUSTOM_TARGET(vpp-stack COMMAND sh ../scripts/build_vpp.sh) -ADD_DEPENDENCIES(vpp-stack DPDK) +ADD_DEPENDENCIES(vpp-stack post-compile) ADD_CUSTOM_TARGET(checkstyle COMMAND bash ${CMAKE_CURRENT_LIST_DIR}/scripts/checkstyle.sh -c) diff --git a/release/include/declare_syscalls.h b/release/include/declare_syscalls.h deleted file mode 100644 index c4810f5..0000000 --- a/release/include/declare_syscalls.h +++ /dev/null @@ -1,51 +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. -*/ - -NSTACK_MK_DECL (int, socket, (int, int, int)); -NSTACK_MK_DECL (int, bind, (int, const struct sockaddr *, socklen_t)); -NSTACK_MK_DECL (int, listen, (int, int)); -NSTACK_MK_DECL (int, shutdown, (int, int)); -NSTACK_MK_DECL (int, getsockname, (int, struct sockaddr *, socklen_t *)); -NSTACK_MK_DECL (int, getpeername, (int, struct sockaddr *, socklen_t *)); -NSTACK_MK_DECL (int, getsockopt, (int, int, int, void *, socklen_t *)); -NSTACK_MK_DECL (int, setsockopt, (int, int, int, const void *, socklen_t)); -NSTACK_MK_DECL (int, accept, (int, struct sockaddr *, socklen_t *)); -NSTACK_MK_DECL (int, accept4, - (int, struct sockaddr *, socklen_t *, int flags)); -NSTACK_MK_DECL (int, connect, (int, const struct sockaddr *, socklen_t)); -NSTACK_MK_DECL (ssize_t, recv, (int, void *, size_t, int)); -NSTACK_MK_DECL (ssize_t, send, (int, const void *, size_t, int)); -NSTACK_MK_DECL (ssize_t, read, (int, void *, size_t)); -NSTACK_MK_DECL (ssize_t, write, (int, const void *, size_t)); -NSTACK_MK_DECL (ssize_t, writev, (int, const struct iovec *, int)); -NSTACK_MK_DECL (ssize_t, readv, (int, const struct iovec *, int)); -NSTACK_MK_DECL (ssize_t, sendto, - (int, const void *, size_t, int, const struct sockaddr *, - socklen_t)); -NSTACK_MK_DECL (ssize_t, recvfrom, - (int, void *, size_t, int, struct sockaddr *, socklen_t *)); -NSTACK_MK_DECL (ssize_t, sendmsg, (int, const struct msghdr *, int flags)); -NSTACK_MK_DECL (ssize_t, recvmsg, (int, struct msghdr *, int flags)); -NSTACK_MK_DECL (int, close, (int)); -NSTACK_MK_DECL (int, select, - (int, fd_set *, fd_set *, fd_set *, struct timeval *)); -NSTACK_MK_DECL (int, ioctl, (int, unsigned long, unsigned long)); -NSTACK_MK_DECL (int, fcntl, (int, int, unsigned long)); -NSTACK_MK_DECL (int, epoll_create, (int)); -NSTACK_MK_DECL (int, epoll_ctl, (int, int, int, struct epoll_event *)); -NSTACK_MK_DECL (int, epoll_wait, (int, struct epoll_event *, int, int)); -NSTACK_MK_DECL (pid_t, fork, (void)); -#undef NSTACK_MK_DECL diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1069e7f..e7a469d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,20 +14,15 @@ # limitations under the License. ######################################################################### -if(WITH_HAL_LIB) -else() - SET(COMM_CONFIG ${PROJECT_SOURCE_DIR}/src/framework/common/base/include/common/common_sys_config.h) - #SET(PRI_DIRECTORIES "framework/common/base/include/common/") -endif() INCLUDE_DIRECTORIES( framework/log/ framework/mem + framework/ring framework/include/ framework/common/include/ framework/common/include/arch/${DMM_ARCH} framework/common/base/include/ - framework/common/base/include/common/ ${PRI_DIRECTORIES} ../platform/SecureC/include/ ../thirdparty/glog/glog-0.3.4/src/ @@ -40,7 +35,6 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,relro,-z,now -Wl,--disable-new-dtags" SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium") SET(COMPLE_CONFIG ${PROJECT_SOURCE_DIR}/src/framework/common/include/compile_config.h) -ADD_DEFINITIONS(-include ${COMM_CONFIG}) ADD_DEFINITIONS(-include ${COMPLE_CONFIG}) ADD_DEFINITIONS(-D_GNU_SOURCE -DNSTACK_GETVER_VERSION="18.07") #LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC}) diff --git a/src/adapt/nstack_dmm_adpt.c b/src/adapt/nstack_dmm_adpt.c index d497b80..d8138d8 100644 --- a/src/adapt/nstack_dmm_adpt.c +++ b/src/adapt/nstack_dmm_adpt.c @@ -21,10 +21,8 @@ extern "C" { #endif /* __cplusplus */ #include "nsfw_init.h" -#include "nsfw_mem_api.h" #include "nsfw_recycle_api.h" #include "nsfw_mgr_com_api.h" -#include "nsfw_ps_mem_api.h" #include "nsfw_ps_api.h" #include "nsfw_recycle_api.h" #include "nsfw_fd_timer_api.h" @@ -34,6 +32,9 @@ extern "C" { #include "nstack_dmm_adpt.h" #include "mgr_com.h" +#include "dmm_sys.h" +#include "dmm_memory.h" + int g_same_process = 1; extern int nsep_adpt_attach_memory (); @@ -57,10 +58,9 @@ nstack_event_callback (void *pdata, int events) NSSOC_LOGDBG ("Got one event]fd=%d,events=%u", epInfo->fd, events); - sys_arch_lock_with_pid (&epInfo->epiLock); - struct list_node *fdEpiHead = - (struct list_node *) ADDR_SHTOL (epInfo->epiList.head); - struct list_node *node = (struct list_node *) ADDR_SHTOL (fdEpiHead->next); + dmm_spin_lock_pid (&epInfo->epiLock); + struct list_node *fdEpiHead = epInfo->epiList.head; + struct list_node *node = fdEpiHead->next; struct epitem *epi = NULL; struct eventpoll *ep = NULL; while (node) @@ -68,8 +68,8 @@ nstack_event_callback (void *pdata, int events) epi = (struct epitem *) ep_list_entry (node, struct epitem, fllink); - node = (struct list_node *) ADDR_SHTOL (node->next); - ep = (struct eventpoll *) ADDR_SHTOL (epi->ep); + node = node->next; + ep = epi->ep; if (!(epi->event.events & events)) continue; @@ -79,14 +79,14 @@ nstack_event_callback (void *pdata, int events) continue; } - sys_arch_lock_with_pid (&ep->lock); + dmm_spin_lock_pid (&ep->lock); if (unlikely (ep->ovflist != NSEP_EP_UNACTIVE_PTR)) { if (epi->next == NSEP_EP_UNACTIVE_PTR) { epi->next = ep->ovflist; - ep->ovflist = (struct epitem *) ADDR_LTOSH (epi); + ep->ovflist = epi; } epi->ovf_revents |= events; NSSOC_LOGDBG ("Add to ovflist]protoFD=%d,event=%d", epInfo->fd, @@ -100,9 +100,9 @@ nstack_event_callback (void *pdata, int events) } epi->revents |= (epi->event.events & events); out_unlock: - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); } - sys_sem_s_signal (&epInfo->epiLock); + dmm_spin_unlock (&epInfo->epiLock); /* [Remove fdInf->event_sem post] */ return 0; } @@ -110,16 +110,12 @@ nstack_event_callback (void *pdata, int events) int nstack_adpt_init (nstack_dmm_para * para) { - nsfw_mem_para stinfo = { 0 }; i32 init_ret = 0; if (!para) { return -1; } - stinfo.iargsnum = para->argc; - stinfo.pargs = para->argv; - stinfo.enflag = para->proc_type; if (para->deploy_type != NSTACK_MODEL_TYPE1 && para->deploy_type != NSTACK_MODEL_TYPE_SIMPLE_STACK) { @@ -128,15 +124,14 @@ nstack_adpt_init (nstack_dmm_para * para) nsfw_com_attr_set (para->attr.policy, para->attr.pri); - (void) nstack_framework_setModuleParam (NSFW_MEM_MGR_MODULE, &stinfo); + (void) nstack_framework_setModuleParam (DMM_MEMORY_MODULE, + (void *) ((u64) NSFW_PROC_MAIN)); (void) nstack_framework_setModuleParam (NSFW_MGR_COM_MODULE, (void *) ((u64) para->proc_type)); (void) nstack_framework_setModuleParam (NSFW_TIMER_MODULE, (void *) ((u64) para->proc_type)); (void) nstack_framework_setModuleParam (NSFW_PS_MODULE, (void *) ((u64) para->proc_type)); - (void) nstack_framework_setModuleParam (NSFW_PS_MEM_MODULE, - (void *) ((u64) para->proc_type)); (void) nstack_framework_setModuleParam (NSFW_RECYCLE_MODULE, (void *) ((u64) para->proc_type)); (void) nstack_framework_setModuleParam (NSFW_RES_MGR_MODULE, @@ -213,12 +208,11 @@ nstack_init_module (void *para) } NSFW_MODULE_NAME (NSTACK_DMM_MODULE) -NSFW_MODULE_PRIORITY (10) -NSFW_MODULE_DEPENDS (NSFW_MEM_MGR_MODULE) +NSFW_MODULE_PRIORITY (70) +NSFW_MODULE_DEPENDS (DMM_MEMORY_MODULE) NSFW_MODULE_DEPENDS (NSFW_MGR_COM_MODULE) NSFW_MODULE_DEPENDS (NSFW_TIMER_MODULE) NSFW_MODULE_DEPENDS (NSFW_PS_MODULE) -NSFW_MODULE_DEPENDS (NSFW_PS_MEM_MODULE) NSFW_MODULE_DEPENDS (NSFW_RECYCLE_MODULE) NSFW_MODULE_DEPENDS (NSFW_LOG_CFG_MODULE) NSFW_MODULE_DEPENDS (NSFW_RES_MGR_MODULE) diff --git a/src/adapt/nstack_epoll_comm.c b/src/adapt/nstack_epoll_comm.c index 219803c..4ee2a89 100644 --- a/src/adapt/nstack_epoll_comm.c +++ b/src/adapt/nstack_epoll_comm.c @@ -15,13 +15,15 @@ */ #include "nstack_eventpoll.h" -#include "nsfw_mem_api.h" #include "nstack_log.h" #include "nstack_securec.h" #include "nsfw_recycle_api.h" #include "nsfw_maintain_api.h" #include <stdio.h> +#include <errno.h> #include <stdlib.h> +#include "dmm_memory.h" +#include "dmm_sys.h" nsep_epollManager_t g_epollMng = { .infoSockMap = NULL, @@ -37,7 +39,7 @@ nsep_find_ep (struct eventpoll *ep, int fd) struct ep_rb_node *rbp; struct epitem *epi, *epir = NULL; u32_t loopCnt = 0; - for (rbp = ADDR_SHTOL (ep->rbr.rb_node); rbp;) + for (rbp = (ep->rbr.rb_node); rbp;) { ++loopCnt; if (loopCnt > NSTACK_MAX_EPITEM_NUM) @@ -46,11 +48,11 @@ nsep_find_ep (struct eventpoll *ep, int fd) epi = (struct epitem *) ep_rb_entry (rbp, struct epitem, rbn); if (fd > epi->fd) { - rbp = (struct ep_rb_node *) ADDR_SHTOL (rbp->rb_right); + rbp = (struct ep_rb_node *) (rbp->rb_right); } else if (fd < epi->fd) { - rbp = (struct ep_rb_node *) ADDR_SHTOL (rbp->rb_left); + rbp = (struct ep_rb_node *) (rbp->rb_left); } else { @@ -72,8 +74,7 @@ nstack_ep_unlink (struct eventpoll *ep, struct epitem *epi) { int error = ENOENT; - if (ep_rb_parent (&epi->rbn) == - (struct ep_rb_node *) ADDR_LTOSH_EXT (&epi->rbn)) + if (ep_rb_parent (&epi->rbn) == &epi->rbn) { NSSOC_LOGWAR ("ep_rb_parent == epi->rbn"); return error; @@ -111,7 +112,7 @@ nsep_free_epitem (struct epitem *data) return 0; } - if (nsfw_mem_ring_enqueue (pool->ring, (void *) epiEntry) != 1) + if (1 != dmm_enqueue (pool->ring, (void *) epiEntry)) { NSSOC_LOGERR ("Error to free epitem"); } @@ -123,15 +124,14 @@ nsep_initEpInfo (nsep_epollInfo_t * info) { int iindex = 0; EP_LIST_INIT (&info->epiList); - NSTACK_SEM_MALLOC (info->epiLock, 1); - NSTACK_SEM_MALLOC (info->freeLock, 1); + dmm_spin_init (&info->epiLock); + dmm_spin_init (&info->freeLock); info->rlfd = -1; info->rmidx = -1; info->fd = -1; info->ep = NULL; info->fdtype = 0; - info->private_data = NULL; info->epaddflag = 0; for (iindex = 0; iindex < NSEP_SMOD_MAX; iindex++) { @@ -162,7 +162,7 @@ nsep_alloc_epinfo (nsep_epollInfo_t ** data) NSSOC_LOGDBG ("epinfo alloc begin"); nsep_infoPool_t *pool = &nsep_getManager ()->infoPool; - if (0 == nsfw_mem_ring_dequeue (pool->ring, (void *) &head_info) + if (1 != dmm_dequeue (pool->ring, (void **) &head_info) || NULL == head_info) { NSSOC_LOGERR ("epinfo ring alloc failed]pool->ring=%p", pool->ring); @@ -206,7 +206,7 @@ nsep_free_epinfo (nsep_epollInfo_t * info) return 0; } - if (nsfw_mem_ring_enqueue (pool->ring, (void *) info) != 1) + if (1 != dmm_enqueue (pool->ring, (void *) info)) { NSSOC_LOGERR ("Error to free epinfo"); } @@ -282,8 +282,8 @@ nsep_init_eventpoll (struct eventpoll *ep) return -1; } - NSTACK_SEM_MALLOC (ep->lock, 1); - NSTACK_SEM_MALLOC (ep->sem, 1); + dmm_spin_init (&ep->lock); + dmm_spin_init (&ep->sem); EP_HLIST_INIT (&ep->rdlist); ep->ovflist = NSEP_EP_UNACTIVE_PTR; @@ -321,7 +321,7 @@ nsep_free_eventpoll (struct eventpoll *ep) return 0; } - if (nsfw_mem_ring_enqueue (pool->ring, epEntry) != 1) + if (1 != dmm_enqueue (pool->ring, epEntry)) { NSSOC_LOGERR ("Error to free eventpoll"); } @@ -342,8 +342,7 @@ nsep_alloc_eventpoll (struct eventpoll **data) struct eventpoll_pool *pool = &nsep_getManager ()->epollPool; NSSOC_LOGDBG ("ring:%p alloc eventpool begin", pool->ring); - if (0 == nsfw_mem_ring_dequeue (pool->ring, (void *) &p_head) - || NULL == p_head) + if (1 != dmm_dequeue (pool->ring, (void **) &p_head) || NULL == p_head) { NSSOC_LOGERR ("ring alloc eventpool failed]ring=%p", pool->ring); return -1; @@ -371,7 +370,7 @@ NSTACK_STATIC int nsep_init_epitem (struct epitem *epi) { int retVal; - epi->rbn.rb_parent = (struct ep_rb_node *) ADDR_LTOSH_EXT (&epi->rbn); + epi->rbn.rb_parent = &epi->rbn; EP_HLIST_INIT_NODE (&epi->rdllink); EP_HLIST_INIT_NODE (&epi->lkFDllink); epi->nwait = 0; @@ -389,7 +388,7 @@ nsep_init_epitem (struct epitem *epi) epi->revents = 0; epi->ovf_revents = 0; epi->fd = -1; - epi->private_data = NULL; + epi->epInfo = NULL; return 0; } @@ -408,8 +407,8 @@ nsep_alloc_epitem (struct epitem **data) NSSOC_LOGDBG ("epitem alloc begin.."); - if (0 == nsfw_mem_ring_dequeue (pool->ring, (void *) &p_head_entry) - || NULL == p_head_entry) + if (1 != dmm_dequeue (pool->ring, (void **) &p_head_entry) || + NULL == p_head_entry) { NSSOC_LOGERR ("epitem ring alloc failed]ring=%p", pool->ring); return -1; @@ -418,7 +417,7 @@ nsep_alloc_epitem (struct epitem **data) res_alloc (&p_head_entry->res_chk); p_head_entry->pid = get_sys_pid (); - if (nsep_init_epitem ((struct epitem *) p_head_entry)) + if (nsep_init_epitem (p_head_entry)) { (void) nsep_free_epitem ((struct epitem *) p_head_entry); p_head_entry = NULL; @@ -457,7 +456,7 @@ nsep_epPoolInit (void *addr, size_t length) for (pos = 0; pos < NSTACK_MAX_EPOLL_INFO_NUM; pos++) { pool[pos].pid = 0; - if (-1 == nsfw_mem_ring_enqueue (manager->epollPool.ring, &pool[pos])) + if (1 != dmm_enqueue (manager->epollPool.ring, &pool[pos])) { NSSOC_LOGERR ("init fail to enqueue epitem]pos=%u", pos); return -1; @@ -488,7 +487,7 @@ nsep_epitemPoolInit (void *addr, size_t length) for (pos = 0; pos < NSTACK_MAX_EPITEM_NUM; pos++) { pool[pos].pid = 0; - if (-1 == nsfw_mem_ring_enqueue (manager->epitemPool.ring, &pool[pos])) + if (1 != dmm_enqueue (manager->epitemPool.ring, &pool[pos])) { NSSOC_LOGERR ("init fail to enqueue epitem]pos=%u", pos); return -1; @@ -524,7 +523,7 @@ nsep_epInfoPoolInit (void *addr, size_t length) return -1; } - if (-1 == nsfw_mem_ring_enqueue (manager->infoPool.ring, &pool[pos])) + if (1 != dmm_enqueue (manager->infoPool.ring, &pool[pos])) { NSSOC_LOGERR ("init fail to enqueue epInfo]pos=%u", pos); return -1; @@ -538,30 +537,15 @@ nsep_epInfoPoolInit (void *addr, size_t length) NSTACK_STATIC int nsep_create_shmem (size_t length, char *name, nsep_shem_initFn_t initFn) { - nsfw_mem_zone pmeminfo; - mzone_handle phandle; - int ret; + void *mem = dmm_locked_map (length, name); - pmeminfo.ireserv = 0; - pmeminfo.isocket_id = NSFW_SOCKET_ANY; - pmeminfo.length = length; - ret = - STRCPY_S (pmeminfo.stname.aname, sizeof (pmeminfo.stname.aname), name); - if (EOK != ret) - { - NSSOC_LOGERR ("STRCPY_S failed]name=%s,ret=%d", name, ret); - return -1; - } - pmeminfo.stname.entype = NSFW_SHMEM; - - phandle = nsfw_mem_zone_create (&pmeminfo); - if (NULL == phandle) + if (!mem) { NSSOC_LOGERR ("create nstack epoll memory failed]name=%s", name); return -1; } - if (0 != initFn ((void *) phandle, length)) + if (0 != initFn (mem, length)) { NSSOC_LOGERR ("Fail to init memory]name=%s", name); return -1; @@ -573,25 +557,13 @@ nsep_create_shmem (size_t length, char *name, nsep_shem_initFn_t initFn) NSTACK_STATIC int nsep_create_epInfoMem () { - nsfw_mem_mring pringinfo; - pringinfo.enmptype = NSFW_MRING_MPMC; - pringinfo.isocket_id = NSFW_SOCKET_ANY; - pringinfo.stname.entype = NSFW_SHMEM; - pringinfo.usnum = NSTACK_MAX_EPOLL_INFO_NUM; - - if (-1 == - SPRINTF_S (pringinfo.stname.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EPINFO_RING_NAME)) - { - NSSOC_LOGERR ("Error to create ring]name=%s", pringinfo.stname.aname); - return -1; - } - - mring_handle ring_handle = nsfw_mem_ring_create (&pringinfo); - + struct dmm_ring *ring_handle = + dmm_create_ring (NSTACK_MAX_EPOLL_INFO_NUM, DMM_RING_INIT_MPMC, + MP_NSTACK_EPINFO_RING_NAME); if (NULL == ring_handle) { - NSSOC_LOGERR ("Error to create ring]name=%s", pringinfo.stname.aname); + NSSOC_LOGERR ("Error to create ring]name=%s", + MP_NSTACK_EPINFO_RING_NAME); return -1; } @@ -606,36 +578,18 @@ nsep_create_epInfoMem () NSTACK_STATIC int nsep_adpt_attach_epInfoMem () { - nsfw_mem_name name; - name.entype = NSFW_SHMEM; - name.enowner = NSFW_PROC_MAIN; - - if (-1 == - SPRINTF_S (name.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EPINFO_RING_NAME)) - { - NSSOC_LOGERR ("Error to attach ring]name=%s", name.aname); - return -1; - } - mring_handle ring_handle = nsfw_mem_ring_lookup (&name); - + struct dmm_ring *ring_handle = dmm_lookup (MP_NSTACK_EPINFO_RING_NAME); if (NULL == ring_handle) { - NSSOC_LOGERR ("Error to attach ring]name=%s", name.aname); + NSSOC_LOGERR ("Error to attach ring]name=%s", + MP_NSTACK_EPINFO_RING_NAME); return -1; } nsep_epollManager_t *manager = nsep_getManager (); manager->infoPool.ring = ring_handle; - if (-1 == - SPRINTF_S (name.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EPOLL_INFO_NAME)) - { - NSSOC_LOGERR ("SPRINTF_S failed]"); - return -1; - } - manager->infoPool.pool = nsfw_mem_zone_lookup (&name); + manager->infoPool.pool = dmm_lookup (MP_NSTACK_EPOLL_INFO_NAME); if (NULL == manager->infoPool.pool) { NSSOC_LOGERR ("Error to attach memzone]name=%s", @@ -648,25 +602,14 @@ nsep_adpt_attach_epInfoMem () NSTACK_STATIC int nsep_create_epItemMem () { - nsfw_mem_mring pringinfo; - pringinfo.enmptype = NSFW_MRING_MPMC; - pringinfo.isocket_id = NSFW_SOCKET_ANY; - pringinfo.stname.entype = NSFW_SHMEM; - pringinfo.usnum = NSTACK_MAX_EPITEM_NUM; - - if (-1 == - SPRINTF_S (pringinfo.stname.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EPITEM_RING_NAME)) - { - NSSOC_LOGERR ("Error to create ring]name=%s", pringinfo.stname.aname); - return -1; - } - - mring_handle ring_handle = nsfw_mem_ring_create (&pringinfo); + struct dmm_ring *ring_handle = + dmm_create_ring (NSTACK_MAX_EPITEM_NUM, DMM_RING_INIT_MPMC, + MP_NSTACK_EPITEM_RING_NAME); if (NULL == ring_handle) { - NSSOC_LOGERR ("Error to create ring]name=%s", pringinfo.stname.aname); + NSSOC_LOGERR ("Error to create ring]name=%s", + MP_NSTACK_EPITEM_RING_NAME); return -1; } @@ -680,37 +623,19 @@ nsep_create_epItemMem () NSTACK_STATIC int nsep_adpt_attach_epItemMem () { - nsfw_mem_name name; - name.entype = NSFW_SHMEM; - name.enowner = NSFW_PROC_MAIN; - - if (-1 == - SPRINTF_S (name.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EPITEM_RING_NAME)) - { - NSSOC_LOGERR ("Error to attach epItemMem]name=%s", name.aname); - return -1; - } - - mring_handle ring_handle = nsfw_mem_ring_lookup (&name); + struct dmm_ring *ring_handle = dmm_lookup (MP_NSTACK_EPITEM_RING_NAME); if (NULL == ring_handle) { - NSSOC_LOGERR ("Error to attach ring]name=%s", name.aname); + NSSOC_LOGERR ("Error to attach ring]name=%s", + MP_NSTACK_EPITEM_RING_NAME); return -1; } nsep_epollManager_t *manager = nsep_getManager (); manager->epitemPool.ring = ring_handle; - if (-1 == - SPRINTF_S (name.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EPITEM_POOL)) - { - NSSOC_LOGERR ("SPRINTF_S failed]"); - return -1; - } - manager->epitemPool.pool = nsfw_mem_zone_lookup (&name); + manager->epitemPool.pool = dmm_lookup (MP_NSTACK_EPITEM_POOL); if (NULL == manager->epitemPool.pool) { NSSOC_LOGERR ("Error to attach memzone]name=%s", MP_NSTACK_EPITEM_POOL); @@ -722,25 +647,14 @@ nsep_adpt_attach_epItemMem () NSTACK_STATIC int nsep_create_eventpollMem () { - nsfw_mem_mring pringinfo; - pringinfo.enmptype = NSFW_MRING_MPMC; - pringinfo.isocket_id = NSFW_SOCKET_ANY; - pringinfo.stname.entype = NSFW_SHMEM; - pringinfo.usnum = NSTACK_MAX_EPOLL_NUM; - - if (-1 == - SPRINTF_S (pringinfo.stname.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EVENTPOOL_RING_NAME)) - { - NSSOC_LOGERR ("Error to create ring]name=%s", pringinfo.stname.aname); - return -1; - } - - mring_handle ring_handle = nsfw_mem_ring_create (&pringinfo); + struct dmm_ring *ring_handle = + dmm_create_ring (NSTACK_MAX_EPOLL_NUM, DMM_RING_INIT_MPMC, + MP_NSTACK_EVENTPOOL_RING_NAME); if (NULL == ring_handle) { - NSSOC_LOGERR ("Error to create ring]name=%s", pringinfo.stname.aname); + NSSOC_LOGERR ("Error to create ring]name=%s", + MP_NSTACK_EVENTPOOL_RING_NAME); return -1; } @@ -754,37 +668,17 @@ nsep_create_eventpollMem () NSTACK_STATIC int nsep_adpt_attach_eventpollMem () { - nsfw_mem_name name; - name.entype = NSFW_SHMEM; - name.enowner = NSFW_PROC_MAIN; - - if (-1 == - SPRINTF_S (name.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EVENTPOOL_RING_NAME)) - { - NSSOC_LOGERR ("Error to attach ring]name=%s", name.aname); - return -1; - } - - mring_handle ring_handle = nsfw_mem_ring_lookup (&name); - - if (NULL == ring_handle) - { - NSSOC_LOGERR ("Error to create ring]name=%s", name.aname); - return -1; - } - nsep_epollManager_t *manager = nsep_getManager (); - manager->epollPool.ring = ring_handle; - int retVal = SPRINTF_S (name.aname, NSFW_MEM_NAME_LENGTH, "%s", - MP_NSTACK_EVENTPOLL_POOL); - if (-1 == retVal) + manager->epollPool.ring = dmm_lookup (MP_NSTACK_EVENTPOOL_RING_NAME); + if (NULL == manager->epollPool.ring) { - NSSOC_LOGERR ("SPRINTF_S failed]ret=%d", retVal); + NSSOC_LOGERR ("Error to create ring]name=%s", + MP_NSTACK_EVENTPOOL_RING_NAME); return -1; } - manager->epollPool.pool = nsfw_mem_zone_lookup (&name); + + manager->epollPool.pool = dmm_lookup (MP_NSTACK_EVENTPOLL_POOL); if (NULL == manager->epollPool.pool) { NSSOC_LOGERR ("Error to attach memzone]name=%s", @@ -841,6 +735,7 @@ nsep_adpt_attach_memory () int nsep_adpt_reg_res_mgr () { +/* disable these operation nsep_epollManager_t *manager = nsep_getManager (); @@ -874,6 +769,7 @@ nsep_adpt_reg_res_mgr () (void) nsfw_res_mgr_reg (&scn_cfg_info); (void) nsfw_res_mgr_reg (&scn_cfg_item); (void) nsfw_res_mgr_reg (&scn_cfg_event); +*/ return 0; } @@ -885,10 +781,11 @@ nsep_epitem_remove (nsep_epollInfo_t * pinfo, u32 pid) struct epitem *epi = NULL; u32_t i = 0; int icnt = 0; - (void) sys_arch_lock_with_pid (&pinfo->epiLock); + + dmm_spin_lock_pid (&pinfo->epiLock); /*list head must be not null */ - prenode = (struct list_node *) ADDR_SHTOL (pinfo->epiList.head); - nextnode = (struct list_node *) ADDR_SHTOL (prenode->next); + prenode = (struct list_node *) (pinfo->epiList.head); + nextnode = (struct list_node *) (prenode->next); while ((nextnode) && (i++ <= NSTACK_MAX_EPOLL_INFO_NUM)) { epi = ep_list_entry (nextnode, struct epitem, fllink); @@ -898,14 +795,14 @@ nsep_epitem_remove (nsep_epollInfo_t * pinfo, u32 pid) prenode->next = nextnode->next; nextnode->next = NULL; (void) nsep_free_epitem (epi); - nextnode = ADDR_SHTOL (prenode->next); + nextnode = (prenode->next); icnt++; continue; } prenode = nextnode; - nextnode = ADDR_SHTOL (nextnode->next); + nextnode = (nextnode->next); } - sys_sem_s_signal (&pinfo->epiLock); + dmm_spin_unlock (&pinfo->epiLock); if (i >= NSTACK_MAX_EPOLL_INFO_NUM) { NSSOC_LOGERR ("free pinfo:%p pid:%u, error maybe happen", pinfo, pid); @@ -925,9 +822,9 @@ nsep_recycle_epfd (void *epinfo, u32 pid) NSSOC_LOGDBG ("input null, pid:%u", pid); return; } - (void) sys_arch_lock_with_pid (&info->freeLock); + (void) dmm_spin_lock_pid (&info->freeLock); ileftcnt = nsep_del_last_pid (&info->pidinfo, pid); - sys_sem_s_signal (&info->freeLock); + dmm_spin_unlock (&info->freeLock); /*no pid exist */ if (-1 == ileftcnt) { @@ -938,7 +835,7 @@ nsep_recycle_epfd (void *epinfo, u32 pid) NSSOC_LOGDBG ("recycle epfd:%d epinfo pid:%u begin...", info->fd, pid); if (0 == ileftcnt) { - ep = ADDR_SHTOL (info->ep); + ep = (info->ep); info->ep = NULL; (void) nsep_free_eventpoll (ep); (void) nsep_free_epinfo (info); @@ -1036,14 +933,14 @@ NSTACK_STATIC { for (pos = 0; pos < NSTACK_MAX_EPOLL_INFO_NUM; pos++) { - if (pid == pool[pos].epiLock.locked) + if (pid == pool[pos].epiLock.lock) { - pool[pos].epiLock.locked = 0; + pool[pos].epiLock.lock = 0; NSFW_LOGWAR ("epiLock locked]pos=%u,pid=%u", pos, pid); } - if (pid == pool[pos].freeLock.locked) + if (pid == pool[pos].freeLock.lock) { - pool[pos].freeLock.locked = 0; + pool[pos].freeLock.lock = 0; NSFW_LOGWAR ("freelock locked]pos=%u,pid=%u", pos, pid); } } @@ -1054,15 +951,15 @@ NSTACK_STATIC { for (pos = 0; pos < NSTACK_MAX_EPOLL_NUM; pos++) { - if (pid == ev_pool[pos].lock.locked) + if (pid == ev_pool[pos].lock.lock) { - ev_pool[pos].lock.locked = 0; + ev_pool[pos].lock.lock = 0; NSFW_LOGWAR ("event_pollLock locked]pos=%u,pid=%u", pos, pid); } - if (pid == ev_pool[pos].sem.locked) + if (pid == ev_pool[pos].sem.lock) { - ev_pool[pos].sem.locked = 0; + ev_pool[pos].sem.lock = 0; NSFW_LOGWAR ("event_pollLock sem]pos=%u,pid=%u", pos, pid); } } diff --git a/src/adapt/nstack_share_res.c b/src/adapt/nstack_share_res.c index 9466145..a42a8a1 100644 --- a/src/adapt/nstack_share_res.c +++ b/src/adapt/nstack_share_res.c @@ -15,7 +15,6 @@ */ #include "nstack_share_res.h" -#include "nsfw_mem_api.h" #include "types.h" #include "nsfw_recycle_api.h" #include "nstack_securec.h" @@ -23,49 +22,30 @@ #include "nsfw_maintain_api.h" #include "nstack_types.h" +#include "dmm_memory.h" + #define NSTACK_SHARE_FORK_LOCK "share_fork_lock" typedef struct { - common_mem_spinlock_t *fork_share_lock; + dmm_spinlock_t *fork_share_lock; } nstack_share_res; NSTACK_STATIC nstack_share_res g_nstack_share_res; -/** global timer tick */ -nstack_tick_info_t g_nstack_timer_tick; - NSTACK_STATIC int nstack_create_share_fork_lock () { - mzone_handle zone; - nsfw_mem_zone param; - int ret; - - param.isocket_id = -1; - param.length = sizeof (common_mem_spinlock_t); - param.stname.entype = NSFW_SHMEM; - - ret = - STRCPY_S (param.stname.aname, NSFW_MEM_NAME_LENGTH, - NSTACK_SHARE_FORK_LOCK); - if (EOK != ret) - { - NSSOC_LOGERR ("STRCPY_S failed]name=%s,ret=%d", NSTACK_SHARE_FORK_LOCK, - ret); - return -1; - } - - zone = nsfw_mem_zone_create (¶m); - if (!zone) + g_nstack_share_res.fork_share_lock = (dmm_spinlock_t *) + dmm_locked_map (sizeof (dmm_spinlock_t), NSTACK_SHARE_FORK_LOCK); + if (!g_nstack_share_res.fork_share_lock) { NSSOC_LOGERR ("nsfw_mem_zone_create failed]name=%s", NSTACK_SHARE_FORK_LOCK); return -1; } - g_nstack_share_res.fork_share_lock = (common_mem_spinlock_t *) zone; - common_mem_spinlock_init (g_nstack_share_res.fork_share_lock); + dmm_spin_init (g_nstack_share_res.fork_share_lock); NSSOC_LOGDBG ("ok"); return 0; @@ -74,58 +54,20 @@ nstack_create_share_fork_lock () NSTACK_STATIC int nstack_lookup_share_fork_lock () { - mzone_handle zone; - nsfw_mem_name param; - - param.entype = NSFW_SHMEM; - param.enowner = NSFW_PROC_MAIN; - if (STRCPY_S (param.aname, NSFW_MEM_NAME_LENGTH, NSTACK_SHARE_FORK_LOCK) != - 0) - { - NSSOC_LOGERR ("STRCPY_S failed]name=%s", NSTACK_SHARE_FORK_LOCK); - return -1; - } - - zone = nsfw_mem_zone_lookup (¶m); - if (!zone) + g_nstack_share_res.fork_share_lock = (dmm_spinlock_t *) + dmm_lookup (NSTACK_SHARE_FORK_LOCK); + if (!g_nstack_share_res.fork_share_lock) { NSSOC_LOGERR ("nsfw_mem_zone_lookup failed]name=%s", NSTACK_SHARE_FORK_LOCK); return -1; } - g_nstack_share_res.fork_share_lock = (common_mem_spinlock_t *) zone; - NSSOC_LOGDBG ("ok"); return 0; } -NSTACK_STATIC int -nstack_lookup_share_global_tick () -{ - int ret; - nsfw_mem_name name = {.entype = NSFW_SHMEM,.enowner = NSFW_PROC_MAIN }; - - ret = STRCPY_S (name.aname, NSFW_MEM_NAME_LENGTH, NSTACK_GLOBAL_TICK_SHM); - if (EOK != ret) - { - NSSOC_LOGERR ("STRCPY_S failed]name=%s,ret=%d", NSTACK_GLOBAL_TICK_SHM, - ret); - return -1; - } - - g_nstack_timer_tick.tick_ptr = (u64_t *) nsfw_mem_zone_lookup (&name); - if (NULL == g_nstack_timer_tick.tick_ptr) - { - NSPOL_LOGERR ("Failed to lookup global timer tick memory"); - return -1; - } - - NSSOC_LOGDBG ("ok"); - return 0; -} - int nstack_init_share_res () { @@ -144,16 +86,16 @@ nstack_attach_share_res () { return -1; } - +#if 0 if (nstack_lookup_share_global_tick () != 0) { return -1; } - +#endif return 0; } -common_mem_spinlock_t * +dmm_spinlock_t * nstack_get_fork_share_lock () { return g_nstack_share_res.fork_share_lock; @@ -165,9 +107,9 @@ nstack_recycle_fork_share_lock (u32 exit_pid, void *pdata, u16 rec_type) NSSOC_LOGDBG ("recycle]pid=%u", exit_pid); if (g_nstack_share_res.fork_share_lock - && (g_nstack_share_res.fork_share_lock->locked == exit_pid)) + && (g_nstack_share_res.fork_share_lock->lock == exit_pid)) { - common_mem_spinlock_unlock (g_nstack_share_res.fork_share_lock); + dmm_spin_unlock (g_nstack_share_res.fork_share_lock); } return NSFW_RCC_CONTINUE; diff --git a/src/adapt/nstack_share_res.h b/src/adapt/nstack_share_res.h index 2737730..1a6112a 100644 --- a/src/adapt/nstack_share_res.h +++ b/src/adapt/nstack_share_res.h @@ -18,9 +18,8 @@ #define NSTACK_SHARE_RES_H #include <stdint.h> -#include "common_mem_spinlock.h" #include "nstack_log.h" -#include "common_func.h" +#include "dmm_spinlock.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -43,19 +42,9 @@ typedef struct unmatch_ver_info char first_time_stamp[LOG_TIME_STAMP_LEN]; } unmatch_ver_info_t; -#define DFX_TMR_INTERVAL 60000 /*60 seconds */ -typedef struct nstack_tick_info -{ - uint64_t *tick_ptr; // tick from shared memory - uint64_t interval; // tick interval, only used in stack process - /* tick reference, updated periodically and read in tcpip_thread only */ - struct timeval ref_time; // ref tick time - uint64_t ref_tick; // ref tick -} nstack_tick_info_t; - int nstack_init_share_res (); int nstack_attach_share_res (); -common_mem_spinlock_t *nstack_get_fork_share_lock (); +dmm_spinlock_t *nstack_get_fork_share_lock (); #ifdef __cplusplus /* *INDENT-OFF* */ diff --git a/src/framework/CMakeLists.txt b/src/framework/CMakeLists.txt index 6b22e51..4d49cdb 100644 --- a/src/framework/CMakeLists.txt +++ b/src/framework/CMakeLists.txt @@ -14,12 +14,6 @@ # limitations under the License. ######################################################################### -if(WITH_HAL_LIB) -else() - SET(PAL_H_DIRECTORIES "/usr/include/dpdk/") - FILE(GLOB_RECURSE LIBCOMM lib_common_mem/*.c) -endif() - FILE(GLOB_RECURSE COMMON common/*.c) FILE(GLOB INIT init/*.c) FILE(GLOB_RECURSE IPC ipc/*.c) @@ -30,11 +24,12 @@ FILE(GLOB MAINTAIN maintain/*.c) FILE(GLOB HAL hal/*.c) FILE(GLOB DMM_ADPT ../adapt/*.c) FILE(GLOB MEM mem/*.c) +FILE(GLOB RING ring/*.c) ADD_LIBRARY(dmm_api SHARED ${COMMON} ${INIT} ${IPC} ${LOG} ${SNAPSHOT} ${STARTUP} ${MAINTAIN} ${TRACEING} ${HAL} - ${DMM_ADPT} ${LIBCOMM} ${MEM}) + ${DMM_ADPT} ${LIBCOMM} ${MEM} ${RING}) if(WITH_SECUREC_LIB) ADD_DEPENDENCIES(dmm_api SECUREC JSON GLOG) @@ -50,9 +45,8 @@ INCLUDE_DIRECTORIES( ipc/mgr_com/ hal/ include/ - common/base/include/generic + ring common/base/include/ - ${PAL_H_DIRECTORIES} common/base/liblinuxapi/ common/mem_mgr/include common/mem_mgr/nsfw_shmem/ diff --git a/src/framework/common/base/liblinuxapi/nsfw_lock_file.c b/src/framework/common/base/liblinuxapi/nsfw_lock_file.c index abfbfd1..cdfb0b7 100644 --- a/src/framework/common/base/liblinuxapi/nsfw_lock_file.c +++ b/src/framework/common/base/liblinuxapi/nsfw_lock_file.c @@ -23,8 +23,6 @@ #include "types.h" #include "nstack_securec.h" #include "nsfw_init.h" -#include "common_mem_api.h" - #include "nstack_log.h" #include "nsfw_maintain_api.h" #include "nsfw_mgr_com_api.h" diff --git a/src/framework/common/data_struct/eprb_tree.c b/src/framework/common/data_struct/eprb_tree.c index c8e616d..3697313 100644 --- a/src/framework/common/data_struct/eprb_tree.c +++ b/src/framework/common/data_struct/eprb_tree.c @@ -32,7 +32,7 @@ ep_rb_first (const struct ep_rb_root *root) return NULL; struct ep_rb_node *n; - n = (struct ep_rb_node *) ADDR_SHTOL (root->rb_node); + n = root->rb_node; if (!n) { @@ -41,7 +41,7 @@ ep_rb_first (const struct ep_rb_root *root) while (n->rb_left) { - n = (struct ep_rb_node *) ADDR_SHTOL (n->rb_left); + n = n->rb_left; } return n; @@ -53,15 +53,14 @@ __ep_rb_rotate_left (struct ep_rb_node *X, struct ep_rb_root *root) /************************** * rotate Node X to left * **************************/ - struct ep_rb_node *Y = (struct ep_rb_node *) ADDR_SHTOL (X->rb_right); + struct ep_rb_node *Y = X->rb_right; /* establish X->Right link */ X->rb_right = Y->rb_left; if (Y->rb_left != NULL) { - ((struct ep_rb_node *) ADDR_SHTOL (Y->rb_left))->rb_parent = - (struct ep_rb_node *) ADDR_LTOSH_EXT (X); + Y->rb_left->rb_parent = X; } /* establish Y->Parent link */ @@ -69,26 +68,25 @@ __ep_rb_rotate_left (struct ep_rb_node *X, struct ep_rb_root *root) if (X->rb_parent) { - struct ep_rb_node *xParent = - (struct ep_rb_node *) ADDR_SHTOL (X->rb_parent); + struct ep_rb_node *xParent = X->rb_parent; - if (X == ADDR_SHTOL (xParent->rb_left)) + if (X == xParent->rb_left) { - xParent->rb_left = (struct ep_rb_node *) ADDR_LTOSH_EXT (Y); + xParent->rb_left = Y; } else { - xParent->rb_right = (struct ep_rb_node *) ADDR_LTOSH_EXT (Y); + xParent->rb_right = Y; } } else { - root->rb_node = (struct ep_rb_node *) ADDR_LTOSH_EXT (Y); + root->rb_node = Y; } /* link X and Y */ - Y->rb_left = (struct ep_rb_node *) ADDR_LTOSH_EXT (X); - X->rb_parent = (struct ep_rb_node *) ADDR_LTOSH_EXT (Y); + Y->rb_left = X; + X->rb_parent = Y; return; } @@ -99,15 +97,14 @@ __ep_rb_rotate_right (struct ep_rb_node *X, struct ep_rb_root *root) /**************************** * rotate Node X to right * ****************************/ - struct ep_rb_node *Y = (struct ep_rb_node *) ADDR_SHTOL (X->rb_left); + struct ep_rb_node *Y = X->rb_left; /* establish X->Left link */ X->rb_left = Y->rb_right; if (Y->rb_right != NULL) { - ((struct ep_rb_node *) ADDR_SHTOL (Y->rb_right))->rb_parent = - (struct ep_rb_node *) ADDR_LTOSH_EXT (X); + Y->rb_right->rb_parent = X; } /* establish Y->Parent link */ @@ -115,31 +112,30 @@ __ep_rb_rotate_right (struct ep_rb_node *X, struct ep_rb_root *root) if (X->rb_parent) { - struct ep_rb_node *xParent = - (struct ep_rb_node *) ADDR_SHTOL (X->rb_parent); + struct ep_rb_node *xParent = X->rb_parent; - if (X == (struct ep_rb_node *) ADDR_SHTOL (xParent->rb_right)) + if (X == xParent->rb_right) { - xParent->rb_right = (struct ep_rb_node *) ADDR_LTOSH_EXT (Y); + xParent->rb_right = Y; } else { - xParent->rb_left = (struct ep_rb_node *) ADDR_LTOSH_EXT (Y); + xParent->rb_left = Y; } } else { - root->rb_node = (struct ep_rb_node *) ADDR_LTOSH_EXT (Y); + root->rb_node = Y; } /* link X and Y */ - Y->rb_right = (struct ep_rb_node *) ADDR_LTOSH_EXT (X); - X->rb_parent = (struct ep_rb_node *) ADDR_LTOSH_EXT (Y); + Y->rb_right = X; + X->rb_parent = Y; return; } -#define EP_RBTREE_PARENT(X) ((struct ep_rb_node*) ADDR_SHTOL((X)->rb_parent)) +#define EP_RBTREE_PARENT(X) ((X)->rb_parent) #define EP_RBTREE_GRANDF(X) EP_RBTREE_PARENT(EP_RBTREE_PARENT(X)) /* X, Y are for application */ @@ -151,14 +147,12 @@ ep_rb_insert_color (struct ep_rb_node *X, struct ep_rb_root *root) * after inserting node X * *************************************/ /* check red-black properties */ - while (X != (struct ep_rb_node *) ADDR_SHTOL (root->rb_node) - && EP_RBTREE_PARENT (X)->color == EP_RB_RED) + while (X != root->rb_node && EP_RBTREE_PARENT (X)->color == EP_RB_RED) { /* we have a violation */ if (X->rb_parent == EP_RBTREE_GRANDF (X)->rb_left) { - struct ep_rb_node *Y = - (struct ep_rb_node *) ADDR_SHTOL (EP_RBTREE_GRANDF (X)->rb_right); + struct ep_rb_node *Y = EP_RBTREE_GRANDF (X)->rb_right; if (Y && Y->color == EP_RB_RED) { @@ -173,9 +167,7 @@ ep_rb_insert_color (struct ep_rb_node *X, struct ep_rb_root *root) { /* uncle is black */ - if (X == - (struct ep_rb_node *) - ADDR_SHTOL (EP_RBTREE_PARENT (X)->rb_right)) + if (X == EP_RBTREE_PARENT (X)->rb_right) { /* make X a left child */ X = EP_RBTREE_PARENT (X); @@ -191,8 +183,7 @@ ep_rb_insert_color (struct ep_rb_node *X, struct ep_rb_root *root) else { /* mirror image of above code */ - struct ep_rb_node *Y = - (struct ep_rb_node *) ADDR_SHTOL (EP_RBTREE_GRANDF (X)->rb_left); + struct ep_rb_node *Y = EP_RBTREE_GRANDF (X)->rb_left; if (Y && (Y->color == EP_RB_RED)) { @@ -207,9 +198,7 @@ ep_rb_insert_color (struct ep_rb_node *X, struct ep_rb_root *root) { /* uncle is black */ - if (X == - (struct ep_rb_node *) - ADDR_SHTOL (EP_RBTREE_PARENT (X)->rb_left)) + if (X == EP_RBTREE_PARENT (X)->rb_left) { X = EP_RBTREE_PARENT (X); __ep_rb_rotate_right (X, root); @@ -222,7 +211,7 @@ ep_rb_insert_color (struct ep_rb_node *X, struct ep_rb_root *root) } } - ((struct ep_rb_node *) ADDR_SHTOL (root->rb_node))->color = EP_RB_BLACK; + root->rb_node->color = EP_RB_BLACK; return; } @@ -235,8 +224,7 @@ __ep_rb_erase_color (struct ep_rb_node *X, struct ep_rb_node *Parent, * maintain red-black tree balance * * after deleting node X * *************************************/ - while (X != (struct ep_rb_node *) ADDR_SHTOL (root->rb_node) - && (!X || X->color == EP_RB_BLACK)) + while (X != root->rb_node && (!X || X->color == EP_RB_BLACK)) { if (Parent == NULL) @@ -244,117 +232,96 @@ __ep_rb_erase_color (struct ep_rb_node *X, struct ep_rb_node *Parent, break; } - if (X == (struct ep_rb_node *) ADDR_SHTOL (Parent->rb_left)) + if (X == Parent->rb_left) { - struct ep_rb_node *W = - (struct ep_rb_node *) ADDR_SHTOL (Parent->rb_right); + struct ep_rb_node *W = Parent->rb_right; if (W->color == EP_RB_RED) { W->color = EP_RB_BLACK; Parent->color = EP_RB_RED; /* Parent != NIL? */ __ep_rb_rotate_left (Parent, root); - W = (struct ep_rb_node *) ADDR_SHTOL (Parent->rb_right); + W = Parent->rb_right; } - if ((!W->rb_left - || ((struct ep_rb_node *) ADDR_SHTOL (W->rb_left))->color == - EP_RB_BLACK) && (!W->rb_right - || ((struct ep_rb_node *) - ADDR_SHTOL (W->rb_right))->color == - EP_RB_BLACK)) + if ((!W->rb_left || W->rb_left->color == EP_RB_BLACK) + && (!W->rb_right || W->rb_right->color == EP_RB_BLACK)) { W->color = EP_RB_RED; X = Parent; - Parent = (struct ep_rb_node *) ADDR_SHTOL (X->rb_parent); + Parent = X->rb_parent; } else { - if (!W->rb_right - || ((struct ep_rb_node *) ADDR_SHTOL (W->rb_right))->color - == EP_RB_BLACK) + if (!W->rb_right || W->rb_right->color == EP_RB_BLACK) { if (W->rb_left != NULL) { - ((struct ep_rb_node *) ADDR_SHTOL (W->rb_left))->color - = EP_RB_BLACK; + W->rb_left->color = EP_RB_BLACK; } W->color = EP_RB_RED; __ep_rb_rotate_right (W, root); - W = (struct ep_rb_node *) ADDR_SHTOL (Parent->rb_right); + W = Parent->rb_right; } W->color = Parent->color; Parent->color = EP_RB_BLACK; - if (((struct ep_rb_node *) ADDR_SHTOL (W->rb_right))->color != - EP_RB_BLACK) + if (W->rb_right->color != EP_RB_BLACK) { - ((struct ep_rb_node *) ADDR_SHTOL (W->rb_right))->color = - EP_RB_BLACK; + W->rb_right->color = EP_RB_BLACK; } __ep_rb_rotate_left (Parent, root); - X = (struct ep_rb_node *) ADDR_SHTOL (root->rb_node); + X = root->rb_node; break; } } else { - struct ep_rb_node *W = - (struct ep_rb_node *) ADDR_SHTOL (Parent->rb_left); + struct ep_rb_node *W = Parent->rb_left; if (W->color == EP_RB_RED) { W->color = EP_RB_BLACK; Parent->color = EP_RB_RED; /* Parent != NIL? */ __ep_rb_rotate_right (Parent, root); - W = (struct ep_rb_node *) ADDR_SHTOL (Parent->rb_left); + W = Parent->rb_left; } - if ((!W->rb_left - || (((struct ep_rb_node *) ADDR_SHTOL (W->rb_left))->color == - EP_RB_BLACK)) && (!W->rb_right - || - (((struct ep_rb_node *) - ADDR_SHTOL (W->rb_right))->color == - EP_RB_BLACK))) + if ((!W->rb_left || (W->rb_left->color == EP_RB_BLACK)) + && (!W->rb_right || (W->rb_right->color == EP_RB_BLACK))) { W->color = EP_RB_RED; X = Parent; - Parent = (struct ep_rb_node *) ADDR_SHTOL (X->rb_parent); + Parent = X->rb_parent; } else { - if (!W->rb_left - || ((struct ep_rb_node *) ADDR_SHTOL (W->rb_left))->color - == EP_RB_BLACK) + if (!W->rb_left || W->rb_left->color == EP_RB_BLACK) { if (W->rb_right != NULL) { - ((struct ep_rb_node *) - ADDR_SHTOL (W->rb_right))->color = EP_RB_BLACK; + W->rb_right->color = EP_RB_BLACK; } W->color = EP_RB_RED; __ep_rb_rotate_left (W, root); - W = (struct ep_rb_node *) ADDR_SHTOL (Parent->rb_left); + W = Parent->rb_left; } W->color = Parent->color; Parent->color = EP_RB_BLACK; - if (((struct ep_rb_node *) ADDR_SHTOL (W->rb_left))->color != - EP_RB_BLACK) + if (W->rb_left->color != EP_RB_BLACK) { - ((struct ep_rb_node *) ADDR_SHTOL (W->rb_left))->color = - EP_RB_BLACK; + W->rb_left->color = EP_RB_BLACK; } __ep_rb_rotate_right (Parent, root); - X = (struct ep_rb_node *) ADDR_SHTOL (root->rb_node); + X = root->rb_node; break; } } @@ -376,48 +343,43 @@ ep_rb_erase (struct ep_rb_node *node, struct ep_rb_root *root) if (!node->rb_left) { - child = (struct ep_rb_node *) ADDR_SHTOL (node->rb_right); + child = node->rb_right; } else if (!node->rb_right) { - child = (struct ep_rb_node *) ADDR_SHTOL (node->rb_left); + child = node->rb_left; } else { struct ep_rb_node *old = node, *left; - node = (struct ep_rb_node *) ADDR_SHTOL (node->rb_right); + node = node->rb_right; - while ((left = - (struct ep_rb_node *) ADDR_SHTOL (node->rb_left)) != NULL) + while ((left = node->rb_left) != NULL) { node = left; } if (old->rb_parent) { - struct ep_rb_node *oldParent = - (struct ep_rb_node *) ADDR_SHTOL (old->rb_parent); + struct ep_rb_node *oldParent = old->rb_parent; - if (oldParent->rb_left == - (struct ep_rb_node *) ADDR_LTOSH_EXT (old)) + if (oldParent->rb_left == old) { - oldParent->rb_left = - (struct ep_rb_node *) ADDR_LTOSH_EXT (node); + oldParent->rb_left = node; } else { - oldParent->rb_right = - (struct ep_rb_node *) ADDR_LTOSH_EXT (node); + oldParent->rb_right = node; } } else { - root->rb_node = (struct ep_rb_node *) ADDR_LTOSH_EXT (node); + root->rb_node = node; } - child = (struct ep_rb_node *) ADDR_SHTOL (node->rb_right); - parent = (struct ep_rb_node *) ADDR_SHTOL (node->rb_parent); + child = node->rb_right; + parent = node->rb_parent; color = node->color; if (parent == old) @@ -428,22 +390,19 @@ ep_rb_erase (struct ep_rb_node *node, struct ep_rb_root *root) { if (child) { - child->rb_parent = - (struct ep_rb_node *) ADDR_LTOSH_EXT (parent); + child->rb_parent = parent; } - parent->rb_left = (struct ep_rb_node *) ADDR_LTOSH_EXT (child); + parent->rb_left = child; node->rb_right = old->rb_right; - ((struct ep_rb_node *) ADDR_SHTOL (old->rb_right))->rb_parent = - (struct ep_rb_node *) ADDR_LTOSH_EXT (node); + old->rb_right->rb_parent = node; } node->color = old->color; node->rb_parent = old->rb_parent; node->rb_left = old->rb_left; - ((struct ep_rb_node *) ADDR_SHTOL (old->rb_left))->rb_parent = - (struct ep_rb_node *) ADDR_LTOSH_EXT (node); + old->rb_left->rb_parent = node; if (color == EP_RB_BLACK) { @@ -454,28 +413,28 @@ ep_rb_erase (struct ep_rb_node *node, struct ep_rb_root *root) } - parent = (struct ep_rb_node *) ADDR_SHTOL (node->rb_parent); + parent = node->rb_parent; color = node->color; if (child) { - child->rb_parent = (struct ep_rb_node *) ADDR_LTOSH_EXT (parent); + child->rb_parent = parent; } if (parent) { - if (parent->rb_left == (struct ep_rb_node *) ADDR_LTOSH_EXT (node)) + if (parent->rb_left == node) { - parent->rb_left = (struct ep_rb_node *) ADDR_LTOSH_EXT (child); + parent->rb_left = child; } else { - parent->rb_right = (struct ep_rb_node *) ADDR_LTOSH_EXT (child); + parent->rb_right = child; } } else { - root->rb_node = (struct ep_rb_node *) ADDR_LTOSH_EXT (child); + root->rb_node = child; } if (color == EP_RB_BLACK) diff --git a/src/framework/lib_common_mem/common_api.c b/src/framework/common/dmm_sys.c index 566b8be..6239395 100644 --- a/src/framework/lib_common_mem/common_api.c +++ b/src/framework/common/dmm_sys.c @@ -13,124 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -#include <string.h> -#include "common_mem_api.h" -#include "common_mem_pal.h" -#include "nstack_log.h" +#include <stdint.h> #include "nstack_securec.h" -#include "common_func.h" - -void -sys_sem_init_v2 (sys_sem_t_v2 sem) -{ - sem->locked = 1; -} - -/** Returns the current time in milliseconds, - * may be the same as sys_jiffies or at least based on it. */ -u32_t -sys_now (void) -{ - struct timespec now; - - if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &now))) - { - NSCOMM_LOGERR ("Failed to get time, errno = %d", errno); - } - - return 1000 * now.tv_sec + now.tv_nsec / 1000000; -} - -long -sys_jiffies (void) -{ - return sys_now (); -} - -err_t -sys_sem_new_v2 (sys_sem_t_v2 * sem, u8_t isUnLockd) -{ - int retVal; - if (!sem) - { - return -1; - } - *sem = malloc (sizeof (common_mem_spinlock_t)); - - if (NULL == *sem) - { - return -1; - } - else - { - retVal = - MEMSET_S (*sem, sizeof (common_mem_spinlock_t), 0, - sizeof (common_mem_spinlock_t)); - if (EOK != retVal) - { - NSCOMM_LOGERR ("MEMSET_S failed]ret=%d", retVal); - free (*sem); - *sem = NULL; - return -1; - } - common_mem_spinlock_init (*sem); - } - - if (!isUnLockd) - { - common_mem_spinlock_lock (*sem); - } - - return 0; -} - -void -sys_sem_free_v2 (sys_sem_t_v2 * sem) -{ - if ((sem != NULL) && (*sem != NULL)) - { - free (*sem); - *sem = NULL; - } - else - { - } -} - -void -sys_sem_signal_v2 (sys_sem_t_v2 * sem) -{ - common_mem_spinlock_unlock (*sem); -} - -void -sys_sem_signal_s_v2 (sys_sem_t_v2 sem) -{ - common_mem_spinlock_unlock (sem); -} - -u32_t -sys_arch_sem_trywait_v2 (sys_sem_t_v2 * sem) -{ - return (u32_t) common_mem_spinlock_trylock (*sem); -} - -u32_t -sys_arch_sem_wait_v2 (sys_sem_t_v2 * pstsem) -{ - common_mem_spinlock_lock (*pstsem); - return 0; -} +#include "nstack_log.h" +#include "dmm_sys.h" -u32_t -sys_arch_sem_wait_s_v2 (sys_sem_t_v2 sem) -{ - common_mem_spinlock_lock (sem); - return 0; -} +#define BUF_SIZE_FILEPATH 256 +#define STR_PID "pid:" +#define READ_FILE_BUFLEN 512 -volatile pid_t g_sys_host_pid = SYS_HOST_INITIAL_PID; +pid_t g_sys_host_pid = SYS_HOST_INITIAL_PID; /***************************************************************************** * Prototype : get_exec_name_by_pid @@ -181,7 +73,7 @@ get_exec_name_by_pid (pid_t pid, char *task_name, int task_name_len) } pid_t -get_hostpid_from_file_one_time (u32_t pid) +get_hostpid_from_file_one_time (pid_t pid) { int retVal; char path[READ_FILE_BUFLEN] = { 0 }; @@ -237,7 +129,7 @@ get_hostpid_from_file_one_time (u32_t pid) #define MAX_GET_PID_TIME 10 pid_t -get_hostpid_from_file (u32_t pid) +get_hostpid_from_file (pid_t pid) { pid_t ret_pid = SYS_HOST_INITIAL_PID; int i = 0; diff --git a/src/framework/common/include/dmm_sys.h b/src/framework/common/include/dmm_sys.h new file mode 100644 index 0000000..dae0d97 --- /dev/null +++ b/src/framework/common/include/dmm_sys.h @@ -0,0 +1,44 @@ +/* +* +* 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 _DMM_SYS_H_ +#define _DMM_SYS_H_ + +#include <sys/types.h> +#include <unistd.h> + +#define SYS_HOST_INITIAL_PID 1 + +pid_t sys_get_hostpid_from_file (pid_t pid); +pid_t get_hostpid_from_file (pid_t pid); +void get_exec_name_by_pid (pid_t pid, char *task_name, int task_name_len); + +pid_t sys_get_hostpid_from_file (pid_t pid); + +static inline pid_t +get_sys_pid () +{ + extern pid_t g_sys_host_pid; + if (SYS_HOST_INITIAL_PID == g_sys_host_pid) + (void) sys_get_hostpid_from_file (getpid ()); + return g_sys_host_pid; +} + +pid_t updata_sys_pid (); + +#define dmm_spin_lock_pid(spinlock) dmm_spin_lock_with((spinlock), get_sys_pid()) +#define dmm_spin_trylock_pid(spinlock) dmm_spin_trylock_with((spinlock), get_sys_pid()) + +#endif diff --git a/src/framework/common/include/ephlist.h b/src/framework/common/include/ephlist.h index 90491b0..9e54489 100644 --- a/src/framework/common/include/ephlist.h +++ b/src/framework/common/include/ephlist.h @@ -19,9 +19,7 @@ #include <stdio.h> #include "types.h" -#include "common_mem_pal.h" -#include "common_mem_buf.h" -#include "common_pal_bitwide_adjust.h" + #ifdef __cplusplus /* *INDENT-OFF* */ extern "C" { @@ -48,21 +46,22 @@ struct ep_hlist #define ep_hlist_entry(ptr, type, member) container_of(ptr, type, member) -#define EP_HLIST_INIT_NODE(node) {\ +#define EP_HLIST_INIT_NODE(node) do {\ (node)->next = NULL;\ (node)->pprev = NULL; \ - } + } while (0) -#define EP_HLIST_INIT(ptr) {\ - EP_HLIST_INIT_NODE(&((ptr)->node)); \ - (ptr)->head = (struct ep_hlist_node*)ADDR_LTOSH_EXT(&((ptr)->node)); \ - (ptr)->tail = (struct ep_hlist_node*)ADDR_LTOSH_EXT(&((ptr)->node)); \ - } +#define EP_HLIST_INIT(ptr) do {\ + struct ep_hlist *_ptr = (ptr); \ + EP_HLIST_INIT_NODE(&_ptr->node); \ + _ptr->head = &_ptr->node; \ + _ptr->tail = &_ptr->node; \ + } while (0) -#define EP_HLIST_PREV(ptr) ((struct ep_hlist_node*)(ADDR_SHTOL((ptr)->pprev))) +#define EP_HLIST_PREV(ptr) ((struct ep_hlist_node*)((ptr)->pprev)) /* list check may below zero check header, because if app crash before do list->size++, it will lead problem */ -#define EP_HLIST_EMPTY(list) (NULL == ((struct ep_hlist_node*)ADDR_SHTOL((list)->head))->next) +#define EP_HLIST_EMPTY(list) (NULL == ((struct ep_hlist_node*)((list)->head))->next) #define EP_HLIST_NODE_LINKED(node) (!(!(node)->pprev)) static __inline void ep_hlist_del (struct ep_hlist *list, @@ -81,7 +80,7 @@ ep_hlist_del (struct ep_hlist *list, struct ep_hlist_node *n) EP_HLIST_PREV (n)->next = n->next; if (n->next) { - ((struct ep_hlist_node *) ADDR_SHTOL (n->next))->pprev = n->pprev; + ((struct ep_hlist_node *) (n->next))->pprev = n->pprev; } else { @@ -96,12 +95,11 @@ ep_hlist_del (struct ep_hlist *list, struct ep_hlist_node *n) static __inline void ep_hlist_add_tail (struct ep_hlist *list, struct ep_hlist_node *node) { - struct ep_hlist_node *tail = - (struct ep_hlist_node *) ADDR_SHTOL (list->tail); + struct ep_hlist_node *tail = (struct ep_hlist_node *) (list->tail); EP_HLIST_INIT_NODE (node); - node->pprev = (struct ep_hlist_node **) ADDR_LTOSH_EXT (&tail->next); - tail->next = (struct ep_hlist_node *) ADDR_LTOSH_EXT (node); - list->tail = (struct ep_hlist_node *) ADDR_LTOSH_EXT (node); + node->pprev = (struct ep_hlist_node **) (&tail->next); + tail->next = (struct ep_hlist_node *) (node); + list->tail = (struct ep_hlist_node *) (node); } /*#########################################################*/ @@ -124,10 +122,10 @@ struct ep_list #define EP_LIST_INIT(ptr) {\ EP_LIST_INIT_NODE(&((ptr)->node)); \ - (ptr)->head = (struct list_node*)ADDR_LTOSH_EXT(&((ptr)->node)); \ + (ptr)->head = (struct list_node*)(&((ptr)->node)); \ } -#define EP_LIST_EMPTY(list) (NULL == ((struct list_node*)ADDR_SHTOL((list)->head))->next) +#define EP_LIST_EMPTY(list) (NULL == ((struct list_node*)((list)->head))->next) static __inline void ep_list_del (struct ep_list *list, struct list_node *n); static __inline void ep_list_add_tail (struct ep_list *list, @@ -146,11 +144,11 @@ ep_list_del (struct ep_list *list, struct list_node *n) struct list_node *p_node; struct list_node *p_prev = NULL; - p_node = ((struct list_node *) ADDR_SHTOL (list->head)); + p_node = ((struct list_node *) (list->head)); while (NULL != p_node && p_node != n) { p_prev = p_node; - p_node = ((struct list_node *) ADDR_SHTOL (p_node->next)); + p_node = ((struct list_node *) (p_node->next)); } if (p_node != n || p_prev == NULL) @@ -173,11 +171,11 @@ ep_list_add_tail (struct ep_list *list, struct list_node *node) struct list_node *p_node; struct list_node *p_prev = NULL; - p_node = ((struct list_node *) ADDR_SHTOL (list->head)); + p_node = ((struct list_node *) (list->head)); while (NULL != p_node) { p_prev = p_node; - p_node = ((struct list_node *) ADDR_SHTOL (p_node->next)); + p_node = ((struct list_node *) (p_node->next)); } if (NULL == p_prev) @@ -186,7 +184,7 @@ ep_list_add_tail (struct ep_list *list, struct list_node *node) } EP_LIST_INIT_NODE (node); - p_prev->next = (struct list_node *) ADDR_LTOSH_EXT (node); + p_prev->next = (struct list_node *) (node); return; } diff --git a/src/framework/common/include/eprb_tree.h b/src/framework/common/include/eprb_tree.h index 558ab2d..eac18f7 100644 --- a/src/framework/common/include/eprb_tree.h +++ b/src/framework/common/include/eprb_tree.h @@ -20,9 +20,6 @@ #include <stdio.h> #include <stdlib.h> #include "types.h" -#include "common_mem_pal.h" -#include "common_mem_buf.h" -#include "common_pal_bitwide_adjust.h" #ifdef __cplusplus /* *INDENT-OFF* */ extern "C" { @@ -53,7 +50,7 @@ struct ep_rb_root static inline void ep_rb_set_parent (struct ep_rb_node *rb, struct ep_rb_node *p) { - rb->rb_parent = (struct ep_rb_node *) ADDR_LTOSH_EXT (p); + rb->rb_parent = p; } #define ep_rb_entry(ptr, type, member) container_of(ptr, type, member) @@ -67,10 +64,10 @@ ep_rb_link_node (struct ep_rb_node *node, struct ep_rb_node *parent, struct ep_rb_node **rb_link) { - node->rb_parent = (struct ep_rb_node *) ADDR_LTOSH_EXT (parent); + node->rb_parent = parent; node->rb_left = node->rb_right = NULL; - *rb_link = (struct ep_rb_node *) ADDR_LTOSH_EXT (node); + *rb_link = node; node->color = EP_RB_RED; } diff --git a/src/framework/common/include/generic/dmm_atomic.h b/src/framework/common/include/generic/dmm_atomic.h index 637306b..ceb1042 100644 --- a/src/framework/common/include/generic/dmm_atomic.h +++ b/src/framework/common/include/generic/dmm_atomic.h @@ -23,6 +23,12 @@ typedef struct volatile int cnt; } dmm_atomic_t; +inline static void +dmm_atomic_set (dmm_atomic_t * a, int n) +{ + a->cnt = n; +} + inline static int dmm_atomic_get (dmm_atomic_t * a) { @@ -36,12 +42,24 @@ dmm_atomic_add (dmm_atomic_t * a, int n) } inline static int +dmm_atomic_inc (dmm_atomic_t * a) +{ + return dmm_atomic_add (a, 1); +} + +inline static int dmm_atomic_sub (dmm_atomic_t * a, int n) { return __sync_fetch_and_sub (&a->cnt, n); } inline static int +dmm_atomic_dec (dmm_atomic_t * a) +{ + return dmm_atomic_sub (a, 1); +} + +inline static int dmm_atomic_and (dmm_atomic_t * a, int n) { return __sync_fetch_and_and (&a->cnt, n); @@ -62,7 +80,7 @@ dmm_atomic_xor (dmm_atomic_t * a, int n) inline static int dmm_atomic_swap (dmm_atomic_t * a, int o, int n) { - return __sync_val_compare_and_swap (&a->cnt, o, n); + return __sync_bool_compare_and_swap (&a->cnt, o, n); } inline static int @@ -108,18 +126,36 @@ dmm_atomic64_get (dmm_atomic64_t * a) return a->cnt; } +inline static void +dmm_atomic64_set (dmm_atomic64_t * a, int n) +{ + a->cnt = n; +} + inline static long long int dmm_atomic64_add (dmm_atomic64_t * a, int n) { return __sync_fetch_and_add (&a->cnt, n); } +inline static int +dmm_atomic64_inc (dmm_atomic64_t * a) +{ + return dmm_atomic64_add (a, 1); +} + inline static long long int dmm_atomic64_sub (dmm_atomic64_t * a, int n) { return __sync_fetch_and_sub (&a->cnt, n); } +inline static int +dmm_atomic64_dec (dmm_atomic64_t * a) +{ + return dmm_atomic64_sub (a, 1); +} + inline static long long int dmm_atomic64_and (dmm_atomic64_t * a, int n) { @@ -141,7 +177,7 @@ dmm_atomic64_xor (dmm_atomic64_t * a, int n) inline static long long int dmm_atomic64_swap (dmm_atomic_t * a, int o, int n) { - return __sync_val_compare_and_swap (&a->cnt, o, n); + return __sync_bool_compare_and_swap (&a->cnt, o, n); } inline static long long int diff --git a/src/framework/common/include/generic/dmm_spinlock.h b/src/framework/common/include/generic/dmm_spinlock.h index be183a6..90d2f3f 100644 --- a/src/framework/common/include/generic/dmm_spinlock.h +++ b/src/framework/common/include/generic/dmm_spinlock.h @@ -29,25 +29,37 @@ dmm_spin_init (dmm_spinlock_t * spinlock) spinlock->lock = 0; } -inline static void -dmm_spin_lock (dmm_spinlock_t * spinlock) +static inline int +dmm_spin_trylock_with (dmm_spinlock_t * spinlock, int value) +{ + return __sync_bool_compare_and_swap (&spinlock->lock, 0, value); +} + +static inline void +dmm_spin_lock_with (dmm_spinlock_t * spinlock, int value) { - while (0 != __sync_lock_test_and_set (&spinlock->lock, 1)) + while (!dmm_spin_trylock_with (spinlock, value)) { DMM_PAUSE_WHILE (spinlock->lock); } } +inline static void +dmm_spin_lock (dmm_spinlock_t * spinlock) +{ + dmm_spin_lock_with (spinlock, 1); +} + inline static int dmm_spin_trylock (dmm_spinlock_t * spinlock) { - return 0 == __sync_lock_test_and_set (&spinlock->lock, 1); + return dmm_spin_trylock_with (spinlock, 1); } inline static void dmm_spin_unlock (dmm_spinlock_t * spinlock) { - spinlock->lock = 0; + __sync_lock_release (&spinlock->lock); } #endif /* #ifndef _DMM_SPINLOCK_H_ */ diff --git a/src/framework/hal/hal.c b/src/framework/hal/hal.c index 545c759..97e4608 100644 --- a/src/framework/hal/hal.c +++ b/src/framework/hal/hal.c @@ -13,9 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include <errno.h> -#include "common_sys_config.h" -#include "common_mem_mbuf.h" #include "nstack_log.h" #include "nstack_securec.h" #include "hal.h" @@ -848,7 +847,7 @@ hal_is_nic_exist (const char *name) "sudo ifconfig -a | grep -w \"%s[ :]\"", name); if (-1 == retval) { - NSHAL_LOGERR ("rte_snprintf failed]retval=%d", retval); + NSHAL_LOGERR ("hal_snprintf failed]retval=%d", retval); return 0; } diff --git a/src/framework/hal/hal.h b/src/framework/hal/hal.h index 36ad79d..3ccbd4b 100644 --- a/src/framework/hal/hal.h +++ b/src/framework/hal/hal.h @@ -20,6 +20,7 @@ #include <stdint.h> #include "hal_api.h" #include "nstack_log.h" +#include "dmm_common.h" #ifdef __cplusplus /* *INDENT-OFF* */ diff --git a/src/framework/include/dmm_common.h b/src/framework/include/dmm_common.h new file mode 100644 index 0000000..a696e48 --- /dev/null +++ b/src/framework/include/dmm_common.h @@ -0,0 +1,76 @@ +/* +* +* 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 _DMM_COMMON_H_ +#define _DMM_COMMON_H_ + +#include "dmm_config.h" + +#ifndef likely +#define likely(x) __builtin_expect(!!(x), 1) +#endif +#ifndef unlikely +#define unlikely(x) __builtin_expect(!!(x), 0) +#endif + +#define _dmm_packed __attribute__((__packed__)) +#define _dmm_aliened(a) __attribute__((__aligned__(a))) +#define _dmm_cache_aligned _dmm_aliened(DMM_CACHE_LINE_SIZE) + +#define DMM_ALIGN(x, a) (((x) + ((a) - 1)) / (a) * (a)) +#define dmm_align(x, a) ({ \ + typeof(x) _a = (a); \ + ((x) + (_a - 1)) / _a * _a; \ +}) + +#ifndef offsetof +#define offsetof(type, member) ((size_t)((type *)0)->member) +#endif + +#ifndef container_of +#define container_of(ptr, type, member) ({ \ + typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) ); \ +}) +#endif + +inline static unsigned int +dmm_align32pow2 (unsigned int v) +{ + v--; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + v |= v >> 16; + + return v + 1; +} + +inline static unsigned long long +dmm_align64pow2 (unsigned long long v) +{ + v--; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + v |= v >> 16; + v |= v >> 32; + + return v + 1; +} + +#endif diff --git a/src/framework/include/dmm_config.h b/src/framework/include/dmm_config.h index 43a06ab..4939842 100644 --- a/src/framework/include/dmm_config.h +++ b/src/framework/include/dmm_config.h @@ -21,23 +21,31 @@ #endif #ifndef DMM_MAIN_SHARE_TYPE -#define DMM_MAIN_SHARE_TYPE DMM_SHARE_FSHM /* 1 */ +#define DMM_MAIN_SHARE_TYPE DMM_SHARE_FSHM #endif #ifndef DMM_MAIN_SHARE_SIZE #define DMM_MAIN_SHARE_SIZE 1024 /* Megabyte */ #endif +#ifndef DMM_MAIN_SHARE_BASE +#define DMM_MAIN_SHARE_BASE 0x700080000000 /* fixed base address */ +#endif + #ifndef DMM_SHARE_TYPE -#define DMM_SHARE_TYPE DMM_SHARE_FSHM /* 1 */ +#define DMM_SHARE_TYPE DMM_SHARE_FSHM #endif #ifndef DMM_SHARE_SIZE -#define DMM_SHARE_SIZE 16 /* Megabyte */ +#define DMM_SHARE_SIZE 8 /* Megabyte */ #endif #ifndef DMM_HUGE_DIR -#define DMM_HUGE_DIR "/mnt/dmm-huge" +#define DMM_HUGE_DIR "/mnt/nstackhuge" +#endif + +#ifndef DMM_CACHE_LINE_SIZE +#define DMM_CACHE_LINE_SIZE 64 #endif #endif /* _DMM_CONFIG_H_ */ diff --git a/src/framework/include/nsfw_fd_timer_api.h b/src/framework/include/nsfw_fd_timer_api.h index 0b42fe0..7aa8bb7 100644 --- a/src/framework/include/nsfw_fd_timer_api.h +++ b/src/framework/include/nsfw_fd_timer_api.h @@ -26,12 +26,14 @@ extern "C"{ /* *INDENT-ON* */ #endif /* __cplusplus */ +#include "dmm_ring.h" + #define NSFW_TIMER_MODULE "nsfw_timer" typedef struct _nsfw_timer_init_cfg { u32 timer_info_size; - void *timer_info_pool; + struct dmm_ring *timer_info_pool; struct list_head timer_head; struct list_head exp_timer_head; } nsfw_timer_init_cfg; diff --git a/src/framework/include/nsfw_mgr_com_api.h b/src/framework/include/nsfw_mgr_com_api.h index 56ec08f..a7da957 100644 --- a/src/framework/include/nsfw_mgr_com_api.h +++ b/src/framework/include/nsfw_mgr_com_api.h @@ -26,6 +26,8 @@ extern "C"{ /* *INDENT-ON* */ #endif /* __cplusplus */ +#include "types.h" + #define NSFW_MGR_COM_MODULE "nsfw_mgr_com" #define MRG_RSP(_req_msg) (_req_msg + MGR_MSG_RSP_BASE) diff --git a/src/framework/include/nsfw_recycle_api.h b/src/framework/include/nsfw_recycle_api.h index 9d7f3bb..e103812 100644 --- a/src/framework/include/nsfw_recycle_api.h +++ b/src/framework/include/nsfw_recycle_api.h @@ -23,6 +23,8 @@ extern "C"{ /* *INDENT-ON* */ #endif /* __cplusplus */ +#include "types.h" + #define NSFW_RECYCLE_MODULE "nsfw_recycle" typedef enum _nsfw_recycle_item_type diff --git a/src/framework/include/nstack_log.h b/src/framework/include/nstack_log.h index 4e1ba81..f7cbdfe 100644 --- a/src/framework/include/nstack_log.h +++ b/src/framework/include/nstack_log.h @@ -25,6 +25,7 @@ #include <stdint.h> #include <stdarg.h> #include <stdlib.h> +#include <time.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> diff --git a/src/framework/include/nstack_securec.h b/src/framework/include/nstack_securec.h index c9efb4f..15f88b6 100644 --- a/src/framework/include/nstack_securec.h +++ b/src/framework/include/nstack_securec.h @@ -33,15 +33,12 @@ extern "C" { #ifndef NULL #define NULL ((void *)0) -#endif /* - */ +#endif /*define error code*/ #ifndef errno_t typedef int errno_t; - -#endif /* - */ +#endif /* success */ #define EOK (0) @@ -49,8 +46,7 @@ typedef int errno_t; /* invalid parameter */ #ifndef EINVAL #define EINVAL (22) -#endif /* - */ +#endif #define EINVAL_AND_RESET (22 | 0X80) #define ERANGE_AND_RESET (34 | 0X80) @@ -136,6 +132,7 @@ typedef int errno_t; #define WCSTOK_S(a, b, c) wcstok_s(a, b, c) #define GETS_S(a, b) gets_s(a, b) #endif /* */ + #ifdef __cplusplus /* *INDENT-OFF* */ } diff --git a/src/framework/init/CMakeLists.txt b/src/framework/init/CMakeLists.txt index ff8d4d2..134610c 100644 --- a/src/framework/init/CMakeLists.txt +++ b/src/framework/init/CMakeLists.txt @@ -14,11 +14,9 @@ # limitations under the License. ######################################################################### -SET(LIBSBR_SRC fw_init.c fw_module.c) +SET(LIBINIT_SRC fw_init.c fw_module.c) -SET(COMM_CONFIG ${PROJECT_SOURCE_DIR}/src/framework/common/base/include/common_sys_config.h) ADD_DEFINITIONS(-fPIC -mssse3) -ADD_DEFINITIONS(-include ${COMM_CONFIG}) -ADD_LIBRARY(nStackfwinit static ${LIBSBR_SRC}) +ADD_LIBRARY(nStackfwinit static ${LIBINIT_SRC}) diff --git a/src/framework/init/fw_init.c b/src/framework/init/fw_init.c index 2764479..c7f38a0 100644 --- a/src/framework/init/fw_init.c +++ b/src/framework/init/fw_init.c @@ -245,6 +245,43 @@ nstack_framework_printInitialResult () NSFW_LOGINF ("All modules are inited"); } +static void +nstack_framework_print_list () +{ + nsfw_module_manager_t *manager = nsfw_module_getManager (); + nsfw_module_instance_t *inst; + + for (inst = manager->inst; inst; inst = inst->next) + { + char deps[512]; + nsfw_module_depends_t *depends; + + if (inst->depends) + { + int depn = 0; + + for (depends = inst->depends; depends; depends = depends->next) + { + int len = snprintf (&deps[depn], sizeof (deps) - depn, + "%s", depends->name); + if (len < 0) + { + break; + } + depn += len; + } + deps[sizeof (deps) - 1] = 0; + } + else + { + (void) snprintf (deps, sizeof (deps), "{null}"); + } + + NSFW_LOGDBG ("module: %s father: %s priority: %d depends: %s", + inst->name, inst->fatherName, inst->priority, deps); + } +} + /** * @Function nstack_framework_init * @Description This function will do framework initial work, it will invoke all initial functions @@ -271,6 +308,8 @@ nstack_framework_init (void) goto done; } + nstack_framework_print_list (); + ret = nstack_framework_initChild_unsafe (NULL); if (0 == ret) diff --git a/src/framework/init/fw_module.c b/src/framework/init/fw_module.c index 1f22ecb..acf4fdb 100644 --- a/src/framework/init/fw_module.c +++ b/src/framework/init/fw_module.c @@ -225,10 +225,8 @@ nsfw_module_set_instance_depends (nsfw_module_instance_t * inst, char *name) if (NULL == dep) return; - if (NULL == inst->depends) - inst->depends = dep; - else - inst->depends->next = dep; + dep->next = inst->depends; + inst->depends = dep; } /* *INDENT-OFF* */ 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_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* */ diff --git a/src/framework/log/nsfw_set_log.c b/src/framework/log/nsfw_set_log.c index 31241b5..04501a9 100644 --- a/src/framework/log/nsfw_set_log.c +++ b/src/framework/log/nsfw_set_log.c @@ -21,7 +21,6 @@ #include "nstack_log.h" #include "nsfw_maintain_api.h" -#include "nsfw_mem_api.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -216,7 +215,7 @@ nsfw_cfg_module_init (void *param) /* *INDENT-OFF* */ NSFW_MODULE_NAME (NSFW_LOG_CFG_MODULE) -NSFW_MODULE_PRIORITY (99) +NSFW_MODULE_PRIORITY (50) NSFW_MODULE_INIT (nsfw_cfg_module_init) /* *INDENT-ON* */ diff --git a/src/framework/mem/dmm_fshm.c b/src/framework/mem/dmm_fshm.c index 605c728..a037318 100644 --- a/src/framework/mem/dmm_fshm.c +++ b/src/framework/mem/dmm_fshm.c @@ -19,6 +19,10 @@ #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> +#include <errno.h> + +#include "nstack_log.h" +#include "nsfw_base_linux_api.h" #include "dmm_config.h" #include "dmm_share.h" @@ -27,10 +31,11 @@ #define DMM_FSHM_FMT "%s/dmm-fshm-%d" /* VAR_DIR pid */ inline static void -set_fshm_path (struct dmm_share *share) +set_fshm_path (char path[DMM_SHARE_PATH_MAX], pid_t pid) { - (void) snprintf (share->path, sizeof (share->path), DMM_FSHM_FMT, - DMM_VAR_DIR, share->pid); + (void) snprintf (path, DMM_SHARE_PATH_MAX, DMM_FSHM_FMT, DMM_VAR_DIR, pid); + + path[DMM_SHARE_PATH_MAX - 1] = 0; } /* @@ -41,34 +46,58 @@ int dmm_fshm_create (struct dmm_share *share) { int fd, ret; - void *base; + void *base, *hint = (void *) DMM_MAIN_SHARE_BASE; + + if (share->type != DMM_SHARE_FSHM) + { + NSFW_LOGERR ("type error, type:%d", share->type); + return -1; + } - set_fshm_path (share); + set_fshm_path (share->path, share->pid); + + NSFW_LOGINF ("Start create share memory, path:'%s' size:%lu", + share->path, share->size); fd = open (share->path, O_RDWR | O_CREAT, 0666); if (fd < 0) { + NSFW_LOGERR ("Open file failed, path:'%s', errno=%d", + share->path, errno); return -1; } ret = ftruncate (fd, share->size); if (ret < 0) { - (void) close (fd); + NSFW_LOGERR ("Set file size failed, path:'%s', errno=%d", + share->path, errno); + (void) nsfw_base_close (fd); return -1; } - base = mmap (NULL, share->size, - PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd, 0); + base = mmap (hint, share->size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (base == MAP_FAILED) { - (void) close (fd); + NSFW_LOGERR ("Map failed, path:'%s' size:%lu, errno=%d", + share->path, share->size, errno); + (void) nsfw_base_close (fd); + return -1; + } + else if (hint && hint != MAP_FAILED && base != hint) + { + NSFW_LOGERR ("Map address failed, path:'%s' hint:%p size:%lu, base:%p", + share->path, hint, share->size, base); + (void) munmap (base, share->size); + (void) nsfw_base_close (fd); return -1; } share->base = base; - (void) close (fd); + NSFW_LOGINF ("Share memory created, size:%lu, base=%p", share->size, base); + + (void) nsfw_base_close (fd); return 0; } @@ -91,14 +120,22 @@ dmm_fshm_attach (struct dmm_share *share) int fd; void *base; + NSFW_LOGINF ("Start attach, share:%p" + " {type:%d pid:%d base:%p size:%lu path:'%s'}", + share, share->type, share->pid, + share->base, share->size, share->path); + if (share->type != DMM_SHARE_FSHM) { + NSFW_LOGERR ("type error, type:%d", share->type); return -1; } fd = open (share->path, O_RDWR); if (fd < 0) { + NSFW_LOGERR ("Open file failed, path:'%s', errno=%d", + share->path, errno); return -1; } @@ -107,16 +144,19 @@ dmm_fshm_attach (struct dmm_share *share) share->size = dmm_file_size (fd); if (share->size == 0) { - (void) close (fd); + NSFW_LOGERR ("No file size '%s'", share->path); + (void) nsfw_base_close (fd); return -1; } } - base = mmap (share->base, share->size, - PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd, 0); + base = mmap (share->base, share->size, PROT_READ | PROT_WRITE, + MAP_SHARED, fd, 0); if (base == MAP_FAILED) { - (void) close (fd); + NSFW_LOGERR ("Map failed, path:'%s' base:%p size:%lu, errno=%d", + share->path, share->base, share->size, errno); + (void) nsfw_base_close (fd); return -1; } @@ -126,12 +166,16 @@ dmm_fshm_attach (struct dmm_share *share) } else if (base != share->base) { + NSFW_LOGERR ("Map address error, path:'%s' share->base:%p, base:%p", + share->path, share->base, base); (void) munmap (base, share->size); - (void) close (fd); + (void) nsfw_base_close (fd); return -1; } - (void) close (fd); + NSFW_LOGINF ("Memory attached, base=%p", base); + + (void) nsfw_base_close (fd); return 0; } diff --git a/src/framework/mem/dmm_group.c b/src/framework/mem/dmm_group.c index 35e6100..1eedd4d 100644 --- a/src/framework/mem/dmm_group.c +++ b/src/framework/mem/dmm_group.c @@ -15,6 +15,7 @@ */ #include <stdio.h> #include <stdlib.h> +#include <errno.h> #include <unistd.h> #include <limits.h> #include <sys/types.h> @@ -22,7 +23,8 @@ #include <fcntl.h> #include <sys/mman.h> -//#include "dmm_memory.h" +#include "nsfw_base_linux_api.h" +#include "nstack_log.h" #include "dmm_config.h" #include "dmm_group.h" #include "dmm_pause.h" @@ -66,6 +68,7 @@ void dmm_group_active () { main_group->group_init = DMM_GROUP_ACTIVE; + NSFW_LOGINF ("main group actived"); } int @@ -74,16 +77,21 @@ dmm_group_create_main () int ret; const char *path = get_group_path (); + NSFW_LOGINF ("start create main group '%s'", path); + group_fd = open (path, O_RDWR | O_CREAT, 0664); if (group_fd < 0) { + NSFW_LOGERR ("open file failed, path:'%s', errno=%d", path, errno); return -1; } ret = ftruncate (group_fd, sizeof (struct dmm_group)); if (ret < 0) { - (void) close (group_fd); + NSFW_LOGERR ("set size failed, path:'%s' size:%lu, errno=%d", + path, sizeof (struct dmm_group), errno); + (void) nsfw_base_close (group_fd); group_fd = -1; return -1; } @@ -91,7 +99,8 @@ dmm_group_create_main () ret = fcntl (group_fd, F_SETLK, &group_lock); if (ret < 0) { - (void) close (group_fd); + NSFW_LOGERR ("lock file failed, path:'%s', errno=%d", path, errno); + (void) nsfw_base_close (group_fd); group_fd = -1; return -1; } @@ -102,11 +111,16 @@ dmm_group_create_main () if (main_group == MAP_FAILED) { - (void) close (group_fd); + NSFW_LOGERR ("mmap failed, path:'%s' size:%lu, errno:%d", + path, sizeof (struct dmm_group), errno); + (void) nsfw_base_close (group_fd); group_fd = -1; return -1; } + NSFW_LOGINF ("main group created, main_group:%p size:%lu", + main_group, sizeof (struct dmm_group)); + return 0; } @@ -121,7 +135,7 @@ dmm_group_delete_main () if (group_fd >= 0) { - (void) close (group_fd); + (void) nsfw_base_close (group_fd); group_fd = -1; } @@ -135,17 +149,22 @@ dmm_group_attach_main () { const char *path = get_group_path (); + NSFW_LOGINF ("Start attach main group '%s'", path); + group_fd = open (path, O_RDONLY); if (group_fd < 0) { + NSFW_LOGERR ("open group file failed, path:'%s', errno=%d", + path, errno); return -1; } - main_group = (struct dmm_group *) mmap (NULL, sizeof (struct dmm_group *), + main_group = (struct dmm_group *) mmap (NULL, sizeof (struct dmm_group), PROT_READ, MAP_SHARED, group_fd, 0); if (main_group == MAP_FAILED) { - (void) close (group_fd); + NSFW_LOGERR ("mmap failed, path:'%s', errno=%d", path, errno); + (void) nsfw_base_close (group_fd); group_fd = -1; return -1; } @@ -157,12 +176,21 @@ dmm_group_attach_main () if (kill (main_group->share.pid, 0)) { + NSFW_LOGERR ("main group process not exist, path:'%s' pid:%d errno=%d", + path, main_group->share.pid, errno); (void) munmap (main_group->share.base, main_group->share.size); - (void) close (group_fd); + (void) nsfw_base_close (group_fd); + (void) unlink (path); group_fd = -1; return -1; } + NSFW_LOGINF ("main group attached, main_group=%p" + " {type=%d pid=%d base=%p size=%ld path='%s'}", + main_group, main_group->share.type, main_group->share.pid, + main_group->share.base, main_group->share.size, + main_group->share.path); + return 0; } @@ -177,7 +205,7 @@ dmm_group_detach_main () if (group_fd >= 0) { - (void) close (group_fd); + (void) nsfw_base_close (group_fd); group_fd = -1; } diff --git a/src/framework/mem/dmm_huge.c b/src/framework/mem/dmm_huge.c index 735c507..6e3fc42 100644 --- a/src/framework/mem/dmm_huge.c +++ b/src/framework/mem/dmm_huge.c @@ -15,39 +15,167 @@ */ #include <stdio.h> #include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> +#include <sys/mman.h> +#include <errno.h> + +#include "nstack_log.h" +#include "nsfw_base_linux_api.h" #include "dmm_config.h" #include "dmm_share.h" +#include "dmm_fs.h" -#define DMM_HUGE_FMT "%s/dmm-%d-%d" /* HUGE_DIR pid index */ +#define DMM_HUGE_FMT "%s/dmm-%d-%d" /* HUGE_DIR/dmm-pid-index */ inline static void -huge_set_path (struct dmm_share *share, int index) +huge_set_path (char path[DMM_SHARE_PATH_MAX], pid_t pid, int index) { - (void) snprintf (share->path, sizeof (share->path), DMM_HUGE_FMT, - DMM_HUGE_DIR, share->pid, index); + (void) snprintf (path, DMM_SHARE_PATH_MAX, DMM_HUGE_FMT, + DMM_HUGE_DIR, pid, index); + path[DMM_SHARE_PATH_MAX - 1] = 0; } int dmm_huge_create (struct dmm_share *share) { - return -1; + int fd, ret; + void *base, *hint = (void *) DMM_MAIN_SHARE_BASE; + + if (share->type != DMM_SHARE_HUGE) + { + NSFW_LOGERR ("Type error, type:%d", share->type); + return -1; + } + + huge_set_path (share->path, share->pid, 0); + + NSFW_LOGINF ("Start create share memory, path:'%s' size:%lu", + share->path, share->size); + + fd = open (share->path, O_RDWR | O_CREAT, 0666); + if (fd < 0) + { + NSFW_LOGERR ("Open file failed, path:'%s', errno=%d", + share->path, errno); + return -1; + } + + ret = ftruncate (fd, share->size); + if (ret < 0) + { + NSFW_LOGERR ("Set file size failed, path:'%s', errno=%d", + share->path, errno); + (void) nsfw_base_close (fd); + return -1; + } + + base = mmap (hint, share->size, PROT_READ | PROT_WRITE, + MAP_HUGETLB | MAP_SHARED | MAP_POPULATE, fd, 0); + if (base == MAP_FAILED) + { + NSFW_LOGERR ("Map failed, path:'%s' size:%lu, errno=%d", + share->path, share->size, errno); + (void) nsfw_base_close (fd); + return -1; + } + else if (hint && hint != MAP_FAILED && hint != base) + { + NSFW_LOGERR ("Map address failed, path:'%s' hint:%p size:%lu, base:%p", + share->path, hint, share->size, base); + (void) munmap (base, share->size); + (void) nsfw_base_close (fd); + return -1; + } + + share->base = base; + + NSFW_LOGINF ("Share memory created, size:%lu, base=%p", share->size, base); + + (void) nsfw_base_close (fd); + return 0; } int dmm_huge_delete (struct dmm_share *share) { - return -1; + (void) munmap (share->base, share->size); + (void) unlink (share->path); + + return 0; } int dmm_huge_attach (struct dmm_share *share) { - return -1; + int fd; + void *base; + + NSFW_LOGINF ("Start attach, share:%p" + " {type:%d pid:%d base:%p size:%lu path:'%s'}", + share, share->type, share->pid, + share->base, share->size, share->path); + + if (share->type != DMM_SHARE_HUGE) + { + NSFW_LOGERR ("Type error, type:%d", share->type); + return -1; + } + + fd = open (share->path, O_RDWR); + if (fd < 0) + { + NSFW_LOGERR ("Open file failed, path:'%s', errno=%d", + share->path, errno); + return -1; + } + + if (share->size <= 0) + { + share->size = dmm_file_size (fd); + if (share->size == 0) + { + NSFW_LOGERR ("No file size '%s'", share->path); + (void) nsfw_base_close (fd); + return -1; + } + } + + base = mmap (share->base, share->size, PROT_READ | PROT_WRITE, + MAP_SHARED, fd, 0); + if (base == MAP_FAILED) + { + NSFW_LOGERR ("mmap failed, path:'%s' base:%p size:%lu, errno=%d", + share->path, share->base, share->size, errno); + (void) nsfw_base_close (fd); + return -1; + } + + if (NULL == share->base) + { + share->base = base; + } + else if (base != share->base) + { + NSFW_LOGERR ("mmap address error, path:'%s' share->base:%p, base:%p", + share->path, share->base, base); + (void) munmap (base, share->size); + (void) nsfw_base_close (fd); + return -1; + } + + NSFW_LOGINF ("Memory attached, base=%p", base); + + (void) nsfw_base_close (fd); + return 0; } int dmm_huge_detach (struct dmm_share *share) { - return -1; + (void) munmap (share->base, share->size); + + return 0; } diff --git a/src/framework/mem/dmm_memory.c b/src/framework/mem/dmm_memory.c index 0352432..b768eef 100644 --- a/src/framework/mem/dmm_memory.c +++ b/src/framework/mem/dmm_memory.c @@ -15,11 +15,16 @@ */ #include <sys/types.h> #include <unistd.h> +#include <stdlib.h> #include "dmm_config.h" #include "dmm_memory.h" #include "dmm_group.h" +#include "nsfw_init.h" +#include "nsfw_mgr_com_api.h" +#include "nstack_log.h" + #define DMM_MEGABYTE (1024 * 1024) /* shared from main process */ @@ -44,7 +49,8 @@ dmm_mem_main_init () main_share = &main_group->share; main_share->type = DMM_MAIN_SHARE_TYPE; - main_share->size = DMM_MAIN_SHARE_SIZE * DMM_MEGABYTE; + main_share->size = DMM_MAIN_SHARE_SIZE; + main_share->size *= DMM_MEGABYTE; main_share->base = NULL; main_share->pid = getpid (); ret = dmm_share_create (main_share); @@ -59,6 +65,8 @@ dmm_mem_main_init () return -1; } + base_seg = main_seg; + dmm_group_active (); return 0; @@ -83,12 +91,18 @@ dmm_mem_app_init () ret = dmm_share_attach (main_share); if (ret) { + NSFW_LOGERR + ("share attach failed, type:%d pid:%d base:%p size:%lu path:%s", + main_share->type, main_share->pid, main_share->base, + main_share->size, main_share->path); return -1; } main_seg = dmm_seg_attach (main_share->base, main_share->size); if (!main_seg) { + NSFW_LOGERR ("segment attach failed, base:%p size:%lu", + main_share->base, main_share->size); return -1; } @@ -131,3 +145,132 @@ dmm_mem_app_exit () return 0; } + +struct dmm_ring * +dmm_create_ring (int num, int flag, const char name[DMM_MEM_NAME_SIZE]) +{ + struct dmm_ring *ring; + const size_t bufsize = dmm_ring_bufsize (num); + + dmm_lock_map (); + + ring = dmm_map (bufsize, name); + + if (ring) + { + if (0 != dmm_ring_init (ring, num, flag)) + { + (void) dmm_unmap (ring); + ring = NULL; + } + } + + dmm_unlock_map (); + + return ring; +} + +struct dmm_ring * +dmm_attach_ring (const char name[DMM_MEM_NAME_SIZE]) +{ + return (struct dmm_ring *) dmm_lookup (name); +} + +struct dmm_ring * +dmm_malloc_ring (int num, int flag) +{ + const size_t size = dmm_ring_bufsize (num); + struct dmm_ring *ring = malloc (size); + + if (!ring) + return NULL; + + if (0 != dmm_ring_init (ring, num, flag)) + { + free (ring); + return NULL; + } + + return ring; +} + +struct dmm_ring * +dmm_create_pool (size_t elt_size, int num, int flag, + const char name[DMM_MEM_NAME_SIZE]) +{ + struct dmm_ring *pool; + const size_t pool_size = dmm_pool_bufsize (num, elt_size); + + dmm_lock_map (); + + pool = dmm_map (pool_size, name); + + if (pool) + { + if (0 != dmm_pool_init (pool, elt_size, num, flag)) + { + (void) dmm_unmap (pool); + pool = NULL; + } + } + + dmm_unlock_map (); + + return pool; +} + +struct dmm_ring * +dmm_attach_pool (const char name[DMM_MEM_NAME_SIZE]) +{ + return (struct dmm_ring *) dmm_lookup (name); +} + +struct dmm_ring * +dmm_malloc_pool (size_t elt_size, int num, int flag) +{ + const size_t size = dmm_pool_bufsize (num, elt_size); + struct dmm_ring *pool = malloc (size); + + if (!pool) + { + return NULL; + } + + if (0 != dmm_pool_init (pool, elt_size, num, flag)) + { + free (pool); + return NULL; + } + + return pool; +} + +int +dmm_mem_module_init (void *param) +{ + int ret; + const u32 proc_type = (u32) ((long) param); + + NSFW_LOGINF ("dmm mem module init]type=%u", proc_type); + + switch (proc_type) + { + case NSFW_PROC_MAIN: + ret = dmm_mem_main_init (); + break; + case NSFW_PROC_NULL: + ret = 0; + break; + default: + ret = dmm_mem_app_init (); + break; + } + + return ret; +} + +/* *INDENT-OFF* */ +NSFW_MODULE_NAME (DMM_MEMORY_MODULE) +NSFW_MODULE_PRIORITY (10) +NSFW_MODULE_INIT (dmm_mem_module_init) +/* *INDENT-ON* */ diff --git a/src/framework/mem/dmm_memory.h b/src/framework/mem/dmm_memory.h index 2fac118..b304fb8 100644 --- a/src/framework/mem/dmm_memory.h +++ b/src/framework/mem/dmm_memory.h @@ -19,16 +19,41 @@ #include <stdarg.h> #include "dmm_share.h" #include "dmm_segment.h" +#include "dmm_ring.h" -int dmm_mem_main_init (); -int dmm_mem_main_exit (); - -int dmm_mem_app_init (); -int dmm_mem_app_exit (); +#define DMM_MEMORY_MODULE "DMM_MEMORY_MODULE" extern struct dmm_segment *main_seg; extern struct dmm_segment *base_seg; +inline static void +dmm_lock_map () +{ + dmm_seg_lock (base_seg); +} + +inline static void +dmm_unlock_map () +{ + dmm_seg_unlock (base_seg); +} + +inline static int +dmm_unmap (void *mem) +{ + return dmm_mem_unmap (base_seg, mem); +} + +inline static void * +dmm_locked_map (size_t size, const char name[DMM_MEM_NAME_SIZE]) +{ + void *mem; + dmm_lock_map (); + mem = dmm_mem_map (base_seg, size, name); + dmm_unlock_map (); + return mem; +} + inline static void * dmm_map (size_t size, const char name[DMM_MEM_NAME_SIZE]) { @@ -75,4 +100,24 @@ dmm_lookupv (const char *name_fmt, ...) return dmm_mem_lookup (base_seg, name); } +int dmm_mem_main_init (); +int dmm_mem_main_exit (); +int dmm_mem_app_init (); +int dmm_mem_app_exit (); + +struct dmm_ring *dmm_create_ring (int num, int flag, + const char name[DMM_MEM_NAME_SIZE]); + +struct dmm_ring *dmm_attach_ring (const char name[DMM_MEM_NAME_SIZE]); + +struct dmm_ring *dmm_malloc_ring (int num, int flag); + +struct dmm_ring *dmm_create_pool (size_t elt_size, int num, int flag, + const char name[DMM_MEM_NAME_SIZE]); + +struct dmm_ring *dmm_attach_pool (const char name[DMM_MEM_NAME_SIZE]); + +/* allocate pool from heap */ +struct dmm_ring *dmm_malloc_pool (size_t elt_size, int num, int flag); + #endif /* _DMM_MEMORY_H_ */ diff --git a/src/framework/mem/dmm_segment.c b/src/framework/mem/dmm_segment.c index 6358506..7600d3e 100644 --- a/src/framework/mem/dmm_segment.c +++ b/src/framework/mem/dmm_segment.c @@ -16,11 +16,14 @@ #include <stdio.h> #include <string.h> +#include <limits.h> +#include "dmm_common.h" #include "dmm_rwlock.h" #include "dmm_segment.h" #include "nstack_log.h" -#define SECTION_SIZE 64 /* cache line size */ +#define BLOCK_SIZE 64 /* cache line size */ +#define BLOCK_MASK (BLOCK_SIZE - 1) #define FIRST_NAME "FIRST SECTION FOR SEGMENT" #define LAST_NAME "LAST SECTION FOR FREE HEAD" @@ -28,6 +31,11 @@ #define MEM_ERR(fmt, ...) \ NS_LOGPID(LOGFW, "DMM-MEM", NSLOG_ERR, fmt, ##__VA_ARGS__) +typedef struct +{ + char _dummy_block_size[BLOCK_SIZE]; +} _dmm_packed __BLOCK; + /* init create: \--total number @@ -53,13 +61,15 @@ typedef struct dmm_section int prev_rel; int used_num; int free_num; - int __flags; /* reserved */ + int flags; /* reserved */ size_t req_size; /* in bytes */ int less_rel; /* for free list */ int more_rel; /* for free list */ char name[DMM_MEM_NAME_SIZE]; -} __attribute__ ((__aligned__ (SECTION_SIZE))) section_t; -SIZE_OF_TYPE_EQUAL_TO (section_t, SECTION_SIZE); +} _dmm_cache_aligned section_t; + +/* dmm_section struct hold blocks number */ +#define SECTION_HOLD ((sizeof(struct dmm_section) + (BLOCK_SIZE - 1)) / BLOCK_SIZE) struct dmm_segment { @@ -80,23 +90,22 @@ CALC_NUM (size_t size) { if (size) { - const size_t MASK = SECTION_SIZE - 1; - return (size + MASK) / SECTION_SIZE + 1; + return SECTION_HOLD + (size + BLOCK_MASK) / BLOCK_SIZE; } - return 2; /* if size is 0, then alloc 1 block */ + return SECTION_HOLD + 1; /* if size is 0, then alloc 1 block */ } inline static int SEC_REL (const section_t * base, const section_t * sec) { - return sec - base; + return (__BLOCK *) sec - (__BLOCK *) base; } section_t * REL_SEC (section_t * base, int rel) { - return base + rel; + return (section_t *) ((__BLOCK *) base + rel); } inline static int @@ -108,25 +117,25 @@ SEC_INDEX (struct dmm_segment *seg, section_t * sec) inline static section_t * LESS_SEC (section_t * sec) { - return sec + sec->less_rel; + return REL_SEC (sec, sec->less_rel); } inline static section_t * MORE_SEC (section_t * sec) { - return sec + sec->more_rel; + return REL_SEC (sec, sec->more_rel); } inline static section_t * PREV_SEC (section_t * sec) { - return sec + sec->prev_rel; + return REL_SEC (sec, sec->prev_rel); } inline static section_t * NEXT_SEC (section_t * sec) { - return sec + (sec->free_num + sec->used_num); + return REL_SEC (sec, sec->free_num + sec->used_num); } inline static int @@ -136,7 +145,7 @@ CHECK_ADDR (struct dmm_segment *seg, void *mem) return -1; if (mem > (void *) seg->last) return -1; - if ((long) mem & (SECTION_SIZE - 1)) + if ((long) mem & BLOCK_MASK) return -1; return 0; @@ -185,7 +194,7 @@ mem_alloc (struct dmm_segment *seg, size_t size) } while (num > pos->free_num); - /* allocate pos pos section tail */ + /* allocate from pos section's tail */ /* change next section's prev possion */ next = NEXT_SEC (pos); @@ -201,13 +210,13 @@ mem_alloc (struct dmm_segment *seg, size_t size) sec->more_rel = 0; sec->name[0] = 0; - /* adjust pos */ + /* adjust pos section */ pos->free_num -= num; less = LESS_SEC (pos); more = MORE_SEC (pos); - /* remove pos free list */ + /* remove from free list */ less->more_rel = SEC_REL (less, more); more->less_rel = SEC_REL (more, less); pos->more_rel = 0; @@ -294,23 +303,35 @@ mem_free (struct dmm_segment *seg, section_t * sec) } void +dmm_seg_lock (struct dmm_segment *seg) +{ + dmm_write_lock (&seg->lock); +} + +void +dmm_seg_unlock (struct dmm_segment *seg) +{ + dmm_write_unlock (&seg->lock); +} + +void dmm_seg_dump (struct dmm_segment *seg) { section_t *sec; dmm_read_lock (&seg->lock); - (void) printf ("---- segment:%p base:%p size:%lu --------------\n" - " first[%d]:%p last[%d]:%p total_num:%d used_num:%d\n" - " sec_num:%d used_size:%lu use%%:%lu%% free%%:%lu%%\n", - seg, seg->base, seg->size, - SEC_INDEX (seg, seg->first), seg->first, - SEC_INDEX (seg, seg->last), seg->last, - seg->total_num, seg->used_num, - seg->sec_num, seg->used_size, - seg->used_size * 100 / seg->size, - (seg->total_num - - seg->used_num) * SECTION_SIZE * 100 / seg->size); + (void) + printf + ("---- segment:%p base:%p size:%lu ---- BS:%u SS:%lu SH:%lu ----\n" + " first[%d]:%p last[%d]:%p total_num:%d used_num:%d\n" + " sec_num:%d used_size:%lu use%%:%lu%% free%%:%ld%%\n", seg, + seg->base, seg->size, BLOCK_SIZE, sizeof (struct dmm_section), + SECTION_HOLD, SEC_INDEX (seg, seg->first), seg->first, SEC_INDEX (seg, + seg->last), + seg->last, seg->total_num, seg->used_num, seg->sec_num, seg->used_size, + seg->used_size * 100 / seg->size, + (seg->total_num - seg->used_num) * (BLOCK_SIZE * 100) / seg->size); (void) printf ("----------------------------------------\n" "%18s %9s %9s %9s %9s %10s %9s %9s %s\n", @@ -345,16 +366,15 @@ dmm_seg_dump (struct dmm_segment *seg) inline static int align_section (void *base, size_t size, section_t ** first) { - const long MASK = ((long) SECTION_SIZE - 1); const int SEG_NUM = CALC_NUM (sizeof (struct dmm_segment)); const long align = (long) base; - const long addr = (align + MASK) & (~MASK); - const size_t total = (size - (addr - align)) / SECTION_SIZE; + const long addr = (align + BLOCK_MASK) & (~BLOCK_MASK); + const size_t total = (size - (addr - align)) / BLOCK_SIZE; - if (total > 0x7fffFFFF) + if (total > INT_MAX) return -1; - if (total < SEG_NUM + 1) /* first+segment + last */ + if (total < SEG_NUM + SECTION_HOLD) /* first+segment + last */ return -1; *first = (section_t *) addr; @@ -364,21 +384,21 @@ align_section (void *base, size_t size, section_t ** first) struct dmm_segment * dmm_seg_create (void *base, size_t size) { - const int SEG_NUM = CALC_NUM (sizeof (struct dmm_segment)); section_t *first, *last; struct dmm_segment *seg; - int total = align_section (base, size, &first); + const int total = align_section (base, size, &first); + const int SEG_NUM = CALC_NUM (sizeof (struct dmm_segment)); if (total <= 0) return NULL; - last = first + (total - 1); + last = first + (total - SECTION_HOLD); /* first section */ first->prev_rel = 0; first->used_num = SEG_NUM; first->req_size = sizeof (struct dmm_segment); - first->free_num = total - (SEG_NUM + 1); + first->free_num = total - (SEG_NUM + SECTION_HOLD); first->less_rel = SEC_REL (first, last); first->more_rel = SEC_REL (first, last); first->name[0] = 0; @@ -402,9 +422,9 @@ dmm_seg_create (void *base, size_t size) seg->first = first; seg->last = last; seg->total_num = total; - seg->sec_num = 2; + seg->sec_num = 2; /* first and tail */ seg->used_size = sizeof (struct dmm_segment); - seg->used_num = first->used_num; + seg->used_num = first->used_num + SECTION_HOLD; return seg; } @@ -414,12 +434,12 @@ dmm_seg_attach (void *base, size_t size) { section_t *first, *last; struct dmm_segment *seg; - int total = align_section (base, size, &first); + const int total = align_section (base, size, &first); if (total <= 0) return NULL; - last = first + (total - 1); + last = first + (total - SECTION_HOLD); seg = (struct dmm_segment *) (first + 1); if (seg->base != base) @@ -451,9 +471,9 @@ dmm_mem_alloc (struct dmm_segment *seg, size_t size) { section_t *sec; - dmm_write_lock (&seg->lock); + dmm_seg_lock (seg); sec = mem_alloc (seg, size); - dmm_write_unlock (&seg->lock); + dmm_seg_unlock (seg); return sec ? sec + 1 : NULL; } @@ -467,9 +487,9 @@ dmm_mem_free (struct dmm_segment *seg, void *mem) return -1; } - dmm_write_lock (&seg->lock); + dmm_seg_lock (seg); mem_free (seg, ((section_t *) mem) - 1); - dmm_write_unlock (&seg->lock); + dmm_seg_unlock (seg); return 0; } @@ -499,45 +519,36 @@ dmm_mem_map (struct dmm_segment *seg, size_t size, if (!name || !name[0] || strlen (name) >= DMM_MEM_NAME_SIZE) return NULL; - dmm_write_lock (&seg->lock); - sec = mem_lookup (seg, name); if (sec) { MEM_ERR ("Map '%s' exist", name); mem = NULL; } - else if (!(sec = mem_alloc (seg, size))) + else if (NULL != (sec = mem_alloc (seg, size))) { - MEM_ERR ("alloc '%s' failed for size %lu", name, size); - mem = NULL; + (void) strncpy (sec->name, name, sizeof (sec->name)); + mem = sec + 1; } else { - (void) strncpy (sec->name, name, sizeof (sec->name)); - mem = sec + 1; + MEM_ERR ("alloc '%s' failed for size %lu", name, size); + mem = NULL; } - dmm_write_unlock (&seg->lock); - return mem; } int -dmm_mem_unmap (struct dmm_segment *seg, const char name[DMM_MEM_NAME_SIZE]) +dmm_mem_unmap (struct dmm_segment *seg, void *mem) { - section_t *sec; - - if (!name || !name[0]) - return -1; - - dmm_write_lock (&seg->lock); - - sec = mem_lookup (seg, name); - if (sec) - mem_free (seg, sec); + if (CHECK_ADDR (seg, mem)) + { + MEM_ERR ("Invalid address:%p", mem); + return -1; + } - dmm_write_unlock (&seg->lock); + mem_free (seg, ((section_t *) mem) - 1); - return sec != NULL ? 0 : -1; + return 0; } diff --git a/src/framework/mem/dmm_segment.h b/src/framework/mem/dmm_segment.h index 135f347..500e4e8 100644 --- a/src/framework/mem/dmm_segment.h +++ b/src/framework/mem/dmm_segment.h @@ -18,6 +18,11 @@ #define DMM_MEM_NAME_SIZE 32 +struct dmm_segment; + +void dmm_seg_lock (struct dmm_segment *seg); +void dmm_seg_unlock (struct dmm_segment *seg); + struct dmm_segment *dmm_seg_create (void *base, size_t size); struct dmm_segment *dmm_seg_attach (void *base, size_t size); void dmm_seg_dump (struct dmm_segment *seg); @@ -29,7 +34,6 @@ void *dmm_mem_lookup (struct dmm_segment *seg, const char name[DMM_MEM_NAME_SIZE]); void *dmm_mem_map (struct dmm_segment *seg, size_t size, const char name[DMM_MEM_NAME_SIZE]); -int dmm_mem_unmap (struct dmm_segment *seg, - const char name[DMM_MEM_NAME_SIZE]); +int dmm_mem_unmap (struct dmm_segment *seg, void *mem); #endif /* #ifndef _DMM_SEGMENT_H_ */ diff --git a/src/framework/ring/dmm_ring.c b/src/framework/ring/dmm_ring.c new file mode 100644 index 0000000..2b1b1ee --- /dev/null +++ b/src/framework/ring/dmm_ring.c @@ -0,0 +1,94 @@ +/* +* +* 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 <stdio.h> +#include <string.h> + +#include "nstack_log.h" + +#include "dmm_ring.h" + +void +dmm_ring_dump (struct dmm_ring *ring, int list) +{ + if (!ring) + return; + + (void) printf ("ring:%p size:%d flag:0x%x prod:%d-%d/%d cons:%d-%d/%d", + ring, ring->size, ring->flag, + ring->prod_head, ring->prod_tail, ring->is_sp, + ring->cons_head, ring->cons_tail, ring->is_sc); + if (list && dmm_ring_count (ring)) + { + int count = 0; + void **p = (void **) (ring + 1); + int i = ring->cons_head; + while (i != ring->prod_tail) + { + if ((count++ & 3) == 0) + (void) printf ("\n"); + (void) printf (" %d:%p", i, p[i]); + if (++i >= ring->size) + i = 0; + } + } + (void) printf ("\n----------------\n"); +} + +int +dmm_ring_init (struct dmm_ring *ring, int num, int flag) +{ + if (num > DMM_RING_MAX_NUM) + return -1; + + (void) memset (ring, 0, sizeof (struct dmm_ring)); + + ring->size = num + 1; + + ring->prod_head = 0; + ring->prod_tail = 0; + ring->is_sp = flag & DMM_RING_INIT_SP; + + ring->cons_head = 0; + ring->cons_tail = 0; + ring->is_sc = flag & DMM_RING_INIT_SC; + + return 0; +} + +int +dmm_pool_init (struct dmm_ring *pool, size_t elt_size, int num, uint32_t flag) +{ + int ret; + void *array; + const size_t ring_size = dmm_ring_bufsize (num); + + if (0 != dmm_ring_init (pool, num, flag)) + { + NSFW_LOGERR ("init pool's ring failed, num:%d flag:0x%x ring_size:%lu", + num, flag, ring_size); + return -1; + } + + array = (char *) pool + ring_size; + ret = dmm_array_enqueue (pool, array, num, elt_size); + if (ret != num) + { + NSFW_LOGERR ("enqueue failed, num:%d elt_size:%lu", num, elt_size); + return -1; + } + + return 0; +} diff --git a/src/framework/ring/dmm_ring.h b/src/framework/ring/dmm_ring.h new file mode 100644 index 0000000..914eff2 --- /dev/null +++ b/src/framework/ring/dmm_ring.h @@ -0,0 +1,205 @@ +/* +* +* 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 _DMM_RING_H_ +#define _DMM_RING_H_ + +#include <stdint.h> + +#include "dmm_atomic.h" +#include "dmm_pause.h" +#include "dmm_barrier.h" +#include "dmm_common.h" + +#define DMM_RING_MAX_NUM 0x7FFFFFFE /* 2,147,483,646 */ + +#define DMM_RING_INIT_SP 0x0001 +#define DMM_RING_INIT_SC 0x0002 +#define DMM_RING_INIT_MPMC 0 +#define DMM_RING_INIT_SPSC (DMM_RING_INIT_SP | DMM_RING_INIT_SC) + +struct dmm_ring +{ + int size; + uint32_t flag; + + volatile int prod_head; + volatile int prod_tail; + int is_sp; + int _prod_pad; + + volatile int cons_head; + volatile int cons_tail; + int is_sc; + int _cons_pad; +} _dmm_cache_aligned; + +#include "dmm_ring_base.h" + +void dmm_ring_dump (struct dmm_ring *ring, int list); +int dmm_ring_init (struct dmm_ring *ring, int num, int flag); +int dmm_pool_init (struct dmm_ring *pool, size_t elt_size, + int num, uint32_t flag); + +inline static size_t +dmm_ring_bufsize (int num) +{ + size_t size = sizeof (struct dmm_ring); + + size += (sizeof (void *) * (num + 1)); + + return dmm_align (size, DMM_CACHE_LINE_SIZE); +} + +inline static size_t +dmm_pool_arraysize (int num, int elt_size) +{ + const size_t size = elt_size * num; + return dmm_align (size, DMM_CACHE_LINE_SIZE); +} + +inline static size_t +dmm_pool_bufsize (int num, int elt_size) +{ + return dmm_ring_bufsize (num) + dmm_pool_arraysize (num, elt_size); +} + +inline static int +dmm_ring_count (struct dmm_ring *ring) +{ + const int count = ring->prod_tail - ring->cons_head; + + if (count >= 0) + return count; + return count + ring->size; +} + +inline static int +dmm_ring_free_count (struct dmm_ring *ring) +{ + const int count = ring->cons_tail - ring->prod_head; + + if (count >= 0) + return count; + return count + ring->size; +} + +/* enqueue several objects in a ring. + ring: point to the ring + p: object pointer list array + num: number of object + fixed: enqueue fixed number +single_cons: is single producer + <return>: number of enqueued object, 0: queue is full +*/ +inline static int +dmm_ring_enqueue (struct dmm_ring *ring, void **p, int num, + int fixed, int is_sp) +{ + int n, pos, new_pos; + + n = dmm_enqueue_prep (ring, num, &pos, fixed, is_sp); + + if (n == 0) + return 0; + + new_pos = dmm_enqueue_copy (ring, pos, p, n); + + dmm_enqueue_done (ring, pos, new_pos, is_sp); + + return n; +} + +inline static int +dmm_fix_enqueue (struct dmm_ring *ring, void **p, int num) +{ + return dmm_ring_enqueue (ring, p, num, 1, ring->is_sp); +} + +inline static int +dmm_var_enqueue (struct dmm_ring *ring, void **p, int num) +{ + return dmm_ring_enqueue (ring, p, num, 0, ring->is_sp); +} + +inline static int +dmm_enqueue (struct dmm_ring *ring, void *p) +{ + return dmm_var_enqueue (ring, &p, 1); +} + +inline static int +dmm_array_enqueue (struct dmm_ring *ring, void *array, + int num, size_t elt_size) +{ + int n, pos, new_pos; + + n = dmm_enqueue_prep (ring, num, &pos, 0, ring->is_sp); + + if (n == 0) + return 0; + + new_pos = dmm_enqueue_copy_array (ring, pos, array, n, elt_size); + + dmm_enqueue_done (ring, pos, new_pos, ring->is_sp); + + return n; +} + +/* dequeue several objects from a ring. + ring: point to the ring + p: save object array + num: number of p + fixed: dequeue fixed number +single_cons: is single consumer + <return>: number of dequeued object, 0: queue is empty +*/ +inline static int +dmm_ring_dequeue (struct dmm_ring *ring, void **p, int num, + int fixed, int single_cons) +{ + int n, pos, new_pos; + + n = dmm_dequeue_prep (ring, num, &pos, fixed, single_cons); + + if (n == 0) + return 0; + + new_pos = dmm_dequeue_copy (ring, pos, p, n); + + dmm_dequeue_done (ring, pos, new_pos, single_cons); + + return n; +} + +inline static int +dmm_fix_dequeue (struct dmm_ring *ring, void **p, int num) +{ + return dmm_ring_dequeue (ring, p, num, 1, ring->is_sc); +} + +inline static int +dmm_var_dequeue (struct dmm_ring *ring, void **p, int num) +{ + return dmm_ring_dequeue (ring, p, num, 0, ring->is_sc); +} + +inline static int +dmm_dequeue (struct dmm_ring *ring, void **p) +{ + return dmm_var_dequeue (ring, p, 1); +} + +#endif diff --git a/src/framework/ring/dmm_ring_base.h b/src/framework/ring/dmm_ring_base.h new file mode 100644 index 0000000..9a48eea --- /dev/null +++ b/src/framework/ring/dmm_ring_base.h @@ -0,0 +1,189 @@ +/* +* +* 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 _DMM_RING_BASE_H_ +#define _DMM_RING_BASE_H_ + +#ifndef _DMM_RING_H_ +#error include dmm_ring.h please +#endif + +inline static int +__move_head (volatile int *head, int ring_size, + int old_head, int real_num, int is_single) +{ + int new_head = old_head + real_num; + + if (new_head >= ring_size) + { + new_head -= ring_size; + } + + if (is_single) + { + *head = new_head; + return 1; + } + + return dmm_atomic_swap ((dmm_atomic_t *) head, old_head, new_head); +} + +inline static int +dmm_enqueue_prep (struct dmm_ring *ring, const int num, + int *pos, const int fixed, int is_sp) +{ + int succ, real, head; + const int ring_size = ring->size; + + do + { + head = ring->prod_head; + + dmm_barrier (); + + if ((real = ring->cons_tail - head - 1) < 0) + real += ring_size; + + if (real >= num) + real = num; + else if (fixed) + return 0; + + if (real <= 0) + return 0; + + succ = __move_head (&ring->prod_head, ring_size, head, real, is_sp); + } + while (!succ); + + *pos = head; + return real; +} + +inline static int +dmm_enqueue_copy (struct dmm_ring *ring, int pos, void **from, int num) +{ + const int ring_size = ring->size; + void **box = (void **) (ring + 1); + + while (num > 0) + { + box[pos++] = *from++; + if (pos >= ring_size) + pos = 0; + --num; + } + + return pos; +} + +inline static void +dmm_enqueue_done (struct dmm_ring *ring, int pos, int new_pos, int is_sp) +{ + dmm_barrier (); + + if (!is_sp) + { + while (ring->prod_tail != pos) + dmm_pause (); + } + + ring->prod_tail = new_pos; +} + +inline static int +dmm_enqueue_copy_array (struct dmm_ring *ring, int pos, + void *array, int num, size_t elt_size) +{ + const int ring_size = ring->size; + void **box = (void **) (ring + 1); + char *from = (char *) array; + + while (num > 0) + { + box[pos++] = from; + if (pos >= ring_size) + pos = 0; + from += elt_size; + --num; + } + + return pos; +} + +inline static int +dmm_dequeue_prep (struct dmm_ring *ring, const int num, int *pos, + const int fixed, int is_sc) +{ + int succ, real, head; + const int ring_size = ring->size; + + do + { + head = ring->cons_head; + + dmm_barrier (); + + if ((real = ring->prod_tail - head) < 0) + real += ring_size; + + if (real >= num) + real = num; + else if (fixed) + return 0; + + if (real <= 0) + return 0; + + succ = __move_head (&ring->cons_head, ring_size, head, real, is_sc); + } + while (!succ); + + *pos = head; + return real; +} + +inline static int +dmm_dequeue_copy (struct dmm_ring *ring, int pos, void **to, int num) +{ + const int ring_size = ring->size; + void **box = (void **) (ring + 1); + + while (num > 0) + { + *to++ = box[pos++]; + if (pos >= ring_size) + pos = 0; + --num; + } + + return pos; +} + +inline static void +dmm_dequeue_done (struct dmm_ring *ring, int pos, int new_pos, int is_sc) +{ + dmm_barrier (); + + if (!is_sc) + { + while (ring->cons_tail != pos) + dmm_pause (); + } + + ring->cons_tail = new_pos; +} + +#endif diff --git a/src/nSocket/CMakeLists.txt b/src/nSocket/CMakeLists.txt index 5701e8e..f428e7b 100644 --- a/src/nSocket/CMakeLists.txt +++ b/src/nSocket/CMakeLists.txt @@ -14,12 +14,6 @@ # limitations under the License. ######################################################################### - -if(WITH_HAL_LIB) -else() - SET(PAL_H_DIRECTORIES "/usr/include/dpdk/") -endif() - INCLUDE_DIRECTORIES( include/ kernel/ @@ -28,7 +22,6 @@ INCLUDE_DIRECTORIES( nstack/event/epoll nstack/event/select ${SECUREC_SRC_H} - ${PAL_H_DIRECTORIES} ${CMAKE_CURRENT_LIST_DIR}/../adapt ${CMAKE_CURRENT_LIST_DIR}/../../thirdparty/json/json-c-0.12.1 ) @@ -42,8 +35,5 @@ TARGET_LINK_LIBRARIES( ${LIB_PATH_STATIC}/libglog.a dmm_api -Wl,--no-whole-archive,-lstdc++ - rte_eal - rte_mempool - rte_mbuf - rte_ring) +) ADD_DEPENDENCIES(nStackAPI dmm_api) diff --git a/src/nSocket/include/nstack_atomic.h b/src/nSocket/include/nstack_atomic.h deleted file mode 100644 index bb5ec13..0000000 --- a/src/nSocket/include/nstack_atomic.h +++ /dev/null @@ -1,57 +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 _NSTACK_ATOMIC_H_ -#define _NSTACK_ATOMIC_H_ -#include <stdio.h> -#include <stdlib.h> - -#include "nstack_types.h" - -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C"{ -/* *INDENT-ON* */ -#endif - -typedef struct -{ - volatile ns_int32 counter; -} atomic_t; - -#define atomic_set(v, i) ((v)->counter = (i)) - -#define atomic_fetch_and_add(v, i) __sync_fetch_and_add(&(v)->counter, i) -#define atomic_add_and_fetch(v, i) __sync_add_and_fetch(&(v)->counter, i) - -#define atomic_fetch_and_sub(v, i) __sync_fetch_and_sub(&(v)->counter, i) -#define atomic_sub_and_fetch(v, i) __sync_sub_and_fetch(&(v)->counter, i) - -#define atomic_read(v) atomic_fetch_and_add(v, 0) -#define atomic_inc(v) atomic_add_and_fetch(v, 1) -#define atomic_dec(v)atomic_sub_and_fetch(v, 1) -#define atomic_add(v, i) atomic_add_and_fetch(v, i) -#define atomic_sub(v, i) atomic_sub_and_fetch(v,i) - -#define cas(ptr, oldValue, exchange) __sync_bool_compare_and_swap(ptr, oldValue, exchange) - -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif - -#endif diff --git a/src/nSocket/include/nstack_eventpoll.h b/src/nSocket/include/nstack_eventpoll.h index afb0b05..ac9622d 100644 --- a/src/nSocket/include/nstack_eventpoll.h +++ b/src/nSocket/include/nstack_eventpoll.h @@ -19,14 +19,17 @@ #include "ephlist.h" #include "eprb_tree.h" -#include "common_mem_api.h" #include "types.h" #include <semaphore.h> #include <sys/epoll.h> #include <stdio.h> #include <stdlib.h> + +#include "nstack_types.h" #include "nstack_securec.h" #include "nstack_log.h" +#include "dmm_ring.h" +#include "dmm_spinlock.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -68,8 +71,7 @@ struct eventpoll * Protect the this structure access * This is for event add to ready list and poll out */ - sys_sem_st lock; - + dmm_spinlock_t lock; /* * This semaphore is used to ensure that files are not removed * while epoll is using them. This is read-held during the event @@ -78,7 +80,7 @@ struct eventpoll * When we do epoll_ctl, we write lock * When we collecting data , we read lock */ - sys_sem_st sem; + dmm_spinlock_t sem; /* * This semaphore is used to block epoll_wait function @@ -102,14 +104,12 @@ struct eventpoll struct eventpoll_pool { - void *ring; + struct dmm_ring *ring; struct eventpoll *pool; }; typedef struct { - int iindex; - int iNext; int fd; i32 epaddflag; i32 fdtype; /*0: socket fd, 1: epoll fd */ @@ -117,21 +117,18 @@ typedef struct i32 rmidx; /* copy of fdInf->rmidx */ i32 protoFD[NSEP_SMOD_MAX]; /* copy of fdInf->protoFD */// Here we need to set router infomations dependency struct eventpoll *ep; - sys_sem_st epiLock; - sys_sem_st freeLock; + dmm_spinlock_t epiLock; + dmm_spinlock_t freeLock; struct ep_list epiList; /* This restore the epitem of this file descriptor */ u32 sleepTime; //add for NSTACK_SEM_SLEEP nsep_pidinfo pidinfo; nsfw_res res_chk; - void *private_data; /*add for debug, just used to record extern infomation, for example sbr conn */ - i32 reserv[4]; } nsep_epollInfo_t; typedef struct { - void *ring; + struct dmm_ring *ring; nsep_epollInfo_t *pool; - char last_reserve[8]; //reserve for update } nsep_infoPool_t; struct epitem @@ -149,13 +146,12 @@ struct epitem unsigned int ovf_revents; int fd; u32 pid; - void *private_data; nsfw_res res_chk; }; struct epitem_pool { - void *ring; + struct dmm_ring *ring; struct epitem *pool; }; diff --git a/src/nSocket/include/nstack_types.h b/src/nSocket/include/nstack_types.h index 90b538e..556dc7e 100644 --- a/src/nSocket/include/nstack_types.h +++ b/src/nSocket/include/nstack_types.h @@ -20,7 +20,6 @@ #include <time.h> #include <stdint.h> #include <stdlib.h> -#include <common_pal_bitwide_adjust.h> #ifdef __cplusplus /* *INDENT-OFF* */ diff --git a/src/nSocket/include/select_adapt.h b/src/nSocket/include/select_adapt.h index 2898c76..072f53b 100644 --- a/src/nSocket/include/select_adapt.h +++ b/src/nSocket/include/select_adapt.h @@ -35,9 +35,8 @@ #include "types.h" #include "nstack_module.h" -#include "common_mem_spinlock.h" #include "nstack_securec.h" -#include "common_func.h" +#include "dmm_spinlock.h" #define SBR_MAX_FD_NUM MAX_SOCKET_NUM @@ -54,11 +53,11 @@ } typedef sem_t select_sem_t; -typedef common_mem_spinlock_t select_spinlock_t; +typedef dmm_spinlock_t select_spinlock_t; -#define select_spin_lock(lock) (common_mem_spinlock_lock((lock))) -#define select_spin_unlock(lock) (common_mem_spinlock_unlock((lock))) -#define select_spin_lock_init(lock) (common_mem_spinlock_init((lock))) +#define select_spin_lock(lock) (dmm_spin_lock((lock))) +#define select_spin_unlock(lock) (dmm_spin_unlock((lock))) +#define select_spin_lock_init(lock) (dmm_spin_init((lock))) #define select_sem_wait(sem) (sem_wait((sem))) #define select_sem_init(sem, share, val) (sem_init((sem), (share), (val))) diff --git a/src/nSocket/nstack/event/epoll/nstack_eventpoll.c b/src/nSocket/nstack/event/epoll/nstack_eventpoll.c index a8b3757..1777aee 100644 --- a/src/nSocket/nstack/event/epoll/nstack_eventpoll.c +++ b/src/nSocket/nstack/event/epoll/nstack_eventpoll.c @@ -14,17 +14,21 @@ * limitations under the License. */ +#include <errno.h> + #include "nstack_eventpoll.h" #include "nstack_log.h" #include "nsfw_recycle_api.h" #include "nstack_securec.h" #include "nstack_module.h" #include "nstack_sockops.h" -#include "nsfw_mem_api.h" #include "nstack_fd_mng.h" #include "nstack.h" #include "nstack_dmm_adpt.h" +#include "dmm_sys.h" +#include "dmm_memory.h" + #ifdef __cplusplus /* *INDENT-OFF* */ extern "C"{ @@ -55,21 +59,21 @@ nsep_ctl_event_add (struct epitem *epi, struct eventpoll *ep, case nstack_ep_triggle_add: if (events & epi->event.events) { - sys_arch_lock_with_pid (&ep->lock); + dmm_spin_lock_pid (&ep->lock); if (!EP_HLIST_NODE_LINKED (&epi->rdllink)) { ep_hlist_add_tail (&ep->rdlist, &epi->rdllink); } - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); sem_post (&ep->waitSem); } break; case nstack_ep_triggle_mod: - sys_arch_lock_with_pid (&ep->lock); + dmm_spin_lock_pid (&ep->lock); if (events & epi->event.events) { @@ -88,7 +92,7 @@ nsep_ctl_event_add (struct epitem *epi, struct eventpoll *ep, } } - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); break; default: break; @@ -114,7 +118,7 @@ nsep_epctl_triggle (struct epitem *epi, nsep_epollInfo_t * info, struct eventpoll *ep = NULL; nsep_epollInfo_t *epInfo = NULL; - ep = ADDR_SHTOL (epi->ep); + ep = epi->ep; epfd = ep->epfd; epInfo = nsep_get_infoBySock (epfd); @@ -190,7 +194,7 @@ nsep_rbtree_insert (struct eventpoll *ep, struct epitem *epi) break; } - parent = (struct ep_rb_node *) ADDR_SHTOL (*p); + parent = *p; epic = ep_rb_entry (parent, struct epitem, rbn); if (epi->fd > epic->fd) { @@ -226,8 +230,7 @@ nsep_insert_node (struct eventpoll *ep, struct epoll_event *event, EP_HLIST_INIT_NODE (&epi->lkFDllink); epi->nwait = 0; - epi->ep = (struct eventpoll *) ADDR_LTOSH_EXT (ep); - epi->epInfo = (nsep_epollInfo_t *) ADDR_LTOSH_EXT (fdInfo); + epi->ep = ep; epi->revents = 0; epi->ovf_revents = 0; epi->event = *event; @@ -238,10 +241,10 @@ nsep_insert_node (struct eventpoll *ep, struct epoll_event *event, /* Add the current item to the list of active epoll hook for this file This should lock because file descriptor may be called by other eventpoll */ - sys_arch_lock_with_pid (&fdInfo->epiLock); + dmm_spin_lock_pid (&fdInfo->epiLock); ep_list_add_tail (&fdInfo->epiList, &epi->fllink); - epi->private_data = (void *) ADDR_LTOSH_EXT (fdInfo); - sys_sem_s_signal (&fdInfo->epiLock); + epi->epInfo = fdInfo; + dmm_spin_unlock (&fdInfo->epiLock); /* Add epitem to eventpoll fd list, don't need lock here because epoll_ctl will lock before calling this function */ nsep_rbtree_insert (ep, epi); @@ -306,20 +309,18 @@ nsep_epctl_del (struct eventpoll *ep, struct epitem *epi) { int ret = 0; - nsep_epollInfo_t *epInfo = - (nsep_epollInfo_t *) ADDR_SHTOL (epi->private_data); + nsep_epollInfo_t *epInfo = epi->epInfo; NSSOC_LOGINF ("epfd=%d,fd=%d,epi=%p", ep->epfd, epi->fd, epi); // modify log format error nsep_epctl_triggle (epi, epInfo, nstack_ep_triggle_del); - sys_arch_lock_with_pid (&epInfo->epiLock); + dmm_spin_lock_pid (&epInfo->epiLock); ep_list_del (&epInfo->epiList, &epi->fllink); + dmm_spin_unlock (&epInfo->epiLock); - sys_sem_s_signal (&epInfo->epiLock); - - sys_arch_lock_with_pid (&ep->lock); + dmm_spin_lock_pid (&ep->lock); ret = nstack_ep_unlink (ep, epi); - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); nsep_free_epitem (epi); return ret; @@ -340,9 +341,9 @@ nsep_epctl_mod (struct eventpoll *ep, NSSOC_LOGINF ("epfd=%d,fd=%d,events=%u", ep->epfd, epInfo->fd, events->events); - sys_arch_lock_with_pid (&ep->lock); + dmm_spin_lock_pid (&ep->lock); epi->event = *events; /* kernel tells me that I need to modify epi->event in lock context */ - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); nsep_epctl_triggle (epi, epInfo, nstack_ep_triggle_mod); return 0; @@ -367,11 +368,10 @@ nsep_events_proc (struct eventpoll *ep, { node = head; epi = ep_hlist_entry (node, struct epitem, rdllink); - head = (struct ep_hlist_node *) ADDR_SHTOL (node->next); + head = (struct ep_hlist_node *) (node->next); EP_HLIST_INIT_NODE (node); - nsep_epollInfo_t *fdInfo = - (nsep_epollInfo_t *) ADDR_SHTOL (epi->private_data); + nsep_epollInfo_t *fdInfo = epi->epInfo; if (fdInfo->rmidx != -1) { @@ -434,48 +434,47 @@ nsep_ep_poll (struct eventpoll *ep, struct epoll_event *events, int maxevents, return 0; } - sys_arch_lock_with_pid (&ep->sem); + dmm_spin_lock_pid (&ep->sem); if (EP_HLIST_EMPTY (&ep->rdlist)) { goto out; } - sys_arch_lock_with_pid (&ep->lock); - head = (struct ep_hlist_node *) ADDR_SHTOL (ep->rdlist.head); + dmm_spin_lock_pid (&ep->lock); + head = (struct ep_hlist_node *) (ep->rdlist.head); if (!head) { - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); goto out; } - nhead.head = (struct ep_hlist_node *) ADDR_SHTOL (head->next); - nhead.tail = (struct ep_hlist_node *) ADDR_SHTOL (ep->rdlist.tail); + nhead.head = (struct ep_hlist_node *) (head->next); + nhead.tail = (struct ep_hlist_node *) (ep->rdlist.tail); /*unlink from ep->rdlist */ EP_HLIST_INIT (&(ep->rdlist)); ep->ovflist = NULL; - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); /*get event list */ evt = nsep_events_proc (ep, &nhead, events, maxevents, eventflag, num); - sys_arch_lock_with_pid (&ep->lock); + dmm_spin_lock_pid (&ep->lock); /*put rest epitem back to the rdlist */ if (nhead.head) { - tail = (struct ep_hlist_node *) ADDR_SHTOL (ep->rdlist.tail); - tail->next = (struct ep_hlist_node *) ADDR_LTOSH (nhead.head); - nhead.head->pprev = (struct ep_hlist_node **) ADDR_LTOSH (&tail->next); - ep->rdlist.tail = (struct ep_hlist_node *) ADDR_LTOSH (nhead.tail); + tail = (struct ep_hlist_node *) (ep->rdlist.tail); + tail->next = (struct ep_hlist_node *) (nhead.head); + nhead.head->pprev = (struct ep_hlist_node **) (&tail->next); + ep->rdlist.tail = (struct ep_hlist_node *) (nhead.tail); } /*put the epitem in ep->ovflist to rdlist */ - for (nepi = (struct epitem *) ADDR_SHTOL (ep->ovflist); + for (nepi = (struct epitem *) (ep->ovflist); (epi = nepi) != NULL; - nepi = (struct epitem *) ADDR_SHTOL (epi->next), epi->next = - NSEP_EP_UNACTIVE_PTR) + nepi = (struct epitem *) (epi->next), epi->next = NSEP_EP_UNACTIVE_PTR) { epi->revents |= epi->ovf_revents; /*set the flag that already have event int the rdlist */ - fdInfo = (nsep_epollInfo_t *) ADDR_SHTOL (epi->private_data); + fdInfo = epi->epInfo; if (eventflag && fdInfo && (fdInfo->rmidx >= 0) && (fdInfo->rmidx < num)) { @@ -488,9 +487,9 @@ nsep_ep_poll (struct eventpoll *ep, struct epoll_event *events, int maxevents, } } ep->ovflist = NSEP_EP_UNACTIVE_PTR; - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); out: - sys_sem_s_signal (&ep->sem); + dmm_spin_unlock (&ep->sem); NSSOC_LOGDBG ("Return epfd=%d,evt=%d,EP_HLIST_EMPTY(&ep->rdlist)=%d", ep->epfd, evt, EP_HLIST_EMPTY (&ep->rdlist)); return evt; @@ -548,10 +547,10 @@ nsep_remove_epfd (nsep_epollInfo_t * pinfo) return; } #endif - sys_arch_lock_with_pid (&pinfo->epiLock); + dmm_spin_lock_pid (&pinfo->epiLock); /*list head must be not null */ - prenode = (struct list_node *) ADDR_SHTOL (pinfo->epiList.head); - nextnode = (struct list_node *) ADDR_SHTOL (prenode->next); + prenode = pinfo->epiList.head; + nextnode = prenode->next; icnt = 0; /*find all node that pid is belong to itself */ @@ -594,10 +593,10 @@ nsep_remove_epfd (nsep_epollInfo_t * pinfo) { prenode = nextnode; } - nextnode = (struct list_node *) ADDR_SHTOL (prenode->next); + nextnode = prenode->next; } - sys_sem_s_signal (&pinfo->epiLock); + dmm_spin_unlock (&pinfo->epiLock); /*free all epitem */ #ifdef FREE_LIST_SIZE @@ -622,10 +621,10 @@ nsep_remove_epfd (nsep_epollInfo_t * pinfo) #else epi = ep_list_entry (node_arry[i], struct epitem, fllink); #endif - ep = (struct eventpoll *) ADDR_SHTOL (epi->ep); + ep = epi->ep; if (ep) { - sys_arch_lock_with_pid (&ep->sem); + dmm_spin_lock_pid (&ep->sem); /* Here don't use epi you find before, use fd and ep to find the epi again.that is multithread safe */ tepi = nsep_find_ep (ep, pinfo->fd); /*record the exception log */ @@ -638,13 +637,13 @@ nsep_remove_epfd (nsep_epollInfo_t * pinfo) if (tepi) { nsep_epctl_triggle (tepi, pinfo, nstack_ep_triggle_del); - sys_arch_lock_with_pid (&ep->lock); + dmm_spin_lock_pid (&ep->lock); (void) nstack_ep_unlink (ep, tepi); - sys_sem_s_signal (&ep->lock); + dmm_spin_unlock (&ep->lock); nsep_free_epitem (epi); } - sys_sem_s_signal (&ep->sem); + dmm_spin_unlock (&ep->sem); } } #ifdef FREE_LIST_SIZE @@ -669,7 +668,7 @@ nsep_close_epfd (struct eventpoll *ep) struct epitem *epi = NULL; struct ep_rb_node *node = NULL; - sys_arch_lock_with_pid (&ep->sem); + dmm_spin_lock_pid (&ep->sem); while ((node = ep_rb_first (&ep->rbr))) { @@ -684,7 +683,7 @@ nsep_close_epfd (struct eventpoll *ep) break; } } - sys_sem_s_signal (&ep->sem); + dmm_spin_unlock (&ep->sem); nsep_free_eventpoll (ep); } @@ -696,9 +695,9 @@ nsp_epoll_close_kernel_fd (int sock, nsep_epollInfo_t * epInfo) nsep_remove_epfd (epInfo); u32_t pid = get_sys_pid (); - sys_arch_lock_with_pid (&epInfo->freeLock); + dmm_spin_lock_pid (&epInfo->freeLock); int left_count = nsep_del_last_pid (&epInfo->pidinfo, pid); - sys_sem_s_signal (&epInfo->freeLock); + dmm_spin_unlock (&epInfo->freeLock); if (-1 == left_count) { NSSOC_LOGERR ("pid not exist]fd=%d,type=%d,pid=%d", sock, @@ -725,12 +724,12 @@ nsp_epoll_close_spl_fd (int sock, nsep_epollInfo_t * epInfo) static inline int nsp_epoll_close_ep_fd (int sock, nsep_epollInfo_t * epInfo) { - struct eventpoll *ep = ADDR_SHTOL (epInfo->ep); + struct eventpoll *ep = epInfo->ep; u32_t pid = get_sys_pid (); NSSOC_LOGINF ("fd:%d is epoll fd ep:%p]", sock, ep); - sys_arch_lock_with_pid (&epInfo->freeLock); + dmm_spin_lock_pid (&epInfo->freeLock); int left_count = nsep_del_last_pid (&epInfo->pidinfo, pid); - sys_sem_s_signal (&epInfo->freeLock); + dmm_spin_unlock (&epInfo->freeLock); if (0 == left_count) { epInfo->ep = NULL; @@ -932,7 +931,7 @@ nsep_set_infoEp (int fd, struct eventpoll *ep) if (NULL == epInfo) return; - epInfo->ep = (struct eventpoll *) ADDR_LTOSH (ep); + epInfo->ep = ep; epInfo->fdtype = NSTACK_EPOL_FD; } @@ -944,7 +943,7 @@ nsep_get_infoEp (int fd) if (NULL == epInfo) return NULL; - return (struct eventpoll *) ADDR_SHTOL (epInfo->ep); + return epInfo->ep; } int @@ -1001,7 +1000,7 @@ nsep_init_infoSockMap () return 0; } -NSTACK_STATIC mzone_handle +NSTACK_STATIC struct dmm_ring * nsep_ring_lookup (char *name) { if (NULL == name) @@ -1010,20 +1009,10 @@ nsep_ring_lookup (char *name) return NULL; } - nsfw_mem_name mem_name; - if (EOK != STRCPY_S (mem_name.aname, sizeof (mem_name.aname), name)) - { - NSSOC_LOGERR ("Error to lookup ring by name, strcpy fail]name=%s", - name); - return NULL; - } - mem_name.enowner = NSFW_PROC_MAIN; - mem_name.entype = NSFW_SHMEM; - - return nsfw_mem_ring_lookup (&mem_name); + return (struct dmm_ring *) dmm_lookup (name); } -NSTACK_STATIC mzone_handle +NSTACK_STATIC void * nsep_attach_shmem (char *name) { if (NULL == name) @@ -1031,86 +1020,69 @@ nsep_attach_shmem (char *name) NSSOC_LOGERR ("param error]name=%p", name); return NULL; } - - nsfw_mem_name mem_name; - int retVal = STRCPY_S (mem_name.aname, sizeof (mem_name.aname), name); - if (EOK != retVal) - { - NSSOC_LOGERR ("STRCPY_S failed]"); - return NULL; - } - mem_name.enowner = NSFW_PROC_MAIN; - mem_name.entype = NSFW_SHMEM; - - return nsfw_mem_zone_lookup (&mem_name); + return dmm_lookup (name); } NSTACK_STATIC int nsep_attach_infoMem () { - mzone_handle hdl = nsep_attach_shmem (MP_NSTACK_EPOLL_INFO_NAME); + void *hdl = nsep_attach_shmem (MP_NSTACK_EPOLL_INFO_NAME); if (NULL == hdl) return -1; nsep_epollManager_t *manager = nsep_getManager (); manager->infoPool.pool = (nsep_epollInfo_t *) hdl; - hdl = nsep_ring_lookup (MP_NSTACK_EPINFO_RING_NAME); - if (NULL == hdl) + manager->infoPool.ring = nsep_ring_lookup (MP_NSTACK_EPINFO_RING_NAME); + if (NULL == manager->infoPool.ring) { NSSOC_LOGERR ("Fail to lock up epoll info ring]name=%s", MP_NSTACK_EPINFO_RING_NAME); return -1; } - manager->infoPool.ring = hdl; - return 0; } NSTACK_STATIC int nsep_attach_epItemMem () { - mzone_handle hdl = nsep_attach_shmem (MP_NSTACK_EPITEM_POOL); + void *hdl = nsep_attach_shmem (MP_NSTACK_EPITEM_POOL); if (NULL == hdl) return -1; nsep_epollManager_t *manager = nsep_getManager (); manager->epitemPool.pool = (struct epitem *) hdl; - hdl = nsep_ring_lookup (MP_NSTACK_EPITEM_RING_NAME); - if (NULL == hdl) + manager->epitemPool.ring = dmm_lookup (MP_NSTACK_EPITEM_RING_NAME); + if (NULL == manager->epitemPool.ring) { NSSOC_LOGERR ("Fail to lock up epoll info ring]name=%s", MP_NSTACK_EPITEM_RING_NAME); return -1; } - manager->epitemPool.ring = hdl; - return 0; } NSTACK_STATIC int nsep_attach_eventpollMem () { - mzone_handle hdl = nsep_attach_shmem (MP_NSTACK_EVENTPOLL_POOL); + void *hdl = nsep_attach_shmem (MP_NSTACK_EVENTPOLL_POOL); if (NULL == hdl) return -1; nsep_epollManager_t *manager = nsep_getManager (); manager->epollPool.pool = (struct eventpoll *) hdl; - hdl = nsep_ring_lookup (MP_NSTACK_EVENTPOOL_RING_NAME); - if (NULL == hdl) + manager->epollPool.ring = nsep_ring_lookup (MP_NSTACK_EVENTPOOL_RING_NAME); + if (NULL == manager->epollPool.ring) { NSSOC_LOGERR ("Fail to lock up epoll info ring]name=%s", MP_NSTACK_EVENTPOOL_RING_NAME); return -1; } - manager->epollPool.ring = hdl; - return 0; } diff --git a/src/nSocket/nstack/event/select/nstack_select.c b/src/nSocket/nstack/event/select/nstack_select.c index 930f1db..6901274 100644 --- a/src/nSocket/nstack/event/select/nstack_select.c +++ b/src/nSocket/nstack/event/select/nstack_select.c @@ -17,6 +17,8 @@ /*==============================================* * include header files * *----------------------------------------------*/ +#include "pthread.h" +#include "errno.h" #include "nstack_select.h" #include "nstack_log.h" #include "nsfw_base_linux_api.h" diff --git a/src/nSocket/nstack/nstack.c b/src/nSocket/nstack/nstack.c index 4198266..67746f4 100644 --- a/src/nSocket/nstack/nstack.c +++ b/src/nSocket/nstack/nstack.c @@ -20,15 +20,12 @@ #include <string.h> #include <stdlib.h> #include <unistd.h> -#include "common_mem_buf.h" -#include "common_mem_api.h" #include "nstack_eventpoll.h" #include "nstack_socket.h" #include "nstack_securec.h" #include "nsfw_init.h" #include "nstack_share_res.h" #include "nsfw_mgr_com_api.h" -#include "nsfw_ps_mem_api.h" #include "nsfw_fd_timer_api.h" #include "nsfw_ps_api.h" #include "nsfw_recycle_api.h" @@ -38,7 +35,9 @@ #include "nstack_rd.h" #include "nstack_module.h" #include "nstack_select.h" -#include "common_func.h" + +#include "dmm_memory.h" +#include "dmm_sys.h" #define NSTACK_EVENT_MEN_MAXLEN (sizeof(struct eventpoll_pool) + NSTACK_MAX_EPOLL_NUM * sizeof(struct eventpoll_entry)) #define NSTACK_EPITEM_MEN_MAXLEN (sizeof(struct epitem_pool) + NSTACK_MAX_EPITEM_NUM *sizeof(struct epitem_entry)) @@ -50,15 +49,13 @@ nStack_info_t g_nStackInfo = { .load_mutex = PTHREAD_MUTEX_INITIALIZER, .lk_sockPoll = NULL, .pid = 0, - .fork_lock = {0}, + .fork_lock = DMM_RWLOCK_INIT, .ikernelfdmax = NSTACK_MAX_SOCK_NUM, }; /*if this flag was set, maybe all socket interface called during initializing*/ __thread int g_tloadflag = 0; -extern u8 app_mode; - /*check init stack*/ #define NSTACK_INIT_STATE_CHECK_RET(state) do {\ if ((state) == NSTACK_MODULE_SUCCESS) \ @@ -376,8 +373,7 @@ NSTACK_STATIC inline void check_main_version () { char my_version[NSTACK_VERSION_LEN] = { 0 }; - nsfw_mem_name stname = { NSFW_SHMEM, NSFW_PROC_MAIN, {NSTACK_VERSION_SHM} }; - g_nStackInfo.nstack_version = nsfw_mem_zone_lookup (&stname); + g_nStackInfo.nstack_version = dmm_lookup(NSTACK_VERSION_SHM); if (NULL == g_nStackInfo.nstack_version) { @@ -482,22 +478,22 @@ nstack_init_mem (void) void nstack_fork_fd_local_lock_info (nstack_fd_local_lock_info_t * local_lock) { - if (local_lock->fd_ref.counter > 1) /* after fork, if fd ref > 1, need set it to 1 */ + if (local_lock->fd_ref.cnt > 1) /* after fork, if fd ref > 1, need set it to 1 */ { - local_lock->fd_ref.counter = 1; + local_lock->fd_ref.cnt = 1; } - common_mem_spinlock_init (&local_lock->close_lock); + dmm_spin_init (&local_lock->close_lock); } void nstack_reset_fd_local_lock_info (nstack_fd_local_lock_info_t * local_lock) { - atomic_set (&local_lock->fd_ref, 0); - common_mem_spinlock_init (&local_lock->close_lock); + dmm_atomic_set (&local_lock->fd_ref, 0); + dmm_spin_init (&local_lock->close_lock); local_lock->fd_status = FD_CLOSE; } -common_mem_rwlock_t * +dmm_rwlock_t * get_fork_lock () { return &g_nStackInfo.fork_lock; @@ -674,11 +670,11 @@ int nstack_stack_module_load() NSTACK_INIT_STATE_CHECK_RET(g_nStackInfo.moduleload); /*lock for fork*/ - common_mem_rwlock_read_lock(get_fork_lock()); + dmm_read_lock(get_fork_lock()); if (pthread_mutex_lock(&g_nStackInfo.load_mutex)){ NSSOC_LOGERR("nstack mutex lock fail"); - common_mem_rwlock_read_unlock(get_fork_lock()); + dmm_read_unlock(get_fork_lock()); return -1; } @@ -700,14 +696,14 @@ int nstack_stack_module_load() NSTACK_THREAD_LOAD_UNSET(); g_nStackInfo.moduleload = NSTACK_MODULE_SUCCESS; - common_mem_rwlock_read_unlock(get_fork_lock()); + dmm_read_unlock(get_fork_lock()); pthread_mutex_unlock(&g_nStackInfo.load_mutex); return 0; LOAD_FAIL: g_nStackInfo.moduleload = NSTACK_MODULE_FAIL; NSTACK_THREAD_LOAD_UNSET(); - common_mem_rwlock_read_unlock(get_fork_lock()); + dmm_read_unlock(get_fork_lock()); pthread_mutex_unlock(&g_nStackInfo.load_mutex); return -1; } @@ -748,7 +744,6 @@ nstack_app_init (void *ppara) int nstack_fw_init () { - int ret = ns_fail; if (NSTACK_MODULE_SUCCESS == g_nStackInfo.fwInited) @@ -768,44 +763,45 @@ nstack_fw_init () return -1; } - common_mem_rwlock_read_lock (get_fork_lock ()); + dmm_read_lock (get_fork_lock ()); updata_sys_pid (); u8 proc_type = NSFW_PROC_APP; - nsfw_mem_para stinfo = { 0 }; int deploytype = nstack_get_deploy_type(); if (deploytype == NSTACK_MODEL_TYPE1) { proc_type = NSFW_PROC_MAIN; - }else if (deploytype == NSTACK_MODEL_TYPE_SIMPLE_STACK) + } + else if (deploytype == NSTACK_MODEL_TYPE_SIMPLE_STACK) { proc_type = NSFW_PROC_MAIN; - app_mode=1; } - stinfo.iargsnum = 0; - stinfo.pargs = NULL; - stinfo.enflag = (fw_poc_type)proc_type; - nstack_framework_setModuleParam(NSFW_MEM_MGR_MODULE, (void*)&stinfo); - nstack_framework_setModuleParam(NSFW_MGR_COM_MODULE, (void*) ((long long)proc_type)); - nstack_framework_setModuleParam(NSFW_TIMER_MODULE, (void*) ((long long)proc_type)); - nstack_framework_setModuleParam(NSFW_PS_MODULE, (void*) ((long long)proc_type)); - nstack_framework_setModuleParam(NSFW_PS_MEM_MODULE, (void*) ((long long)proc_type)); - nstack_framework_setModuleParam(NSFW_RECYCLE_MODULE, (void*) ((long long)proc_type)); + (void) nstack_framework_setModuleParam (DMM_MEMORY_MODULE, + (void *) ((u64) NSFW_PROC_APP)); + + nstack_framework_setModuleParam(NSFW_MGR_COM_MODULE, + (void*) ((long long)proc_type)); + nstack_framework_setModuleParam(NSFW_TIMER_MODULE, + (void*) ((long long)proc_type)); + nstack_framework_setModuleParam(NSFW_PS_MODULE, + (void*) ((long long)proc_type)); + nstack_framework_setModuleParam(NSFW_RECYCLE_MODULE, + (void*) ((long long)proc_type)); NSTACK_THREAD_LOAD_SET(); ret = nstack_framework_init(); if (ns_success == ret) { - g_nStackInfo.fwInited = NSTACK_MODULE_SUCCESS; + g_nStackInfo.fwInited = NSTACK_MODULE_SUCCESS; } else { - g_nStackInfo.fwInited = NSTACK_MODULE_FAIL; + g_nStackInfo.fwInited = NSTACK_MODULE_FAIL; } NSTACK_THREAD_LOAD_UNSET(); - common_mem_rwlock_read_unlock(get_fork_lock()); + dmm_read_unlock(get_fork_lock()); } return ret; diff --git a/src/nSocket/nstack/nstack.h b/src/nSocket/nstack/nstack.h index 1ec88f0..1fbd37e 100644 --- a/src/nSocket/nstack/nstack.h +++ b/src/nSocket/nstack/nstack.h @@ -17,6 +17,10 @@ #ifndef _NSTACK_H_ #define _NSTACK_H_ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> #include <sys/socket.h> #include <pthread.h> #include <time.h> @@ -27,22 +31,12 @@ #include "nstack_log.h" #include "nstack_module.h" #include "nstack_fd_mng.h" - #include "nstack_types.h" #include "nstack_eventpoll.h" -#include "common_mem_api.h" #include "nstack_select.h" -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include "nstack_atomic.h" -#include "common_mem_spinlock.h" -#include "generic/common_mem_rwlock.h" - -#include "nsfw_mem_api.h" #include "nsfw_recycle_api.h" +#include "dmm_rwlock.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -73,7 +67,7 @@ typedef struct */ nstack_fd_Inf *lk_sockPoll; - common_mem_rwlock_t fork_lock; /* to ensure that there is no fd to create and close when fork */ + dmm_rwlock_t fork_lock; /* to ensure that there is no fd to create and close when fork */ uint32_t pid; char *nstack_version; int checkEpollFD; @@ -109,7 +103,7 @@ void nstack_fork_fd_local_lock_info (nstack_fd_local_lock_info_t * local_lock); void nstack_reset_fd_local_lock_info (nstack_fd_local_lock_info_t * local_lock); -common_mem_rwlock_t *get_fork_lock (); +dmm_rwlock_t *get_fork_lock (); int nstack_for_epoll_init (); int nstack_stack_module_load (); diff --git a/src/nSocket/nstack/nstack_fd_mng.c b/src/nSocket/nstack/nstack_fd_mng.c index ba9b8f1..fe643ee 100644 --- a/src/nSocket/nstack/nstack_fd_mng.c +++ b/src/nSocket/nstack/nstack_fd_mng.c @@ -26,6 +26,9 @@ #include "nstack_socket.h" #include "nstack_securec.h" #include "nstack_sockops.h" +#include "nsfw_mgr_com_api.h" + +#include "dmm_sys.h" /* test_epollCtl_004_001_trial : both 32bit and 64bit members of 'ops' and 'conn' need to reset, otherwise it will be invalid address in 32bit APP case */ diff --git a/src/nSocket/nstack/nstack_fd_mng.h b/src/nSocket/nstack/nstack_fd_mng.h index cb25e8e..d05dc8d 100644 --- a/src/nSocket/nstack/nstack_fd_mng.h +++ b/src/nSocket/nstack/nstack_fd_mng.h @@ -18,15 +18,12 @@ #define __NSTACK_FD_MNG_H__ #include <semaphore.h> -#include "nstack_atomic.h" #include "types.h" #include "nstack_module.h" #include "nstack_types.h" #include "nstack_eventpoll.h" -#include "common_mem_spinlock.h" -#include "common_mem_api.h" -#include "common_func.h" +#include "dmm_spinlock.h" #ifdef __cplusplus /* *INDENT-OFF* */ @@ -114,8 +111,8 @@ typedef struct typedef struct { - atomic_t fd_ref; - common_mem_spinlock_t close_lock; + dmm_atomic_t fd_ref; + dmm_spinlock_t close_lock; volatile int fd_status; } nstack_fd_local_lock_info_t; /* diff --git a/src/nSocket/nstack/nstack_module.c b/src/nSocket/nstack/nstack_module.c index 9566ab8..c167232 100644 --- a/src/nSocket/nstack/nstack_module.c +++ b/src/nSocket/nstack/nstack_module.c @@ -29,7 +29,6 @@ #include <arpa/inet.h> #include <errno.h> #include "nstack_module.h" -#include "common_mem_buf.h" #include "nstack_log.h" #include "nstack_securec.h" #include "nstack_dmm_api.h" diff --git a/src/nSocket/nstack/nstack_nsocket_construct.c b/src/nSocket/nstack/nstack_nsocket_construct.c index 0b447b7..1bf518c 100644 --- a/src/nSocket/nstack/nstack_nsocket_construct.c +++ b/src/nSocket/nstack/nstack_nsocket_construct.c @@ -15,7 +15,6 @@ */ #include "nsfw_init.h" -#include "nsfw_mem_api.h" #include "nsfw_mgr_com_api.h" #include "nsfw_recycle_api.h" @@ -30,9 +29,9 @@ extern "C"{ extern int nstack_app_init (void *ppara); /* *INDENT-OFF* */ NSFW_MODULE_NAME (NSACK_NSOCKET_MODULE) -NSFW_MODULE_PRIORITY (7) +NSFW_MODULE_PRIORITY (90) NSFW_MODULE_DEPENDS (NSFW_MGR_COM_MODULE) -NSFW_MODULE_DEPENDS (NSFW_MEM_MGR_MODULE) +//NSFW_MODULE_DEPENDS (NSFW_MEM_MGR_MODULE) NSFW_MODULE_DEPENDS (NSFW_RECYCLE_MODULE) NSFW_MODULE_INIT (nstack_app_init) /* *INDENT-ON* */ diff --git a/src/nSocket/nstack/nstack_socket.c b/src/nSocket/nstack/nstack_socket.c index cd1557b..1b7a416 100644 --- a/src/nSocket/nstack/nstack_socket.c +++ b/src/nSocket/nstack/nstack_socket.c @@ -25,6 +25,7 @@ #define _GNU_SOURCE /* define RTLD_NEXT */ #endif +#include <errno.h> #include <dlfcn.h> #include <unistd.h> #include <stdio.h> @@ -34,7 +35,6 @@ #include "nstack_dmm_api.h" #include "nstack_sockops.h" #include "nstack_module.h" -#include "common_mem_spinlock.h" #include "nstack_securec.h" #include "nsfw_init.h" #include "nsfw_recycle_api.h" @@ -44,6 +44,9 @@ #include "select_adapt.h" #include "nstack_select.h" #include "nstack_share_res.h" + +#include "dmm_sys.h" + #ifndef F_SETFL #define F_SETFL 4 #endif @@ -116,7 +119,7 @@ set_fd_status (int fd, FD_STATUS status) { if (FD_OPEN == status) { - atomic_inc (&local_lock->fd_ref); + dmm_atomic_inc (&local_lock->fd_ref); } local_lock->fd_status = status; } @@ -125,9 +128,9 @@ set_fd_status (int fd, FD_STATUS status) void set_fd_status_lock_fork (int fd, FD_STATUS status) { - common_mem_rwlock_read_lock (get_fork_lock ()); + dmm_read_lock (get_fork_lock ()); set_fd_status (fd, status); - common_mem_rwlock_read_unlock (get_fork_lock ()); + dmm_read_unlock (get_fork_lock ()); } /***************************************************************** @@ -999,7 +1002,7 @@ release_fd (int fd, nstack_fd_local_lock_info_t * local_lock) LOCK_CLOSE (local_lock); /* if fd is used by others, just pass, delay close it */ - if (local_lock->fd_status != FD_CLOSING || local_lock->fd_ref.counter > 0) + if (local_lock->fd_status != FD_CLOSING || local_lock->fd_ref.cnt > 0) { UNLOCK_CLOSE (local_lock); return 0; @@ -1112,8 +1115,10 @@ nstack_close (int fd) set_fd_status_lock_fork (fd, FD_CLOSING); UNLOCK_CLOSE (local_lock); - ret = - (atomic_dec (&local_lock->fd_ref) > 0 ? 0 : release_fd (fd, local_lock)); + if (dmm_atomic_sub_return (&local_lock->fd_ref, 1) > 0) + ret = 0; + else + ret = release_fd (fd, local_lock); if (-1 == ret) { @@ -2404,7 +2409,7 @@ nstack_epoll_ctl (int epfd, int op, int fd, struct epoll_event *event) goto err_return; } - ep = ADDR_SHTOL (epInfo->ep); + ep = epInfo->ep; if (NULL == ep) { NSSOC_LOGWAR ("ep of epfd=%d is NULL [return]", epfd); @@ -2427,7 +2432,7 @@ nstack_epoll_ctl (int epfd, int op, int fd, struct epoll_event *event) } } - sys_arch_lock_with_pid (&ep->sem); + dmm_spin_lock_pid (&ep->sem); epi = nsep_find_ep (ep, fd); switch (op) @@ -2436,9 +2441,9 @@ nstack_epoll_ctl (int epfd, int op, int fd, struct epoll_event *event) if (!epi) { ep_event.events |= (EPOLLERR | EPOLLHUP); // Check `man epoll_ctl` if you don't understand , smile :) - common_mem_rwlock_read_lock (get_fork_lock ()); /* to ensure that there is no fd to create and close when fork. added by tongshaojun t00391048 */ + dmm_read_lock (get_fork_lock ()); /* to ensure that there is no fd to create and close when fork. added by tongshaojun t00391048 */ ret = nsep_epctl_add (ep, fd, &ep_event); - common_mem_rwlock_read_unlock (get_fork_lock ()); + dmm_read_unlock (get_fork_lock ()); } else { @@ -2450,9 +2455,9 @@ nstack_epoll_ctl (int epfd, int op, int fd, struct epoll_event *event) case EPOLL_CTL_DEL: if (epi) { - common_mem_rwlock_read_lock (get_fork_lock ()); + dmm_read_lock (get_fork_lock ()); ret = nsep_epctl_del (ep, epi); - common_mem_rwlock_read_unlock (get_fork_lock ()); + dmm_read_unlock (get_fork_lock ()); } else { @@ -2480,7 +2485,7 @@ nstack_epoll_ctl (int epfd, int op, int fd, struct epoll_event *event) ret = -1; } - sys_sem_s_signal (&ep->sem); + dmm_spin_unlock (&ep->sem); NSSOC_LOGINF ("epfd=%d,op=%d,fd=%d,ret=%d [return]", epfd, op, fd, ret); err_return: @@ -2664,7 +2669,7 @@ nstack_epoll_wait (int epfd, struct epoll_event *events, int maxevents, return -1; } - ep = ADDR_SHTOL (epInfo->ep); + ep = epInfo->ep; if (NULL == ep) { NSSOC_LOGWAR ("fdInf->ep is NULL, return -1,epinfo=%p,epfd=%d", epInfo, @@ -2760,11 +2765,13 @@ nstack_fork (void) NSTACK_INIT_CHECK_RET (fork); - common_mem_rwlock_write_lock (get_fork_lock ()); + dmm_write_lock (get_fork_lock ()); if (NSTACK_MODULE_SUCCESS == g_nStackInfo.fwInited) { + dmm_spinlock_t *fork_lock = nstack_get_fork_share_lock (); + nstack_fork_init_parent (parent_pid); - dmm_spinlock_lock_with_pid (nstack_get_fork_share_lock (), parent_pid); + dmm_spin_lock_with (fork_lock, parent_pid); pid = nsfw_base_fork (); if (pid == 0) { @@ -2772,24 +2779,23 @@ nstack_fork (void) nstack_log_lock_release (); nstack_fork_init_child (parent_pid); (void) nstack_for_epoll_init (); - dmm_spinlock_lock_with_pid (nstack_get_fork_share_lock (), - get_sys_pid ()); + dmm_spin_lock_with (fork_lock, get_sys_pid ()); nsep_fork_child_proc (parent_pid); (void) select_module_init_child (); - common_mem_spinlock_unlock (nstack_get_fork_share_lock ()); + dmm_spin_unlock (fork_lock); } else if (pid > 0) { pid_t child_pid = get_hostpid_from_file (pid); nsep_fork_parent_proc (parent_pid, child_pid); - common_mem_spinlock_unlock (nstack_get_fork_share_lock ()); + dmm_spin_unlock (fork_lock); sys_sleep_ns (0, 10000000); /* wait child add pid for netconn */ } else { NSSOC_LOGERR ("fork failed]parent_pid=%d", parent_pid); - common_mem_spinlock_unlock (nstack_get_fork_share_lock ()); + dmm_spin_unlock (fork_lock); } } else @@ -2803,6 +2809,6 @@ nstack_fork (void) parent_pid, pid); } - common_mem_rwlock_write_unlock (get_fork_lock ()); + dmm_write_unlock (get_fork_lock ()); return pid; } diff --git a/src/nSocket/nstack/nstack_socket.h b/src/nSocket/nstack/nstack_socket.h index 3bb7843..3c47f79 100644 --- a/src/nSocket/nstack/nstack_socket.h +++ b/src/nSocket/nstack/nstack_socket.h @@ -19,6 +19,7 @@ #include <sys/socket.h> #include <poll.h> #include <sys/epoll.h> +#include "dmm_atomic.h" #undef NSTACK_MK_DECL #define NSTACK_MK_DECL(ret, fn, args) extern ret nstack_##fn args @@ -56,7 +57,8 @@ int nstack_socket (int domain, int itype, int protocol); static inline void UNLOCK_SEND (int fd, nstack_fd_local_lock_info_t * local_lock) { - if ((NULL != local_lock) && atomic_dec (&local_lock->fd_ref) == 0) + if ((NULL != local_lock) && + dmm_atomic_sub_return (&local_lock->fd_ref, 1) == 0) { release_fd (fd, local_lock); } @@ -88,7 +90,8 @@ UNLOCK_SEND (int fd, nstack_fd_local_lock_info_t * local_lock) static inline void UNLOCK_EPOLL (int fd, nstack_fd_local_lock_info_t * local_lock) { - if ((NULL != local_lock) && atomic_dec (&local_lock->fd_ref) == 0) + if ((NULL != local_lock) + && dmm_atomic_sub_return (&local_lock->fd_ref, 1) == 0) { release_fd (fd, local_lock); } @@ -97,8 +100,8 @@ UNLOCK_EPOLL (int fd, nstack_fd_local_lock_info_t * local_lock) #define LOCK_EPOLL_CTRL(fd_val, local_lock, epoll_fd, epoll_local_lock){\ if (local_lock)\ {\ - atomic_inc(&local_lock->fd_ref);\ - common_mem_spinlock_lock(&local_lock->close_lock);\ + dmm_atomic_inc(&local_lock->fd_ref);\ + dmm_spin_lock(&local_lock->close_lock);\ nstack_fd_Inf* fd_inf = nstack_getValidInf(fd_val);\ if (fd_inf)\ {\ @@ -106,8 +109,8 @@ UNLOCK_EPOLL (int fd, nstack_fd_local_lock_info_t * local_lock) {\ NSSOC_LOGWAR("fd %d is not open [return]", fd_val);\ nstack_set_errno(EBADF);\ - common_mem_spinlock_unlock(&local_lock->close_lock);\ - if(atomic_dec(&local_lock->fd_ref)==0){ \ + dmm_spin_unlock(&local_lock->close_lock);\ + if(dmm_atomic_sub_return(&local_lock->fd_ref, 1)==0){ \ release_fd(fd_val, local_lock);\ }\ UNLOCK_EPOLL(epoll_fd, epoll_local_lock);\ @@ -122,8 +125,8 @@ UNLOCK_EPOLL_CTRL (int fd, nstack_fd_local_lock_info_t * local_lock) { if (local_lock) { - common_mem_spinlock_unlock (&local_lock->close_lock); - if (atomic_dec (&local_lock->fd_ref) == 0) + dmm_spin_unlock (&local_lock->close_lock); + if (dmm_atomic_sub_return (&local_lock->fd_ref, 1) == 0) { release_fd (fd, local_lock); } @@ -133,12 +136,12 @@ UNLOCK_EPOLL_CTRL (int fd, nstack_fd_local_lock_info_t * local_lock) #define INC_FD_REF(fd, fd_inf, local_lock){ \ if (local_lock)\ {\ - atomic_inc(&local_lock->fd_ref);\ + dmm_atomic_inc(&local_lock->fd_ref);\ if (local_lock->fd_status != FD_OPEN)\ {\ nstack_set_errno(EBADF);\ NSSOC_LOGERR("nstack call, fd_status=%d [return]", local_lock->fd_status); \ - if(atomic_dec(&local_lock->fd_ref) == 0){ \ + if(dmm_atomic_sub_return(&local_lock->fd_ref, 1) == 0){ \ release_fd(fd, local_lock);\ }\ return -1;\ @@ -158,7 +161,8 @@ UNLOCK_EPOLL_CTRL (int fd, nstack_fd_local_lock_info_t * local_lock) static inline void UNLOCK_BASE (int fd, nstack_fd_local_lock_info_t * local_lock) { - if ((NULL != local_lock) && (atomic_dec (&local_lock->fd_ref) == 0)) + if ((NULL != local_lock) + && (dmm_atomic_sub_return (&local_lock->fd_ref, 1) == 0)) { release_fd (fd, local_lock); } @@ -173,7 +177,7 @@ UNLOCK_BASE (int fd, nstack_fd_local_lock_info_t * local_lock) #define LOCK_CLOSE(local_lock){\ if (local_lock)\ {\ - common_mem_spinlock_lock(&local_lock->close_lock);\ + dmm_spin_lock(&local_lock->close_lock);\ }\ } @@ -182,7 +186,7 @@ UNLOCK_CLOSE (nstack_fd_local_lock_info_t * local_lock) { if (local_lock) { - common_mem_spinlock_unlock (&local_lock->close_lock); + dmm_spin_unlock (&local_lock->close_lock); } } diff --git a/src/nSocket/nstack_rd/nstack_rd_ip.c b/src/nSocket/nstack_rd/nstack_rd_ip.c index bcbe731..5297d4a 100644 --- a/src/nSocket/nstack_rd/nstack_rd_ip.c +++ b/src/nSocket/nstack_rd/nstack_rd_ip.c @@ -26,6 +26,8 @@ #include "nstack_ip_addr.h" +#include "dmm_common.h" + #define NSTACK_IP_MLSTACKID RD_STACKX_NAME #define PP_HTONL(x) ((((x) & 0xff) << 24) | \ diff --git a/src/nSocket/nstack_rd/nstack_rd_proto.c b/src/nSocket/nstack_rd/nstack_rd_proto.c index 81246c0..a227391 100644 --- a/src/nSocket/nstack_rd/nstack_rd_proto.c +++ b/src/nSocket/nstack_rd/nstack_rd_proto.c @@ -23,7 +23,8 @@ #include "nstack_rd_proto.h" #include "nstack_log.h" #include "nstack_securec.h" -#include "common_mem_common.h" + +#include "dmm_common.h" /*copy rd data*/ int diff --git a/stacks/lwip_stack/CMakeLists.txt b/stacks/lwip_stack/CMakeLists.txt index 297d2d9..5fc30b1 100644 --- a/stacks/lwip_stack/CMakeLists.txt +++ b/stacks/lwip_stack/CMakeLists.txt @@ -25,6 +25,8 @@ SET(NSTACKTOOLS_PATH ${CMAKE_CURRENT_LIST_DIR}/release/tools) SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_PATH_STATIC}) SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_PATH}) SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_PATH_SHARED}) +SET(DMM_REL_INC_DIR ${PROJECT_SOURCE_DIR}/../../release/include) +SET(COMPLE_CONFIG ${DMM_REL_INC_DIR}/compile_config.h) MESSAGE(STATUS "Top dir is: " ${CMAKE_CURRENT_LIST_DIR}) @@ -41,6 +43,9 @@ endif() if(WITH_HAL_LIB) add_definitions(-DHAL_LIB) + SET(RTP_CONFIG ${PROJECT_SOURCE_DIR}/src/include/rtp_config.h) +else() + SET(RTP_CONFIG ${PROJECT_SOURCE_DIR}/src/include/common/common_sys_config.h) endif() SET(post_compile "${PROJECT_BINARY_DIR}/post_compile.sh") @@ -58,7 +63,6 @@ echo post compile process success. ADD_CUSTOM_TARGET(DPDK ALL COMMAND sh post_compile.sh) execute_process( - COMMAND cp -rf ${CMAKE_CURRENT_LIST_DIR}/../../release/include ${CMAKE_CURRENT_LIST_DIR}/src/ COMMAND cp ${CMAKE_CURRENT_LIST_DIR}/../../release/lib64/libnStackAPI.so ${CMAKE_CURRENT_LIST_DIR}/release/lib64/ COMMAND cp ${CMAKE_CURRENT_LIST_DIR}/../../release/lib64/libdmm_api.so ${CMAKE_CURRENT_LIST_DIR}/release/lib64/ COMMAND echo "stacklwip prepare ok" @@ -68,6 +72,9 @@ execute_process( ) ADD_DEFINITIONS(-D_GNU_SOURCE -DNSTACK_GETVER_VERSION="18.07") +INCLUDE_DIRECTORIES(${DMM_REL_INC_DIR}) +INCLUDE_DIRECTORIES(src/include) +INCLUDE_DIRECTORIES(src/include/common) SET(JSON_C_SRC ${CMAKE_CURRENT_LIST_DIR}/../../thirdparty/json/json-c-0.12.1) INCLUDE(ExternalProject) @@ -110,4 +117,3 @@ ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(lwip_src) ADD_SUBDIRECTORY(lwip_src/socket) ADD_SUBDIRECTORY(tools) -#ADD_SUBDIRECTORY(thirdparty/rsrdma) diff --git a/stacks/lwip_stack/lwip_src/CMakeLists.txt b/stacks/lwip_stack/lwip_src/CMakeLists.txt index 4425905..7c91c2c 100644 --- a/stacks/lwip_stack/lwip_src/CMakeLists.txt +++ b/stacks/lwip_stack/lwip_src/CMakeLists.txt @@ -23,24 +23,23 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium") ADD_DEFINITIONS(-D_GNU_SOURCE) ADD_DEFINITIONS(-DDPDK_MODULE=0) if(WITH_HAL_LIB) -SET(RTP_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../src/include/rtp_config.h) else() SET(PAL_H_DIRECTORIES "/usr/include/dpdk/") - SET(RTP_CONFIG ${PROJECT_SOURCE_DIR}/../../src/framework/common/base/include/common/common_sys_config.h) INCLUDE_DIRECTORIES( ${PAL_H_DIRECTORIES} ) endif() -SET(COMPLE_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../src/include/compile_config.h) -SET(MGR_COM ${CMAKE_CURRENT_LIST_DIR}/../src/include/mgr_com.h) + ADD_DEFINITIONS(-include ${RTP_CONFIG}) ADD_DEFINITIONS(-include ${COMPLE_CONFIG}) -ADD_DEFINITIONS(-include ${MGR_COM}) +ADD_DEFINITIONS(-include common_mem_api.h) + if(WITH_SECUREC_LIB) -LINK_LIBRARIES(pthread rt securec) + LINK_LIBRARIES(pthread rt securec) else() -LINK_LIBRARIES(pthread rt) + LINK_LIBRARIES(pthread rt) endif() + LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC}) INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_LIST_DIR}/../../../SecureC/include @@ -60,6 +59,7 @@ FILE(GLOB RECYCLE recycle/*.c) FILE(GLOB_RECURSE MAINTAIN maintain/*.c) FILE(GLOB COMMON common/*.c) FILE(GLOB_RECURSE LWIPSRC lwip/arch/*.c lwip/core/*.c lwip/netif/*.c) + FOREACH(item ${LWIPSRC}) IF(${item} MATCHES "slipif.c") LIST(REMOVE_ITEM LWIPSRC ${item}) diff --git a/stacks/lwip_stack/lwip_src/api/spl_api.c b/stacks/lwip_stack/lwip_src/api/spl_api.c index 5c8af7d..a8c9af6 100644 --- a/stacks/lwip_stack/lwip_src/api/spl_api.c +++ b/stacks/lwip_stack/lwip_src/api/spl_api.c @@ -44,7 +44,7 @@ spl_main_init (void *args) /* *INDENT-OFF* */ NSFW_MODULE_NAME ("STACKX_MAIN") -NSFW_MODULE_PRIORITY (10) +NSFW_MODULE_PRIORITY (90) NSFW_MODULE_DEPENDS (NSFW_ALARM_MODULE) NSFW_MODULE_DEPENDS (NSTACK_DMM_MODULE) NSFW_MODULE_INIT (spl_main_init) diff --git a/stacks/lwip_stack/lwip_src/common/stackxopts.h b/stacks/lwip_stack/lwip_src/common/stackxopts.h index 15fc6b8..3daba0d 100644 --- a/stacks/lwip_stack/lwip_src/common/stackxopts.h +++ b/stacks/lwip_stack/lwip_src/common/stackxopts.h @@ -17,6 +17,8 @@ #ifndef STACKX_OPTS_H #define STACKX_OPTS_H +#include "types.h" + struct memory_statics { char name[120]; diff --git a/stacks/lwip_stack/lwip_src/core/global_tick.c b/stacks/lwip_stack/lwip_src/core/global_tick.c index ee180c9..7a0feb2 100644 --- a/stacks/lwip_stack/lwip_src/core/global_tick.c +++ b/stacks/lwip_stack/lwip_src/core/global_tick.c @@ -15,10 +15,12 @@ */ #include "nsfw_mem_api.h" -#include "nstack_share_res.h" +#include "global_tick.h" #include "nstack_securec.h" +#include "nstack_share_res.h" -extern nstack_tick_info_t g_nstack_timer_tick; +/** global timer tick */ +nstack_tick_info_t g_nstack_timer_tick; int init_stackx_global_tick (void) @@ -46,3 +48,28 @@ init_stackx_global_tick (void) return 0; } + +int +nstack_lookup_share_global_tick () +{ + int ret; + nsfw_mem_name name = {.entype = NSFW_SHMEM,.enowner = NSFW_PROC_MAIN }; + + ret = STRCPY_S (name.aname, NSFW_MEM_NAME_LENGTH, NSTACK_GLOBAL_TICK_SHM); + if (EOK != ret) + { + NSSOC_LOGERR ("STRCPY_S failed]name=%s,ret=%d", NSTACK_GLOBAL_TICK_SHM, + ret); + return -1; + } + + g_nstack_timer_tick.tick_ptr = (uint64_t *) nsfw_mem_zone_lookup (&name); + if (NULL == g_nstack_timer_tick.tick_ptr) + { + NSPOL_LOGERR ("Failed to lookup global timer tick memory"); + return -1; + } + + NSSOC_LOGDBG ("ok"); + return 0; +} diff --git a/stacks/lwip_stack/lwip_src/core/global_tick.h b/stacks/lwip_stack/lwip_src/core/global_tick.h new file mode 100644 index 0000000..8e2070b --- /dev/null +++ b/stacks/lwip_stack/lwip_src/core/global_tick.h @@ -0,0 +1,29 @@ +/* +* +* 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 _GLOBAL_TICK_H_ +#define _GLOBAL_TICK_H_ + +#define DFX_TMR_INTERVAL 60000 /*60 seconds */ +typedef struct nstack_tick_info +{ + uint64_t *tick_ptr; // tick from shared memory + uint64_t interval; // tick interval, only used in stack process + /* tick reference, updated periodically and read in tcpip_thread only */ + struct timeval ref_time; // ref tick time + uint64_t ref_tick; // ref tick +} nstack_tick_info_t; + +#endif diff --git a/stacks/lwip_stack/lwip_src/core/spl_timers.c b/stacks/lwip_stack/lwip_src/core/spl_timers.c index cfa130b..8559f6f 100644 --- a/stacks/lwip_stack/lwip_src/core/spl_timers.c +++ b/stacks/lwip_stack/lwip_src/core/spl_timers.c @@ -20,7 +20,7 @@ #include "sc_dpdk.h" #include "nstack_log.h" #include "nstack_securec.h" -#include "nstack_share_res.h" +#include "global_tick.h" #include <time.h> #include <signal.h> diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h index 01fe242..febf162 100644 --- a/stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h +++ b/stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h @@ -22,6 +22,7 @@ #include "common_mem_base_type.h" #include "stackx_pbuf_comm.h" #include "common_mem_mbuf.h" +#include "common_mem_api.h" #ifdef HAL_LIB #else diff --git a/stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c b/stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c index 03b5998..b9ca085 100644 --- a/stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c +++ b/stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c @@ -361,6 +361,7 @@ get_network_json_data () tmp_config_path = realpath ("./network_data_tonStack.json", NULL); if (!tmp_config_path) { + NSTCP_LOGERR ("realpath ./network_data_tonStack.json failed.\n"); exit (1); } @@ -368,7 +369,7 @@ get_network_json_data () if (-1 == fp) { free (tmp_config_path); - NSTCP_LOGINF ("network file open failed.\n"); + NSTCP_LOGERR ("network file open failed.\n"); exit (1); } free (tmp_config_path); diff --git a/stacks/lwip_stack/lwip_src/socket/CMakeLists.txt b/stacks/lwip_stack/lwip_src/socket/CMakeLists.txt index e7915d2..d4027aa 100644 --- a/stacks/lwip_stack/lwip_src/socket/CMakeLists.txt +++ b/stacks/lwip_stack/lwip_src/socket/CMakeLists.txt @@ -26,22 +26,15 @@ SET(ADAPT_DIRECTORIES "${PROJECT_SOURCE_DIR}/src/adapt/") ADD_DEFINITIONS(-D_GNU_SOURCE -D_FORTIFY_SOURCE=2) ADD_DEFINITIONS(-DDPDK_MODULE=0) if(WITH_HAL_LIB) -SET(RTP_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../../../src/include/rtp_config.h) else() - SET(PAL_H_DIRECTORIES "/usr/include/dpdk/") - SET(RTP_CONFIG ${PROJECT_SOURCE_DIR}/../../src/framework/common/base/include/common/common_sys_config.h) + INCLUDE_DIRECTORIES("/usr/include/dpdk/") INCLUDE_DIRECTORIES( - ${PAL_H_DIRECTORIES} ${ADAPT_DIRECTORIES} # ${DMM_API} ) endif() -SET(COMPLE_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../../src/include/compile_config.h) -#SET(MGR_COM ${PROJECT_SOURCE_DIR}/src/framework/ipc/mgr_com/mgr_com.h) -SET(MGR_COM ${CMAKE_CURRENT_LIST_DIR}/../../src/include/mgr_com.h) ADD_DEFINITIONS(-include ${RTP_CONFIG}) ADD_DEFINITIONS(-include ${COMPLE_CONFIG}) -ADD_DEFINITIONS(-include ${MGR_COM}) if(WITH_SECUREC_LIB) LINK_LIBRARIES(pthread rt securec) else() @@ -52,8 +45,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_LIST_DIR}/../../../../thirdparty/json/json-c-0.12.1/ ${CMAKE_CURRENT_LIST_DIR}/../../../../thirdparty/glog/glog-0.3.4/src/ ${CMAKE_CURRENT_LIST_DIR}/../../src/include/ -# ${PROJECT_SOURCE_DIR}/src/framework/include/ -# ${PROJECT_SOURCE_DIR}/src/framework/common/include/ # ${ADAPT_DIRECTORIES} # ${DMM_API} ) @@ -69,8 +60,6 @@ TARGET_INCLUDE_DIRECTORIES( ./ ${CMAKE_CURRENT_LIST_DIR}/../../src/sbr/ ${CMAKE_CURRENT_LIST_DIR}/../../src/include/ -# ${PROJECT_SOURCE_DIR}/src/framework/include/ -# ${PROJECT_SOURCE_DIR}/src/framework/common/include/ # ${ADAPT_DIRECTORIES} -# ${DMM_API} +# ${DMM_API} ) diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c b/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c index 0223ac9..97368a3 100644 --- a/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c +++ b/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c @@ -30,7 +30,7 @@ void epoll_triggle_event_from_api (sbr_socket_t * sock, int op) { struct spl_netconn *conn = sbr_get_conn (sock); - void *epInfo = ADDR_SHTOL (conn->epInfo); + void *epInfo = conn->epInfo; //NSPOL_LOGDBG(SOCKETS_DEBUG, "enter]fd=%d,op=%d", sock, op); switch (op) { diff --git a/stacks/lwip_stack/release/script/nstack_var.sh b/stacks/lwip_stack/release/script/nstack_var.sh index 4c5c6f6..b454565 100644 --- a/stacks/lwip_stack/release/script/nstack_var.sh +++ b/stacks/lwip_stack/release/script/nstack_var.sh @@ -26,7 +26,7 @@ DPDK_FILE_NAME=nstack_dpdk.log export VM_ID=agent-node-x -export DPDK_INSTALL_PATH="/tmp/dpdk/dpdk-18.02/" +export DPDK_INSTALL_PATH="/usr/share/dpdk" export DPDK_LIB_PATH=${DPDK_INSTALL_PATH}/x86_64-native-linuxapp-gcc/lib export DPDK_TOOL_DIR=${DPDK_INSTALL_PATH}/usertools export DPDK_MOD_PATH=${DPDK_INSTALL_PATH}/x86_64-native-linuxapp-gcc/kmod diff --git a/stacks/lwip_stack/src/CMakeLists.txt b/stacks/lwip_stack/src/CMakeLists.txt index 6aacf07..47bc6d3 100644 --- a/stacks/lwip_stack/src/CMakeLists.txt +++ b/stacks/lwip_stack/src/CMakeLists.txt @@ -14,15 +14,7 @@ # limitations under the License. ######################################################################### -SET(RTP_DIRECTORIES "${PROJECT_SOURCE_DIR}/src/include/") - INCLUDE_DIRECTORIES( - framework/log/ - framework/include/ - framework/common/include/ - framework/common/base/include/ - ${RTP_DIRECTORIES} - ${RTP_DIRECTORIES}/generic ../../SecureC/include/ ../../../thirdparty/glog/glog-0.3.4/src/ ) @@ -33,17 +25,10 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector -fstack-protector-all") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,relro,-z,now -Wl,--disable-new-dtags,--rpath,../lib64") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium") -if(WITH_HAL_LIB) -SET(RTP_CONFIG ${PROJECT_SOURCE_DIR}/src/include/rtp_config.h) -else() - SET(RTP_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../../../src/framework/common/base/include/common/common_sys_config.h) -endif() -SET(COMPLE_CONFIG ${PROJECT_SOURCE_DIR}/src/include/compile_config.h) ADD_DEFINITIONS(-include ${RTP_CONFIG}) ADD_DEFINITIONS(-include ${COMPLE_CONFIG}) ADD_DEFINITIONS(-D_GNU_SOURCE) ADD_DEFINITIONS(-DDPDK_MODULE=0) -#ADD_DEFINITIONS(-DNSTACK_RSRDMA) LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC}) if(WITH_SECUREC_LIB) @@ -52,6 +37,7 @@ else() LINK_LIBRARIES(pthread dl) endif() +ADD_SUBDIRECTORY(mem_mgr) ADD_SUBDIRECTORY(maintain) ADD_SUBDIRECTORY(io_adpt) ADD_SUBDIRECTORY(sbr) diff --git a/stacks/lwip_stack/src/alarm/alarm.c b/stacks/lwip_stack/src/alarm/alarm.c index c158144..a82dd1d 100644 --- a/stacks/lwip_stack/src/alarm/alarm.c +++ b/stacks/lwip_stack/src/alarm/alarm.c @@ -851,7 +851,7 @@ ns_send_init_alarm (enum_alarm_id alarm_id) } NSFW_MODULE_NAME (NSFW_ALARM_MODULE) -NSFW_MODULE_PRIORITY (10) +NSFW_MODULE_PRIORITY (80) NSFW_MODULE_DEPENDS (NSTACK_DMM_MODULE) NSFW_MODULE_INIT (ns_alarm_module_init) #ifdef __cplusplus diff --git a/src/framework/common/base/include/common/common_func.h b/stacks/lwip_stack/src/include/common/common_func.h index 2b84b7a..2b84b7a 100644 --- a/src/framework/common/base/include/common/common_func.h +++ b/stacks/lwip_stack/src/include/common/common_func.h diff --git a/src/framework/common/base/include/common/common_mem_api.h b/stacks/lwip_stack/src/include/common/common_mem_api.h index d143732..a51e900 100644 --- a/src/framework/common/base/include/common/common_mem_api.h +++ b/stacks/lwip_stack/src/include/common/common_mem_api.h @@ -26,6 +26,8 @@ #include <unistd.h> #include <semaphore.h> +#include "dmm_sys.h" + #ifdef __cplusplus /* *INDENT-OFF* */ extern "C" { @@ -79,18 +81,6 @@ u32_t sys_arch_sem_trywait_v2 (sys_sem_t_v2 * sem); u32_t sys_arch_sem_wait_s_v2 (sys_sem_t_v2 sem); -#define SYS_HOST_INITIAL_PID 1 -extern volatile pid_t g_sys_host_pid; -pid_t sys_get_hostpid_from_file (pid_t pid); -static inline pid_t -get_sys_pid () -{ - if (SYS_HOST_INITIAL_PID == g_sys_host_pid) - (void) sys_get_hostpid_from_file (getpid ()); - return g_sys_host_pid; -} - -pid_t updata_sys_pid (); u32_t sys_now (void); #define sys_sem_t sys_sem_t_v2 @@ -106,21 +96,10 @@ u32_t sys_now (void); #define sys_arch_sem_s_wait(sem, timeout) sys_arch_sem_wait_s_v2(sem) #define sys_arch_lock_with_pid(sem) (void)sys_arch_lock_with_pid_v2(sem) -#define BUF_SIZE_FILEPATH 256 -#define STR_PID "pid:" -#define READ_FILE_BUFLEN 512 - -extern pid_t sys_get_hostpid_from_file (pid_t pid); -extern pid_t get_hostpid_from_file (u32_t pid); -extern void get_exec_name_by_pid (pid_t pid, char *task_name, - int task_name_len); - static inline u32_t sys_arch_lock_with_pid_v2 (sys_sem_t_v2 sem) { - if (SYS_HOST_INITIAL_PID == g_sys_host_pid) - (void) sys_get_hostpid_from_file (getpid ()); - dmm_spinlock_lock_with_pid (sem, g_sys_host_pid); + dmm_spinlock_lock_with_pid (sem, get_sys_pid ()); return 0; } diff --git a/src/framework/common/base/include/common/common_mem_base_type.h b/stacks/lwip_stack/src/include/common/common_mem_base_type.h index 01707d9..01707d9 100644 --- a/src/framework/common/base/include/common/common_mem_base_type.h +++ b/stacks/lwip_stack/src/include/common/common_mem_base_type.h diff --git a/src/framework/common/base/include/common/common_mem_buf.h b/stacks/lwip_stack/src/include/common/common_mem_buf.h index f9f1593..834f386 100644 --- a/src/framework/common/base/include/common/common_mem_buf.h +++ b/stacks/lwip_stack/src/include/common/common_mem_buf.h @@ -64,7 +64,7 @@ typedef struct __common_pal_module_info * @param name * The name of the buf pool. */ -int nscomm_pal_module_init (common_mem_pal_module_info * pinfo, u8 app_mode); +int nscomm_pal_module_init (common_mem_pal_module_info * pinfo); void *nscomm_memzone_data_reserve_name (const char *name, size_t len, int socket_id); diff --git a/src/framework/common/base/include/common/common_mem_common.h b/stacks/lwip_stack/src/include/common/common_mem_common.h index 1e4cf56..1e4cf56 100644 --- a/src/framework/common/base/include/common/common_mem_common.h +++ b/stacks/lwip_stack/src/include/common/common_mem_common.h diff --git a/src/framework/common/base/include/common/common_mem_malloc.h b/stacks/lwip_stack/src/include/common/common_mem_malloc.h index 68721cd..68721cd 100644 --- a/src/framework/common/base/include/common/common_mem_malloc.h +++ b/stacks/lwip_stack/src/include/common/common_mem_malloc.h diff --git a/src/framework/common/base/include/common/common_mem_mbuf.h b/stacks/lwip_stack/src/include/common/common_mem_mbuf.h index 0bb7696..0bb7696 100644 --- a/src/framework/common/base/include/common/common_mem_mbuf.h +++ b/stacks/lwip_stack/src/include/common/common_mem_mbuf.h diff --git a/src/framework/common/base/include/common/common_mem_mempool.h b/stacks/lwip_stack/src/include/common/common_mem_mempool.h index 58a8e82..58a8e82 100644 --- a/src/framework/common/base/include/common/common_mem_mempool.h +++ b/stacks/lwip_stack/src/include/common/common_mem_mempool.h diff --git a/src/framework/common/base/include/common/common_mem_memzone.h b/stacks/lwip_stack/src/include/common/common_mem_memzone.h index 20e18c2..20e18c2 100644 --- a/src/framework/common/base/include/common/common_mem_memzone.h +++ b/stacks/lwip_stack/src/include/common/common_mem_memzone.h diff --git a/src/framework/common/base/include/common/common_mem_pal.h b/stacks/lwip_stack/src/include/common/common_mem_pal.h index 209b8bd..209b8bd 100644 --- a/src/framework/common/base/include/common/common_mem_pal.h +++ b/stacks/lwip_stack/src/include/common/common_mem_pal.h diff --git a/src/framework/common/base/include/common/common_mem_pal_memconfig.h b/stacks/lwip_stack/src/include/common/common_mem_pal_memconfig.h index 65b6e04..65b6e04 100644 --- a/src/framework/common/base/include/common/common_mem_pal_memconfig.h +++ b/stacks/lwip_stack/src/include/common/common_mem_pal_memconfig.h diff --git a/src/framework/common/base/include/common/common_mem_spinlock.h b/stacks/lwip_stack/src/include/common/common_mem_spinlock.h index 23f6b1e..23f6b1e 100644 --- a/src/framework/common/base/include/common/common_mem_spinlock.h +++ b/stacks/lwip_stack/src/include/common/common_mem_spinlock.h diff --git a/src/framework/common/base/include/common/common_sys_config.h b/stacks/lwip_stack/src/include/common/common_sys_config.h index 736c47b..736c47b 100644 --- a/src/framework/common/base/include/common/common_sys_config.h +++ b/stacks/lwip_stack/src/include/common/common_sys_config.h diff --git a/src/framework/common/base/include/common/generic/common_mem_rwlock.h b/stacks/lwip_stack/src/include/common/generic/common_mem_rwlock.h index 2eed259..2eed259 100644 --- a/src/framework/common/base/include/common/generic/common_mem_rwlock.h +++ b/stacks/lwip_stack/src/include/common/generic/common_mem_rwlock.h diff --git a/src/framework/common/base/include/common_pal_bitwide_adjust.h b/stacks/lwip_stack/src/include/common_pal_bitwide_adjust.h index 0e68533..0e68533 100644 --- a/src/framework/common/base/include/common_pal_bitwide_adjust.h +++ b/stacks/lwip_stack/src/include/common_pal_bitwide_adjust.h diff --git a/src/framework/include/nsfw_mem_api.h b/stacks/lwip_stack/src/include/nsfw_mem_api.h index db7f5e7..d2dfe81 100644 --- a/src/framework/include/nsfw_mem_api.h +++ b/stacks/lwip_stack/src/include/nsfw_mem_api.h @@ -24,6 +24,7 @@ #include "nstack_log.h" #define NSFW_MEM_MGR_MODULE "nsfw_mem_mgr" +#define NSFW_MEM_STAT_MODULE "nsfw_mem_stat_module" /* *the max len of memory name is 32bytes, but app just can use max 22bytes, left 10bytes to memory manager module diff --git a/src/framework/include/nsfw_ps_mem_api.h b/stacks/lwip_stack/src/include/nsfw_ps_mem_api.h index 01f9cd3..01f9cd3 100644 --- a/src/framework/include/nsfw_ps_mem_api.h +++ b/stacks/lwip_stack/src/include/nsfw_ps_mem_api.h diff --git a/stacks/lwip_stack/src/maintain/CMakeLists.txt b/stacks/lwip_stack/src/maintain/CMakeLists.txt index 05c5117..53250ed 100644 --- a/stacks/lwip_stack/src/maintain/CMakeLists.txt +++ b/stacks/lwip_stack/src/maintain/CMakeLists.txt @@ -17,7 +17,7 @@ if(WITH_HAL_LIB) else() SET(PAL_H_DIRECTORIES "/usr/include/dpdk/") - SET(PAL_BITWIDE_ADJUST ${PROJECT_SOURCE_DIR}/../../src/framework/common/base/include/common_pal_bitwide_adjust.h) + SET(PAL_BITWIDE_ADJUST ${PROJECT_SOURCE_DIR}/src/include/common_pal_bitwide_adjust.h) ADD_DEFINITIONS(-include ${PAL_BITWIDE_ADJUST}) INCLUDE_DIRECTORIES( ${PAL_H_DIRECTORIES} diff --git a/stacks/lwip_stack/src/mem_mgr/CMakeLists.txt b/stacks/lwip_stack/src/mem_mgr/CMakeLists.txt new file mode 100644 index 0000000..feeba99 --- /dev/null +++ b/stacks/lwip_stack/src/mem_mgr/CMakeLists.txt @@ -0,0 +1,36 @@ +######################################################################### +# +# 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_DIRECTORIES(include nsfw_nshmem nsfw_shmem ps_mem) + +if(WITH_HAL_LIB) +else() + SET(PAL_H_DIRECTORIES "/usr/include/dpdk/") + INCLUDE_DIRECTORIES(${PAL_H_DIRECTORIES}) +# SET(PAL_BITWIDE_ADJUST ${PROJECT_SOURCE_DIR}/src/include/common_pal_bitwide_adjust.h) +# ADD_DEFINITIONS(-include ${PAL_BITWIDE_ADJUST}) +endif() + +FILE(GLOB_RECURSE MEM_MGR_SRC *.c) + +#LINK_LIBRARIES(m dl rt dmm_api) + +if(WITH_SECUREC_LIB) +INCLUDE_DIRECTORIES( + ${SECUREC_SRC} +) +endif() +ADD_LIBRARY(mem_mgr STATIC ${MEM_MGR_SRC}) diff --git a/src/framework/common/mem_mgr/include/nsfw_mem_desc.h b/stacks/lwip_stack/src/mem_mgr/include/nsfw_mem_desc.h index 9a14c8d..9a14c8d 100644 --- a/src/framework/common/mem_mgr/include/nsfw_mem_desc.h +++ b/stacks/lwip_stack/src/mem_mgr/include/nsfw_mem_desc.h diff --git a/src/framework/common/mem_mgr/include/nsfw_ring_data.h b/stacks/lwip_stack/src/mem_mgr/include/nsfw_ring_data.h index e6007ab..e6007ab 100644 --- a/src/framework/common/mem_mgr/include/nsfw_ring_data.h +++ b/stacks/lwip_stack/src/mem_mgr/include/nsfw_ring_data.h diff --git a/src/framework/common/mem_mgr/include/nsfw_ring_fun.h b/stacks/lwip_stack/src/mem_mgr/include/nsfw_ring_fun.h index d74cc4b..d74cc4b 100644 --- a/src/framework/common/mem_mgr/include/nsfw_ring_fun.h +++ b/stacks/lwip_stack/src/mem_mgr/include/nsfw_ring_fun.h diff --git a/stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_api.c b/stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_api.c new file mode 100644 index 0000000..e72826b --- /dev/null +++ b/stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_api.c @@ -0,0 +1,132 @@ +/* +* +* 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 <string.h> +#include "common_mem_api.h" +#include "common_mem_pal.h" +#include "nstack_log.h" +#include "nstack_securec.h" +#include "common_func.h" +#include "dmm_sys.h" + +void +sys_sem_init_v2 (sys_sem_t_v2 sem) +{ + sem->locked = 1; +} + +/** Returns the current time in milliseconds, + * may be the same as sys_jiffies or at least based on it. */ +u32_t +sys_now (void) +{ + struct timespec now; + + if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &now))) + { + NSCOMM_LOGERR ("Failed to get time, errno = %d", errno); + } + + return 1000 * now.tv_sec + now.tv_nsec / 1000000; +} + +long +sys_jiffies (void) +{ + return sys_now (); +} + +err_t +sys_sem_new_v2 (sys_sem_t_v2 * sem, u8_t isUnLockd) +{ + int retVal; + if (!sem) + { + return -1; + } + *sem = malloc (sizeof (common_mem_spinlock_t)); + + if (NULL == *sem) + { + return -1; + } + else + { + retVal = + MEMSET_S (*sem, sizeof (common_mem_spinlock_t), 0, + sizeof (common_mem_spinlock_t)); + if (EOK != retVal) + { + NSCOMM_LOGERR ("MEMSET_S failed]ret=%d", retVal); + free (*sem); + *sem = NULL; + return -1; + } + common_mem_spinlock_init (*sem); + } + + if (!isUnLockd) + { + common_mem_spinlock_lock (*sem); + } + + return 0; +} + +void +sys_sem_free_v2 (sys_sem_t_v2 * sem) +{ + if ((sem != NULL) && (*sem != NULL)) + { + free (*sem); + *sem = NULL; + } + else + { + } +} + +void +sys_sem_signal_v2 (sys_sem_t_v2 * sem) +{ + common_mem_spinlock_unlock (*sem); +} + +void +sys_sem_signal_s_v2 (sys_sem_t_v2 sem) +{ + common_mem_spinlock_unlock (sem); +} + +u32_t +sys_arch_sem_trywait_v2 (sys_sem_t_v2 * sem) +{ + return (u32_t) common_mem_spinlock_trylock (*sem); +} + +u32_t +sys_arch_sem_wait_v2 (sys_sem_t_v2 * pstsem) +{ + common_mem_spinlock_lock (*pstsem); + return 0; +} + +u32_t +sys_arch_sem_wait_s_v2 (sys_sem_t_v2 sem) +{ + common_mem_spinlock_lock (sem); + return 0; +} diff --git a/src/framework/lib_common_mem/common_buf.c b/stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_buf.c index 9d9a127..ad4f425 100644 --- a/src/framework/lib_common_mem/common_buf.c +++ b/stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_buf.c @@ -88,7 +88,7 @@ int log_level = LOG_INFO; int -nscomm_pal_module_init (common_mem_pal_module_info * pinfo, u8 app_mode) +nscomm_pal_module_init (common_mem_pal_module_info * pinfo) { char tempargv[PATA_NUM_MAX][PATA_STRLENT]; char *argv[PATA_NUM_MAX]; @@ -98,7 +98,6 @@ nscomm_pal_module_init (common_mem_pal_module_info * pinfo, u8 app_mode) int agindex = 0; int intmask = 0; int retVal; - char name[10] = { '\0' }; retVal = MEMSET_S (tempargv, sizeof (tempargv), '\0', sizeof (tempargv)); if (EOK != retVal) @@ -117,31 +116,13 @@ nscomm_pal_module_init (common_mem_pal_module_info * pinfo, u8 app_mode) PARA1_SET (argv, tempargv, agindex, "nStackMain"); PARA2_SET (argv, tempargv, agindex, "-c", "0x1"); PARA2_SET (argv, tempargv, agindex, "-n", "4"); + PARA2_SET (argv, tempargv, agindex, "-m", "2048"); PARA1_SET (argv, tempargv, agindex, "--huge-dir=/mnt/nstackhuge"); PARA1_SET (argv, tempargv, agindex, "--proc-type=primary"); - - if (app_mode == 1) - { - sprintf (name, "dmm_app_%ld", (long) getpid ()); - PARA2_SET (argv, tempargv, agindex, "--file-prefix", name); - PARA1_SET (argv, tempargv, agindex, "--no-pci"); - - // TODO: the size of the memory should not be fixed - PARA2_SET (argv, tempargv, agindex, "-m", "32"); - } - else - { - // TODO: replay the name 'nStackMain' - /* snprintf(name, 10, "dmm_main_%ld", (long) getpid()); */ - PARA2_SET (argv, tempargv, agindex, "--file-prefix", "nStackMain"); - PARA2_SET (argv, tempargv, agindex, "-m", "2048"); - } - } else { PARA1_SET (argv, tempargv, agindex, "nStackMain"); - PARA2_SET (argv, tempargv, agindex, "--file-prefix", "nStackMain"); retVal = SPRINTF_S (tempbuf, PATA_STRLENT, "0x"); if (-1 == retVal) diff --git a/src/framework/lib_common_mem/common_func.c b/stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_func.c index 5220374..5220374 100644 --- a/src/framework/lib_common_mem/common_func.c +++ b/stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_func.c diff --git a/src/framework/common/mem_mgr/nsfw_mem_api.c b/stacks/lwip_stack/src/mem_mgr/nsfw_mem_api.c index c89ada1..c89ada1 100644 --- a/src/framework/common/mem_mgr/nsfw_mem_api.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_mem_api.c diff --git a/src/framework/common/mem_mgr/nsfw_mem_construct.c b/stacks/lwip_stack/src/mem_mgr/nsfw_mem_construct.c index ed6fe27..cc93003 100644 --- a/src/framework/common/mem_mgr/nsfw_mem_construct.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_mem_construct.c @@ -16,6 +16,9 @@ #include "nsfw_init.h" #include "nsfw_mem_api.h" +#include "mgr_com.h" NSFW_MODULE_NAME (NSFW_MEM_MGR_MODULE) -NSFW_MODULE_PRIORITY (10) NSFW_MODULE_INIT (nsfw_mem_init) +NSFW_MODULE_PRIORITY (30) +NSFW_MODULE_DEPENDS (NSFW_MEM_STAT_MODULE) +NSFW_MODULE_DEPENDS (NSFW_MGR_COM_MODULE) NSFW_MODULE_INIT (nsfw_mem_init) diff --git a/src/framework/common/mem_mgr/nsfw_mem_desc.c b/stacks/lwip_stack/src/mem_mgr/nsfw_mem_desc.c index d0fbfd3..d0fbfd3 100644 --- a/src/framework/common/mem_mgr/nsfw_mem_desc.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_mem_desc.c diff --git a/src/framework/common/mem_mgr/nsfw_mem_stat.c b/stacks/lwip_stack/src/mem_mgr/nsfw_mem_stat.c index f7a1f41..92d0eda 100644 --- a/src/framework/common/mem_mgr/nsfw_mem_stat.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_mem_stat.c @@ -31,8 +31,6 @@ extern "C"{ #define NSFW_MEM_STAT_NUM 512 -#define NSFW_MEM_STAT_MODULE "nsfw_mem_stat_module" - typedef struct _nsfw_mem_stat { u8 mem_type; @@ -281,7 +279,7 @@ nsfw_mem_stat_init (void *param) /* *INDENT-OFF* */ NSFW_MODULE_NAME (NSFW_MEM_STAT_MODULE) -NSFW_MODULE_PRIORITY (99) +NSFW_MODULE_PRIORITY (20) NSFW_MODULE_INIT (nsfw_mem_stat_init) /* *INDENT-ON* */ diff --git a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.c b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.c index fdb2079..fdb2079 100644 --- a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.c diff --git a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.h b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.h index 1b63520..1b63520 100644 --- a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.h +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.h diff --git a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.c b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.c index 49e3769..49e3769 100644 --- a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.c diff --git a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.h b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.h index 06ab562..06ab562 100644 --- a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.h +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.h diff --git a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.c b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.c index 7e56f3c..7e56f3c 100644 --- a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.c diff --git a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.h b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.h index 93a4d4a..93a4d4a 100644 --- a/src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.h +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.h diff --git a/src/framework/common/mem_mgr/nsfw_res_mgr.c b/stacks/lwip_stack/src/mem_mgr/nsfw_res_mgr.c index c4d8010..ce495ed 100644 --- a/src/framework/common/mem_mgr/nsfw_res_mgr.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_res_mgr.c @@ -418,7 +418,7 @@ nsfw_resmgr_module_init (void *param) /* *INDENT-OFF* */ NSFW_MODULE_NAME(NSFW_RES_MGR_MODULE) -NSFW_MODULE_PRIORITY(99) +NSFW_MODULE_PRIORITY(50) NSFW_MODULE_INIT(nsfw_resmgr_module_init) /* *INDENT-ON* */ diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c index c29b108..c29b108 100644 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.h b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.h index 60c4115..60c4115 100644 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.h +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.h diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.c b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.c index 2e9c969..2e9c969 100644 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.c diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.h b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.h index afd9e29..afd9e29 100644 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.h +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.h diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mng.c b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mng.c index ba38c32..23c2cce 100644 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mng.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mng.c @@ -37,10 +37,6 @@ #define NSFW_SHMEM_PID (get_sys_pid()) #define NSFW_SHMEM_FLAG (g_shmem_localdata->enflag) -/* app_mode 1: simple stack with APP*/ -extern u8 app_mode; -u8 app_mode = 0; - nsfw_mem_localdata *g_shmem_localdata = NULL; /*check g_mem_localdata*/ @@ -75,13 +71,13 @@ nsfw_shmem_init (nsfw_mem_para * para) if (NSFW_PROC_MAIN == para->enflag) { - iret = common_pal_module_init (NULL, app_mode); + iret = common_pal_module_init (NULL); } else { LCORE_MASK_SET (rteinfo.ilcoremask, 1); rteinfo.ucproctype = DMM_PROC_T_SECONDARY; - iret = common_pal_module_init (&rteinfo, app_mode); + iret = common_pal_module_init (&rteinfo); } if (NSFW_MEM_OK != iret) diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mng.h b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mng.h index d489525..d489525 100644 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mng.h +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mng.h diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_ring.c b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_ring.c index c42c840..c42c840 100644 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_ring.c +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_ring.c diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_ring.h b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_ring.h index 15cd1dd..15cd1dd 100644 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_ring.h +++ b/stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_ring.h diff --git a/src/framework/ipc/ps/nsfw_ps_mem_module.c b/stacks/lwip_stack/src/mem_mgr/ps_mem/nsfw_ps_mem_module.c index 55af158..d1b3685 100644 --- a/src/framework/ipc/ps/nsfw_ps_mem_module.c +++ b/stacks/lwip_stack/src/mem_mgr/ps_mem/nsfw_ps_mem_module.c @@ -912,7 +912,7 @@ nsfw_ps_mem_module_init (void *param) /* *INDENT-OFF* */ NSFW_MODULE_NAME (NSFW_PS_MEM_MODULE) -NSFW_MODULE_PRIORITY (10) +NSFW_MODULE_PRIORITY (50) NSFW_MODULE_DEPENDS (NSFW_PS_MODULE) NSFW_MODULE_INIT (nsfw_ps_mem_module_init) /* *INDENT-ON* */ diff --git a/src/framework/ipc/ps/nsfw_ps_mem_module.h b/stacks/lwip_stack/src/mem_mgr/ps_mem/nsfw_ps_mem_module.h index 6b2b3c9..6b2b3c9 100644 --- a/src/framework/ipc/ps/nsfw_ps_mem_module.h +++ b/stacks/lwip_stack/src/mem_mgr/ps_mem/nsfw_ps_mem_module.h diff --git a/stacks/lwip_stack/src/nStackMain/CMakeLists.txt b/stacks/lwip_stack/src/nStackMain/CMakeLists.txt index 24f6c9d..c40cf2e 100644 --- a/stacks/lwip_stack/src/nStackMain/CMakeLists.txt +++ b/stacks/lwip_stack/src/nStackMain/CMakeLists.txt @@ -25,14 +25,15 @@ TARGET_LINK_LIBRARIES( -Wl,--whole-archive ${LIB_PATH_STATIC}/libjson-c.a ${LIB_PATH_STATIC}/libglog.a - dmm_api nStackMaintain stacklwip nStackHal nStackAlarm nTcpdump + mem_mgr -Wl,--no-whole-archive,-lstdc++ -ldl -Wl,--no-as-needed + dmm_api rte_eal rte_ethdev rte_mempool @@ -48,9 +49,9 @@ TARGET_LINK_LIBRARIES( ) if(WITH_SECUREC_LIB) -ADD_DEPENDENCIES(nStackMain nStackHal nStackMaintain nStackAlarm stacklwip SECUREC) +ADD_DEPENDENCIES(nStackMain nStackHal nStackMaintain nStackAlarm mem_mgr stacklwip SECUREC) else() -ADD_DEPENDENCIES(nStackMain nStackHal nStackMaintain nStackAlarm stacklwip) +ADD_DEPENDENCIES(nStackMain nStackHal nStackMaintain nStackAlarm mem_mgr stacklwip) endif() INCLUDE_DIRECTORIES( diff --git a/stacks/lwip_stack/src/nStackMain/main.c b/stacks/lwip_stack/src/nStackMain/main.c index ce05068..5f2a3c8 100644 --- a/stacks/lwip_stack/src/nStackMain/main.c +++ b/stacks/lwip_stack/src/nStackMain/main.c @@ -27,6 +27,7 @@ #include "nsfw_init.h" #include "alarm_api.h" +#include "mgr_com.h" #include "nsfw_mgr_com_api.h" #include "nsfw_ps_mem_api.h" #include "nsfw_ps_api.h" @@ -292,7 +293,7 @@ nstack_main (void) char *argv[NSTACK_MAIN_MAX_PARA]; argv[0] = "nStackMain"; - argv[1] = "-c";; + argv[1] = "-c"; argv[2] = "0xffffffff"; argv[3] = "-n"; argv[4] = "3"; @@ -309,6 +310,7 @@ main (int argc, char *argv[]) { #endif fw_poc_type proc_type = NSFW_PROC_MAIN; + nsfw_mem_para stinfo = { 0 }; /* although nStackMaster has set close on exec, here can't be removed. * in upgrade senario, if Master is old which has not set close on exec, here, @@ -365,6 +367,13 @@ main (int argc, char *argv[]) (void) nsfw_reg_trace_thread (pthread_self ()); + stinfo.iargsnum = uStackArgIndex; + stinfo.pargs = gArgv; + stinfo.enflag = NSFW_PROC_MAIN; + + (void) nstack_framework_setModuleParam (NSFW_MEM_MGR_MODULE, &stinfo); + (void) nstack_framework_setModuleParam (NSFW_PS_MEM_MODULE, + (void *) ((u64) proc_type)); (void) nstack_framework_setModuleParam (NSFW_ALARM_MODULE, (void *) ((u64) proc_type)); (void) nstack_framework_setModuleParam (TCPDUMP_MODULE, diff --git a/stacks/lwip_stack/src/sbr/CMakeLists.txt b/stacks/lwip_stack/src/sbr/CMakeLists.txt index 42ab4a4..a0377ee 100644 --- a/stacks/lwip_stack/src/sbr/CMakeLists.txt +++ b/stacks/lwip_stack/src/sbr/CMakeLists.txt @@ -22,7 +22,21 @@ endif() FILE(GLOB SBR *.c) ADD_LIBRARY(nstack SHARED ${SBR}) -TARGET_LINK_LIBRARIES(nstack -Wl,--whole-archive socket -Wl,--no-whole-archive dmm_api nStackMaintain) +TARGET_LINK_LIBRARIES(nstack + -Wl,--whole-archive + socket + mem_mgr + nStackMaintain + -Wl,--no-whole-archive + -Wl,--no-as-needed + dmm_api + rte_eal + rte_ethdev + rte_mempool + rte_ring + rte_mbuf + rte_cmdline +) ADD_DEPENDENCIES(nstack socket DPDK) INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_LIST_DIR}/../include diff --git a/stacks/lwip_stack/src/sbr/sbr_socket.c b/stacks/lwip_stack/src/sbr/sbr_socket.c index e088224..1adb54d 100644 --- a/stacks/lwip_stack/src/sbr/sbr_socket.c +++ b/stacks/lwip_stack/src/sbr/sbr_socket.c @@ -15,6 +15,9 @@ */ #include <dlfcn.h> +#include "nsfw_init.h" +#include "nsfw_ps_mem_api.h" +#include "mgr_com.h" #include "sbr_protocol_api.h" #include "sbr_res_mgr.h" #include "nstack_log.h" @@ -1236,6 +1239,22 @@ SBR_INTERCEPT (void, fork_free_fd, (int s, pid_t p, pid_t c)) sbr_free_fd (s); } +static void +nstack_stack_init_module_param () +{ + /* We have to use static for nstack_framework_setModuleParam save the address */ + static nsfw_mem_para stinfo = { 0 }; + + stinfo.iargsnum = 0; + stinfo.pargs = NULL; + stinfo.enflag = NSFW_PROC_APP; + + (void) nstack_framework_setModuleParam (NSFW_MEM_MGR_MODULE, + (void *) &stinfo); + (void) nstack_framework_setModuleParam (NSFW_PS_MEM_MODULE, + (void *) (u64) NSFW_PROC_APP); +} + /***************************************************************************** * Prototype : nstack_stack_register * Description : reg api to nsocket @@ -1270,5 +1289,8 @@ nstack_stack_register (nstack_proc_cb * ops, nstack_event_cb * val) (ops->extern_ops).fork_parent_fd = GET_SBR_INTERCEPT (fork_parent_fd); (ops->extern_ops).fork_child_fd = GET_SBR_INTERCEPT (fork_child_fd); (ops->extern_ops).fork_free_fd = GET_SBR_INTERCEPT (fork_free_fd); + + nstack_stack_init_module_param (); + return 0; } diff --git a/stacks/lwip_stack/src/tools/dump_tool.c b/stacks/lwip_stack/src/tools/dump_tool.c index 53f0e44..b6a805a 100644 --- a/stacks/lwip_stack/src/tools/dump_tool.c +++ b/stacks/lwip_stack/src/tools/dump_tool.c @@ -616,7 +616,7 @@ dump_tool_init (void *param) /* *INDENT-OFF* */ NSFW_MODULE_NAME (TCPDUMP_MODULE) -NSFW_MODULE_PRIORITY (10) +NSFW_MODULE_PRIORITY (80) NSFW_MODULE_DEPENDS (NSTACK_DMM_MODULE) NSFW_MODULE_INIT (dump_tool_init) /* *INDENT-ON* */ diff --git a/stacks/lwip_stack/tools/CMakeLists.txt b/stacks/lwip_stack/tools/CMakeLists.txt index cfb5615..918cfd3 100644 --- a/stacks/lwip_stack/tools/CMakeLists.txt +++ b/stacks/lwip_stack/tools/CMakeLists.txt @@ -46,6 +46,7 @@ TARGET_LINK_LIBRARIES( libjson-c.a libglog.a dmm_api + mem_mgr -Wl,--no-whole-archive,-lstdc++ -ldl rte_eal rte_mempool @@ -61,6 +62,7 @@ TARGET_LINK_LIBRARIES( libjson-c.a libglog.a dmm_api + mem_mgr -Wl,--no-whole-archive,-lstdc++ -ldl rte_eal rte_mempool @@ -70,9 +72,9 @@ TARGET_LINK_LIBRARIES( endif() if(WITH_SECUREC_LIB) -ADD_DEPENDENCIES(ntcpdump JSON GLOG SECUREC DPDK) +ADD_DEPENDENCIES(ntcpdump mem_mgr JSON GLOG SECUREC DPDK) else() -ADD_DEPENDENCIES(ntcpdump JSON GLOG DPDK) +ADD_DEPENDENCIES(ntcpdump mem_mgr JSON GLOG DPDK) endif() diff --git a/stacks/lwip_stack/tools/ntcpdump.c b/stacks/lwip_stack/tools/ntcpdump.c index 31a96bc..1f48178 100644 --- a/stacks/lwip_stack/tools/ntcpdump.c +++ b/stacks/lwip_stack/tools/ntcpdump.c @@ -28,6 +28,7 @@ #include "nsfw_fd_timer_api.h" #include "nsfw_maintain_api.h" #include "nstack_securec.h" +#include "mgr_com.h" #include "tool_common.h" diff --git a/stacks/rsocket/CMakeLists.txt b/stacks/rsocket/CMakeLists.txt index c1b2f18..8b8fe8d 100644 --- a/stacks/rsocket/CMakeLists.txt +++ b/stacks/rsocket/CMakeLists.txt @@ -34,7 +34,7 @@ ExternalProject_Add( BUILD_IN_SOURCE 1 BUILD_COMMAND make INSTALL_COMMAND cp -f libdmm_rdmacm.a ${LIB_PATH_STATIC}/ - DEPENDS DPDK + DEPENDS post-compile ) set_target_properties(rdmacm PROPERTIES EXCLUDE_FROM_ALL TRUE) @@ -56,6 +56,6 @@ TARGET_LINK_LIBRARIES(dmm_rsocket ibverbs pthread dl rt ) -ADD_DEPENDENCIES(dmm_rsocket rdmacm DPDK) +ADD_DEPENDENCIES(dmm_rsocket rdmacm post-compile) set_target_properties(dmm_rsocket PROPERTIES EXCLUDE_FROM_ALL TRUE) |