aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornanger <zhenyinan@huawei.com>2018-09-29 16:41:15 +0800
committernanger <zhenyinan@huawei.com>2018-09-29 16:45:14 +0800
commit74c9aed15303d388d7d0429128bc3af96f7eb45c (patch)
treeb4659364e410ef5b0f36b61bbf98c48e5763d8e5
parent31ea86798426cf236d70c9de1944c723a6cb1d95 (diff)
Refactor: change to dmm share memory
Change-Id: Iff87eb5c6610c1db9247a898dd4c8ffbe6eeabdf Signed-off-by: nanger <zhenyinan@huawei.com>
-rw-r--r--.gitignore8
-rw-r--r--CMakeLists.txt36
-rw-r--r--release/include/declare_syscalls.h51
-rw-r--r--src/CMakeLists.txt8
-rw-r--r--src/adapt/nstack_dmm_adpt.c38
-rw-r--r--src/adapt/nstack_epoll_comm.c255
-rw-r--r--src/adapt/nstack_share_res.c88
-rw-r--r--src/adapt/nstack_share_res.h15
-rw-r--r--src/framework/CMakeLists.txt12
-rw-r--r--src/framework/common/base/liblinuxapi/nsfw_lock_file.c2
-rw-r--r--src/framework/common/data_struct/eprb_tree.c185
-rw-r--r--src/framework/common/dmm_sys.c (renamed from src/framework/lib_common_mem/common_api.c)126
-rw-r--r--src/framework/common/include/dmm_sys.h44
-rw-r--r--src/framework/common/include/ephlist.h48
-rw-r--r--src/framework/common/include/eprb_tree.h9
-rw-r--r--src/framework/common/include/generic/dmm_atomic.h40
-rw-r--r--src/framework/common/include/generic/dmm_spinlock.h22
-rw-r--r--src/framework/hal/hal.c5
-rw-r--r--src/framework/hal/hal.h1
-rw-r--r--src/framework/include/dmm_common.h76
-rw-r--r--src/framework/include/dmm_config.h16
-rw-r--r--src/framework/include/nsfw_fd_timer_api.h4
-rw-r--r--src/framework/include/nsfw_mgr_com_api.h2
-rw-r--r--src/framework/include/nsfw_recycle_api.h2
-rw-r--r--src/framework/include/nstack_log.h1
-rw-r--r--src/framework/include/nstack_securec.h11
-rw-r--r--src/framework/init/CMakeLists.txt6
-rw-r--r--src/framework/init/fw_init.c39
-rw-r--r--src/framework/init/fw_module.c6
-rw-r--r--src/framework/ipc/mgr_com/mgr_com.c65
-rw-r--r--src/framework/ipc/mgr_com/mgr_com.h24
-rw-r--r--src/framework/ipc/ps/nsfw_fd_timer.c38
-rw-r--r--src/framework/ipc/ps/nsfw_ps_module.c50
-rw-r--r--src/framework/ipc/ps/nsfw_ps_module.h6
-rw-r--r--src/framework/ipc/ps/nsfw_recycle_module.c93
-rw-r--r--src/framework/ipc/ps/nsfw_recycle_module.h6
-rw-r--r--src/framework/ipc/ps/nsfw_soft_param.c4
-rw-r--r--src/framework/log/nsfw_set_log.c3
-rw-r--r--src/framework/mem/dmm_fshm.c76
-rw-r--r--src/framework/mem/dmm_group.c46
-rw-r--r--src/framework/mem/dmm_huge.c144
-rw-r--r--src/framework/mem/dmm_memory.c145
-rw-r--r--src/framework/mem/dmm_memory.h55
-rw-r--r--src/framework/mem/dmm_segment.c145
-rw-r--r--src/framework/mem/dmm_segment.h8
-rw-r--r--src/framework/ring/dmm_ring.c94
-rw-r--r--src/framework/ring/dmm_ring.h205
-rw-r--r--src/framework/ring/dmm_ring_base.h189
-rw-r--r--src/nSocket/CMakeLists.txt12
-rw-r--r--src/nSocket/include/nstack_atomic.h57
-rw-r--r--src/nSocket/include/nstack_eventpoll.h26
-rw-r--r--src/nSocket/include/nstack_types.h1
-rw-r--r--src/nSocket/include/select_adapt.h11
-rw-r--r--src/nSocket/nstack/event/epoll/nstack_eventpoll.c174
-rw-r--r--src/nSocket/nstack/event/select/nstack_select.c2
-rw-r--r--src/nSocket/nstack/nstack.c68
-rw-r--r--src/nSocket/nstack/nstack.h20
-rw-r--r--src/nSocket/nstack/nstack_fd_mng.c3
-rw-r--r--src/nSocket/nstack/nstack_fd_mng.h9
-rw-r--r--src/nSocket/nstack/nstack_module.c1
-rw-r--r--src/nSocket/nstack/nstack_nsocket_construct.c5
-rw-r--r--src/nSocket/nstack/nstack_socket.c52
-rw-r--r--src/nSocket/nstack/nstack_socket.h30
-rw-r--r--src/nSocket/nstack_rd/nstack_rd_ip.c2
-rw-r--r--src/nSocket/nstack_rd/nstack_rd_proto.c3
-rw-r--r--stacks/lwip_stack/CMakeLists.txt10
-rw-r--r--stacks/lwip_stack/lwip_src/CMakeLists.txt14
-rw-r--r--stacks/lwip_stack/lwip_src/api/spl_api.c2
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackxopts.h2
-rw-r--r--stacks/lwip_stack/lwip_src/core/global_tick.c31
-rw-r--r--stacks/lwip_stack/lwip_src/core/global_tick.h29
-rw-r--r--stacks/lwip_stack/lwip_src/core/spl_timers.c2
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h1
-rw-r--r--stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c3
-rw-r--r--stacks/lwip_stack/lwip_src/socket/CMakeLists.txt15
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c2
-rw-r--r--stacks/lwip_stack/release/script/nstack_var.sh2
-rw-r--r--stacks/lwip_stack/src/CMakeLists.txt16
-rw-r--r--stacks/lwip_stack/src/alarm/alarm.c2
-rw-r--r--stacks/lwip_stack/src/include/common/common_func.h (renamed from src/framework/common/base/include/common/common_func.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_api.h (renamed from src/framework/common/base/include/common/common_mem_api.h)27
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_base_type.h (renamed from src/framework/common/base/include/common/common_mem_base_type.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_buf.h (renamed from src/framework/common/base/include/common/common_mem_buf.h)2
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_common.h (renamed from src/framework/common/base/include/common/common_mem_common.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_malloc.h (renamed from src/framework/common/base/include/common/common_mem_malloc.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_mbuf.h (renamed from src/framework/common/base/include/common/common_mem_mbuf.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_mempool.h (renamed from src/framework/common/base/include/common/common_mem_mempool.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_memzone.h (renamed from src/framework/common/base/include/common/common_mem_memzone.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_pal.h (renamed from src/framework/common/base/include/common/common_mem_pal.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_pal_memconfig.h (renamed from src/framework/common/base/include/common/common_mem_pal_memconfig.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_mem_spinlock.h (renamed from src/framework/common/base/include/common/common_mem_spinlock.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/common_sys_config.h (renamed from src/framework/common/base/include/common/common_sys_config.h)0
-rw-r--r--stacks/lwip_stack/src/include/common/generic/common_mem_rwlock.h (renamed from src/framework/common/base/include/common/generic/common_mem_rwlock.h)0
-rw-r--r--stacks/lwip_stack/src/include/common_pal_bitwide_adjust.h (renamed from src/framework/common/base/include/common_pal_bitwide_adjust.h)0
-rw-r--r--stacks/lwip_stack/src/include/nsfw_mem_api.h (renamed from src/framework/include/nsfw_mem_api.h)1
-rw-r--r--stacks/lwip_stack/src/include/nsfw_ps_mem_api.h (renamed from src/framework/include/nsfw_ps_mem_api.h)0
-rw-r--r--stacks/lwip_stack/src/maintain/CMakeLists.txt2
-rw-r--r--stacks/lwip_stack/src/mem_mgr/CMakeLists.txt36
-rw-r--r--stacks/lwip_stack/src/mem_mgr/include/nsfw_mem_desc.h (renamed from src/framework/common/mem_mgr/include/nsfw_mem_desc.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/include/nsfw_ring_data.h (renamed from src/framework/common/mem_mgr/include/nsfw_ring_data.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/include/nsfw_ring_fun.h (renamed from src/framework/common/mem_mgr/include/nsfw_ring_fun.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_api.c132
-rw-r--r--stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_buf.c (renamed from src/framework/lib_common_mem/common_buf.c)23
-rw-r--r--stacks/lwip_stack/src/mem_mgr/lib_common_mem/common_func.c (renamed from src/framework/lib_common_mem/common_func.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_mem_api.c (renamed from src/framework/common/mem_mgr/nsfw_mem_api.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_mem_construct.c (renamed from src/framework/common/mem_mgr/nsfw_mem_construct.c)5
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_mem_desc.c (renamed from src/framework/common/mem_mgr/nsfw_mem_desc.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_mem_stat.c (renamed from src/framework/common/mem_mgr/nsfw_mem_stat.c)4
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.c (renamed from src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.h (renamed from src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mdesc.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.c (renamed from src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.h (renamed from src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_mng.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.c (renamed from src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.h (renamed from src/framework/common/mem_mgr/nsfw_nshmem/nsfw_nshmem_ring.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_res_mgr.c (renamed from src/framework/common/mem_mgr/nsfw_res_mgr.c)2
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c (renamed from src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.h (renamed from src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.c (renamed from src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.h (renamed from src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mdesc.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mng.c (renamed from src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mng.c)8
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_mng.h (renamed from src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_mng.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_ring.c (renamed from src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_ring.c)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/nsfw_shmem/nsfw_shmem_ring.h (renamed from src/framework/common/mem_mgr/nsfw_shmem/nsfw_shmem_ring.h)0
-rw-r--r--stacks/lwip_stack/src/mem_mgr/ps_mem/nsfw_ps_mem_module.c (renamed from src/framework/ipc/ps/nsfw_ps_mem_module.c)2
-rw-r--r--stacks/lwip_stack/src/mem_mgr/ps_mem/nsfw_ps_mem_module.h (renamed from src/framework/ipc/ps/nsfw_ps_mem_module.h)0
-rw-r--r--stacks/lwip_stack/src/nStackMain/CMakeLists.txt7
-rw-r--r--stacks/lwip_stack/src/nStackMain/main.c11
-rw-r--r--stacks/lwip_stack/src/sbr/CMakeLists.txt16
-rw-r--r--stacks/lwip_stack/src/sbr/sbr_socket.c22
-rw-r--r--stacks/lwip_stack/src/tools/dump_tool.c2
-rw-r--r--stacks/lwip_stack/tools/CMakeLists.txt6
-rw-r--r--stacks/lwip_stack/tools/ntcpdump.c1
-rw-r--r--stacks/rsocket/CMakeLists.txt4
133 files changed, 2096 insertions, 1376 deletions
diff --git a/.gitignore b/.gitignore
index 21902dc..839b077 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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 (&param);
- 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 (&param);
- 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)