diff options
Diffstat (limited to 'src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c')
-rw-r--r-- | src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c | 987 |
1 files changed, 0 insertions, 987 deletions
diff --git a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c b/src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c deleted file mode 100644 index c29b108..0000000 --- a/src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c +++ /dev/null @@ -1,987 +0,0 @@ -/* -* -* Copyright (c) 2018 Huawei Technologies Co.,Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at: -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#include <stdint.h> -#include "nstack_securec.h" -#include "nstack_log.h" -#include "nsfw_ring_fun.h" -#include "nsfw_shmem_ring.h" -#include "nsfw_shmem_mng.h" -#include "common_mem_buf.h" -#include "common_mem_common.h" - -#include "common_func.h" - -/*get the base address of msg data */ -#define NSFW_SHMEM_GET_DATA(pmsg, type) (type *)&((pmsg)->aidata[0]) - -/*if input point is nun, just return null*/ -#define NSFW_POINT_CHK_RET_NULL(p, desc) \ - if (NULL == (p)) \ - { \ - NSCOMM_LOGERR("point check fail] desc_para=%s", desc); \ - return NULL; \ - } - -/*if input point is nun, just return err num*/ -#define NSFW_POINT_CHK_RET_ERR(p, desc) \ - if (NULL == (p)) \ - { \ - NSCOMM_LOGDBG("point check fail] desc_para=%s", desc); \ - return NSFW_MEM_ERR; \ - } - -/*if input point is nun, goto flag*/ -#define NSFW_POINT_CHK_RET_GOTO(p, gotoflag, desc) \ - if (NULL == (p)) \ - { \ - NSCOMM_LOGERR("point check fail] desc_para=%s", desc); \ - goto gotoflag; \ - } - -/*init the msg head*/ -#define NSFW_SHMEM_MSG_HEAD_INIT(pmsg, type, length) { \ - (pmsg)->usmsg_type = (type); \ - (pmsg)->uslength = (length); \ - } - -/*rsp msg head check, and if err goto*/ -#define NSFW_SHMEM_MSGHEAD_CHK_GOTO(pmsg, type, length, gotoflag) { \ - if (((type) != pmsg->usmsg_type) && ((length) != pmsg->uslength)) \ - { \ - NSCOMM_LOGERR("check fail] msgtype=%d, type_para=%d, len=%d", (pmsg->usmsg_type), (type), (length)); \ - goto gotoflag; \ - } \ - } - -/*rsp check the state*/ -#define NSFW_SHMEM_ACKSTATE_CHK_GOTO(expret, ret, expseg, seg, gotoflag) { \ - if (((ret) != (expret)) || ((expseg) != (seg))) \ - { \ - NSCOMM_LOGERR("ackstate check fail]msgack exp=%d, real=%d,eseg=%d, rseg=%d", (expret), (ret), (expseg), (seg)); \ - goto gotoflag; \ - } \ - } - -/*mzone msg init*/ -#define NSFW_SHMEM_MZONE_DATA_INIT(pdata, slength, seg, socketid) { \ - (pdata)->isocket_id = (socketid); \ - (pdata)->length = (slength); \ - (pdata)->usseq = (seg); \ - (pdata)->ireserv = 0; \ - } - -/*mbuf msg init*/ -#define NSFW_SHMEM_MBUF_DATA_INIT(pdata, seg, num, cashsize, priv_size, data_room, flag, socketid) { \ - (pdata)->usseq = (seg); \ - (pdata)->usnum = (num); \ - (pdata)->uscash_size = (cashsize); \ - (pdata)->uspriv_size = (priv_size); \ - (pdata)->usdata_room = (data_room); \ - (pdata)->enmptype = (flag); \ - (pdata)->isocket_id = (socketid); \ - (pdata)->ireserv = 0; \ - } - -/*mpool msg init*/ -#define NSFW_SHMEM_MPOOL_DATA_INIT(pdata, seg, num, eltsize, flag, socketid) { \ - (pdata)->usseq = (seg); \ - (pdata)->usnum = (num); \ - (pdata)->useltsize = (eltsize); \ - (pdata)->enmptype = (flag); \ - (pdata)->isocket_id = (socketid); \ - (pdata)->ireserv = 0; \ - } - -/*mring msg init*/ -#define NSFW_SHMEM_MRING_DATA_INIT(pdata, seg, num, flag, socketid) { \ - (pdata)->usseq = (seg); \ - (pdata)->usnum = (num); \ - (pdata)->enmptype = (flag); \ - (pdata)->isocket_id = (socketid); \ - (pdata)->ireserv = 0; \ - } - -#define NSFW_SHMEM_MSG_FREE(pmsg, prsp_msg) {\ - if (pmsg) \ - { \ - nsfw_mgr_msg_free(pmsg); \ - } \ - if (prsp_msg) \ - { \ - nsfw_mgr_msg_free(prsp_msg); \ - } \ -} - -/* - * create a block memory by send a msg - * - */ -mzone_handle -nsfw_memzone_remote_reserv (const i8 * name, size_t mlen, i32 socket_id) -{ - /*msg point define */ - nsfw_mgr_msg *pmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - - /*msg head point define */ - nsfw_shmem_msg_head *pdata_head = NULL; - - /*msg data point define */ - nsfw_shmem_reserv_req *pdata = NULL; - nsfw_shmem_msg_head *pack_head = NULL; - - /*ack msg define */ - nsfw_shmem_ack *pack_data = NULL; - - mzone_handle hhandle = NULL; - u8 ucret = TRUE; - i32 iretval = NSFW_MEM_OK; - - //pmsg = nsfw_mgr_msg_alloc(MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MASTER); - pmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_NULL (pmsg, "remote reserv pmsg alloc"); - - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, release, "remote reserv rspmsg alloc"); - - /*msg head init */ - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, pmsg); - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_RESERV_REQ_MSG, - sizeof (nsfw_shmem_reserv_req)); - - /*msg data init */ - pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_reserv_req); - iretval = STRCPY_S (pdata->aname, sizeof (pdata->aname), name); - if (EOK != iretval) - { - NSCOMM_LOGERR ("reserv mem copy name fail] ret=%d", iretval); - goto release; - } - - /*fill msg data */ - NSFW_SHMEM_MZONE_DATA_INIT (pdata, mlen, (u16) 0, socket_id); - - ucret = nsfw_mgr_send_req_wait_rsp (pmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("reserv mem req rsp fail] ret=%u", ucret); - goto release; - } - - /*interrupt msg head */ - pack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (pack_head, NSFW_RESERV_ACK_MSG, - sizeof (nsfw_shmem_ack), release); - - pack_data = NSFW_SHMEM_GET_DATA (pack_head, nsfw_shmem_ack); - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, pack_data->cstate, 0, - pack_data->usseq, release); - - hhandle = (mzone_handle) ADDR_SHTOL (pack_data->pbase_addr); - NSCOMM_LOGDBG ("mem reserve] name=%s, handle=%p, seg=%u", name, hhandle, - pack_data->usseq); -release: - NSFW_SHMEM_MSG_FREE (pmsg, prsp_msg); - return hhandle; -} - -/* - *create some memories by send a msg - */ -i32 -nsfw_memzone_remote_reserv_v (nsfw_mem_zone * pmeminfo, - mzone_handle * paddr_array, i32 inum, pid_t pid) -{ - /*msg point define */ - nsfw_mgr_msg *pmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - nsfw_shmem_msg_head *pdata_head = NULL; - nsfw_shmem_reserv_req *pdata = NULL; - nsfw_shmem_reserv_req *ptempdata = NULL; - nsfw_shmem_msg_head *pack_head = NULL; - - nsfw_shmem_ack *pack_data = NULL; - u8 ucret = TRUE; - i32 iretval = NSFW_MEM_OK; - i32 icount = 0; - i32 itindex = 0; - i32 iindex = 0; - u16 ussegbase = 0; - u16 ustempv = 0; - i32 ieltnum = 0; - i32 ieltnum_max = - (NSFW_MGR_MSG_BODY_LEN - - sizeof (nsfw_shmem_msg_head)) / sizeof (nsfw_shmem_reserv_req); - - //pmsg = nsfw_mgr_msg_alloc(MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MASTER); - pmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_GOTO (pmsg, err, "remote reserv_v msg alloc"); - - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, err, "remote reserv_v rspmsg alloc"); - - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, pmsg); - - ptempdata = pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_reserv_req); - - do - { - icount++; - ieltnum++; - - if (((icount % ieltnum_max) == 0) || (icount >= inum)) - { - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_RESERV_REQ_MSG, - ieltnum * sizeof (nsfw_shmem_reserv_req)); - - itindex = icount - 1; - int retVal = - SPRINTF_S (ptempdata->aname, sizeof (ptempdata->aname), "%s_%x", - pmeminfo[itindex].stname.aname, pid); - if (-1 == retVal) - { - NSCOMM_LOGERR ("SPRINTF_S failed]ret=%d", retVal); - } - NSFW_SHMEM_MZONE_DATA_INIT (ptempdata, pmeminfo[itindex].length, - (u16) itindex, - pmeminfo[itindex].isocket_id); - - ucret = nsfw_mgr_send_req_wait_rsp (pmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("reserv v mem req rsp fail] ret=%u", ucret); - goto err; - } - - pack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (pack_head, NSFW_RESERV_ACK_MSG, - ieltnum * sizeof (nsfw_shmem_ack), - err); - - pack_data = NSFW_SHMEM_GET_DATA (pack_head, nsfw_shmem_ack); - - for (iindex = 0; iindex < ieltnum; iindex++) - { - ustempv = ussegbase + iindex; - - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, - pack_data->cstate, ustempv, - (u16) pack_data->usseq, err); - - paddr_array[ustempv] = ADDR_SHTOL (pack_data->pbase_addr); - NSCOMM_LOGDBG ("remote reserve]index=%u, seg=%u, handle=%p", - ustempv, pack_data->usseq, paddr_array[ustempv]); - pack_data++; - } - - ussegbase = icount; - ieltnum = 0; - ptempdata = pdata; - } - else - { - itindex = icount - 1; - int retVal = - SPRINTF_S (ptempdata->aname, sizeof (ptempdata->aname), "%s_%x", - pmeminfo[itindex].stname.aname, pid); - if (-1 == retVal) - { - NSCOMM_LOGERR ("SPRINTF_S failed]ret=%d", retVal); - } - NSFW_SHMEM_MZONE_DATA_INIT (ptempdata, pmeminfo[itindex].length, - (u16) itindex, - pmeminfo[itindex].isocket_id); - ptempdata++; - } - } - while (icount < inum); - - iretval = NSFW_MEM_OK; - goto free; - -err: - iretval = NSFW_MEM_ERR; -free: - NSFW_SHMEM_MSG_FREE (pmsg, prsp_msg); - return iretval; -} - -/* - *release a block memory with name by send msg - */ -i32 -nsfw_remote_free (const i8 * name, nsfw_mem_struct_type entype) -{ - /*msg point define */ - nsfw_mgr_msg *pmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - - nsfw_shmem_msg_head *pdata_head = NULL; - - nsfw_shmem_free_req *pdata = NULL; - - nsfw_shmem_msg_head *pack_head = NULL; - nsfw_shmem_ack *pack_data = NULL; - u8 ucret = TRUE; - i32 iretval = NSFW_MEM_OK; - - pmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_ERR (pmsg, "remote free msg alloc"); - - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, terr, "remote free rspmsg alloc"); - - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, pmsg); - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_RELEASE_REQ_MSG, - sizeof (nsfw_shmem_free_req)); - - pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_free_req); - if (EOK != STRCPY_S (pdata->aname, sizeof (pdata->aname), name)) - { - NSCOMM_LOGERR ("STRCPY_S failed]name=%s", name); - } - pdata->usseq = 0; - pdata->ustype = entype; - pdata->ireserv = 0; - - ucret = nsfw_mgr_send_req_wait_rsp (pmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("free mem req rsp fail] ret=%u", ucret); - goto release; - } - - pack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (pack_head, NSFW_RELEASE_ACK_MSG, - sizeof (nsfw_shmem_ack), terr); - - pack_data = NSFW_SHMEM_GET_DATA (pack_head, nsfw_shmem_ack); - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, pack_data->cstate, 0, - pack_data->usseq, terr); - - iretval = NSFW_MEM_OK; - goto release; -terr: - iretval = NSFW_MEM_ERR; -release: - NSFW_SHMEM_MSG_FREE (pmsg, prsp_msg); - return iretval; -} - -/* - *create a mbuf pool by send a msg - */ -mpool_handle -nsfw_remote_shmem_mbf_create (const i8 * name, unsigned n, - unsigned cache_size, unsigned priv_size, - unsigned data_room_size, i32 socket_id, - nsfw_mpool_type entype) -{ - /*msg point define */ - nsfw_mgr_msg *pmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - nsfw_shmem_msg_head *pdata_head = NULL; - nsfw_shmem_mbuf_req *pdata = NULL; - nsfw_shmem_msg_head *tpack_head = NULL; - nsfw_shmem_ack *tpack_data = NULL; - mpool_handle hhandle = NULL; - u8 ucret = TRUE; - i32 iretval = NSFW_MEM_OK; - - pmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_NULL (pmsg, "remote mbf create pmsg alloc"); - - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, release, "remote mbf create msg alloc"); - - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, pmsg); - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_MBUF_REQ_MSG, - sizeof (nsfw_shmem_mbuf_req)); - - pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_mbuf_req); - iretval = STRCPY_S (pdata->aname, sizeof (pdata->aname), name); - if (EOK != iretval) - { - NSCOMM_LOGERR ("mbf create name cpy fail] ret=%d", iretval); - goto release; - } - - NSFW_SHMEM_MBUF_DATA_INIT (pdata, 0, n, cache_size, priv_size, - data_room_size, (u16) entype, socket_id); - - ucret = nsfw_mgr_send_req_wait_rsp (pmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("mbf create mem req rsp fail] ret=%u", ucret); - goto release; - } - - tpack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (tpack_head, NSFW_MBUF_ACK_MSG, - sizeof (nsfw_shmem_ack), release); - - tpack_data = NSFW_SHMEM_GET_DATA (tpack_head, nsfw_shmem_ack); - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, tpack_data->cstate, 0, - tpack_data->usseq, release); - - hhandle = ADDR_SHTOL (tpack_data->pbase_addr); - NSCOMM_LOGDBG ("mbf create] name=%s, handle=%p, seg=%u", name, hhandle, - tpack_data->usseq); -release: - NSFW_SHMEM_MSG_FREE (pmsg, prsp_msg); - return hhandle; -} - -/* - *create some mbuf pools - */ -i32 -nsfw_remote_shmem_mbf_createv (nsfw_mem_mbfpool * pmbfname, - mpool_handle * phandle_array, i32 inum, - pid_t pid) -{ - /*msg point define */ - nsfw_mgr_msg *mbpmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - nsfw_shmem_msg_head *pdata_head = NULL; - - nsfw_shmem_mbuf_req *pdata = NULL; - nsfw_shmem_mbuf_req *ptempdata = NULL; - - nsfw_shmem_msg_head *pack_head = NULL; - - nsfw_shmem_ack *pack_data = NULL; - mpool_handle hhandle = NULL; - u8 ucret = TRUE; - i32 iretval = NSFW_MEM_OK; - i32 icount = 0; - i32 itindex = 0; - i32 iindex = 0; - i32 isegbase = 0; - i32 ieltnum = 0; - i32 ieltnum_max = - (NSFW_MGR_MSG_BODY_LEN - - sizeof (nsfw_shmem_msg_head)) / sizeof (nsfw_shmem_mbuf_req); - - mbpmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_GOTO (mbpmsg, lerr, "remote mbf createv msg alloc"); - - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, lerr, "remote mbf createv rspmsg alloc"); - - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, mbpmsg); - - ptempdata = pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_mbuf_req); - - do - { - icount++; - ieltnum++; - - if (((icount % ieltnum_max) == 0) || (icount >= inum)) - { - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_MBUF_REQ_MSG, - ieltnum * sizeof (nsfw_shmem_mbuf_req)); - - /*fill msg data */ - itindex = icount - 1; - if (-1 == - SPRINTF_S (ptempdata->aname, sizeof (ptempdata->aname), "%s_%x", - pmbfname[itindex].stname.aname, pid)) - { - NSCOMM_LOGERR ("SPRINTF_S failed]"); - goto lerr; - } - NSFW_SHMEM_MBUF_DATA_INIT (ptempdata, (u16) itindex, - pmbfname[itindex].usnum, - pmbfname[itindex].uscash_size, - pmbfname[itindex].uspriv_size, - pmbfname[itindex].usdata_room, - pmbfname[itindex].enmptype, - pmbfname[itindex].isocket_id); - - ucret = nsfw_mgr_send_req_wait_rsp (mbpmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("mbf createv mem req rsp fail] ret=%d", ucret); - goto lerr; - } - - /*interrupt msg head */ - pack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (pack_head, NSFW_MBUF_ACK_MSG, - ieltnum * sizeof (nsfw_shmem_ack), - lerr); - - pack_data = NSFW_SHMEM_GET_DATA (pack_head, nsfw_shmem_ack); - - for (iindex = 0; iindex < ieltnum; iindex++) - { - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, - pack_data->cstate, - (isegbase + iindex), - (u16) pack_data->usseq, lerr); - phandle_array[isegbase + iindex] = - ADDR_SHTOL (pack_data->pbase_addr); - NSCOMM_LOGDBG ("mbf createv] seg=%d, handle=%p", - pack_data->usseq, hhandle); - pack_data++; - } - - isegbase = icount; - ieltnum = 0; - ptempdata = pdata; - } - else - { - itindex = icount - 1; - if (-1 == - SPRINTF_S (ptempdata->aname, sizeof (ptempdata->aname), "%s_%x", - pmbfname[itindex].stname.aname, pid)) - { - NSCOMM_LOGERR ("SPRINTF_S failed]"); - goto lerr; - } - NSFW_SHMEM_MBUF_DATA_INIT (ptempdata, (u16) itindex, - pmbfname[itindex].usnum, - pmbfname[itindex].uscash_size, - pmbfname[itindex].uspriv_size, - pmbfname[itindex].usdata_room, - pmbfname[itindex].enmptype, - pmbfname[itindex].isocket_id); - ptempdata++; - } - } - while (icount < inum); - - /*release memory */ - iretval = NSFW_MEM_OK; - goto release; - -lerr: - iretval = NSFW_MEM_ERR; -release: - NSFW_SHMEM_MSG_FREE (mbpmsg, prsp_msg); - return iretval; -} - -/* - *create a simpile pool - */ -mring_handle -nsfw_remote_shmem_mpcreate (const char *name, unsigned int n, - unsigned int elt_size, i32 socket_id, - nsfw_mpool_type entype) -{ - /*msg point define */ - nsfw_mgr_msg *pmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - nsfw_shmem_msg_head *pdata_head = NULL; - nsfw_shmem_sppool_req *pdata = NULL; - nsfw_shmem_msg_head *mppack_head = NULL; - nsfw_shmem_ack *mppack_data = NULL; - mring_handle hhandle = NULL; - u8 ucret = TRUE; - i32 iretval = NSFW_MEM_OK; - - pmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_NULL (pmsg, "remote mbf mpcreate pmsg alloc"); - - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, release, "remote mpcreate rspmsg alloc"); - - /*init msg head */ - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, pmsg); - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_SPPOOL_REQ_MSG, - sizeof (nsfw_shmem_sppool_req)); - - /*fill msg data */ - pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_sppool_req); - iretval = STRCPY_S (pdata->aname, sizeof (pdata->aname), name); - if (EOK != iretval) - { - NSCOMM_LOGERR ("mp create copy name fail] ret=%d", iretval); - goto release; - } - - /*fill msg data */ - NSFW_SHMEM_MPOOL_DATA_INIT (pdata, 0, n, elt_size, entype, socket_id); - - ucret = nsfw_mgr_send_req_wait_rsp (pmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("mp create rsp fail] ret=%d", ucret); - goto release; - } - - /*get msg head */ - mppack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (mppack_head, NSFW_SPPOOL_ACK_MSG, - sizeof (nsfw_shmem_ack), release); - - mppack_data = NSFW_SHMEM_GET_DATA (mppack_head, nsfw_shmem_ack); - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, mppack_data->cstate, 0, - mppack_data->usseq, release); - - hhandle = ADDR_SHTOL (mppack_data->pbase_addr); - NSCOMM_LOGDBG ("mpcreate] name=%s, handle=%p, seg=%d", name, hhandle, - mppack_data->usseq); -release: - NSFW_SHMEM_MSG_FREE (pmsg, prsp_msg); - return hhandle; -} - -/* - *create some simpile pools by send a msg - */ -i32 -nsfw_remote_shmem_mpcreatev (nsfw_mem_sppool * pmpinfo, - mring_handle * pringhandle_array, i32 inum, - pid_t pid) -{ - /*msg point define */ - nsfw_mgr_msg *pmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - - /*msg head define */ - nsfw_shmem_msg_head *pdata_head = NULL; - - /*msg data define */ - nsfw_shmem_sppool_req *pdata = NULL; - nsfw_shmem_sppool_req *ptempdata = NULL; - - /*ack msg define */ - nsfw_shmem_msg_head *pack_head = NULL; - - nsfw_shmem_ack *pack_data = NULL; - mring_handle hhandle = NULL; - u8 ucret = TRUE; - i32 iretval = NSFW_MEM_OK; - i32 icount = 0; - i32 itindex = 0; - i32 iindex = 0; - i32 isegbase = 0; - i32 ieltnum = 0; - /*the max members that a msg can take */ - i32 ieltnum_max = - (NSFW_MGR_MSG_BODY_LEN - - sizeof (nsfw_shmem_msg_head)) / sizeof (nsfw_shmem_sppool_req); - - /*alloc a msg */ - //pmsg = nsfw_mgr_msg_alloc(MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MASTER); - pmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_GOTO (pmsg, mperr, "remote mpcreatev pmsg alloc"); - - /*alloc rsp msg */ - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, mperr, "remote mpcreatev rspmsg alloc"); - - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, pmsg); - - ptempdata = pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_sppool_req); - - do - { - icount++; - ieltnum++; - - /*if the element num reach the bigest, or already send all, just deal */ - if (((icount % ieltnum_max) == 0) || (icount >= inum)) - { - /*init msg header */ - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_SPPOOL_REQ_MSG, - ieltnum * sizeof (nsfw_shmem_sppool_req)); - - /*fill the msg data */ - itindex = icount - 1; - - int retVal = - SPRINTF_S (ptempdata->aname, sizeof (ptempdata->aname), "%s_%x", - pmpinfo[itindex].stname.aname, pid); - if (-1 == retVal) - { - NSCOMM_LOGERR ("SPRINTF_S fail]ret=%d", retVal); - goto mperr; - } - NSFW_SHMEM_MPOOL_DATA_INIT (ptempdata, itindex, - pmpinfo[itindex].usnum, - pmpinfo[itindex].useltsize, - pmpinfo[itindex].enmptype, - pmpinfo[itindex].isocket_id); - - ucret = nsfw_mgr_send_req_wait_rsp (pmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("mpcreatev create fail] ret=%u", ucret); - goto mperr; - } - - /*interrupt mgs head */ - pack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (pack_head, NSFW_SPPOOL_ACK_MSG, - ieltnum * sizeof (nsfw_shmem_ack), - mperr); - - pack_data = NSFW_SHMEM_GET_DATA (pack_head, nsfw_shmem_ack); - - for (iindex = 0; iindex < ieltnum; iindex++) - { - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, - pack_data->cstate, - (isegbase + iindex), - (u16) pack_data->usseq, mperr); - pringhandle_array[isegbase + iindex] = - ADDR_SHTOL (pack_data->pbase_addr); - NSCOMM_LOGDBG ("mpcreatev] seg=%u, handle=%p", pack_data->usseq, - hhandle); - pack_data++; - } - - isegbase = icount; - ieltnum = 0; - ptempdata = pdata; - } - else - { - itindex = icount - 1; - int retVal = - SPRINTF_S (ptempdata->aname, sizeof (ptempdata->aname), "%s_%x", - pmpinfo[itindex].stname.aname, pid); - if (-1 == retVal) - { - NSCOMM_LOGERR ("SPRINTF_S fail]ret=%d", retVal); - goto mperr; - } - NSFW_SHMEM_MPOOL_DATA_INIT (ptempdata, itindex, - pmpinfo[itindex].usnum, - pmpinfo[itindex].useltsize, - pmpinfo[itindex].enmptype, - pmpinfo[itindex].isocket_id); - - ptempdata++; - } - } - while (icount < inum); - - /*release the memory */ - iretval = NSFW_MEM_OK; - goto release; - -mperr: - iretval = NSFW_MEM_ERR; -release: - NSFW_SHMEM_MSG_FREE (pmsg, prsp_msg); - return iretval; -} - -/* - *create a ring - */ -mring_handle -nsfw_remote_shmem_ringcreate (const char *name, unsigned int n, i32 socket_id, - nsfw_mpool_type entype) -{ - /*msg point define */ - nsfw_mgr_msg *pmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - - /*msg head define */ - nsfw_shmem_msg_head *pdata_head = NULL; - - /*msg data define */ - nsfw_shmem_ring_req *pdata = NULL; - /*ack msg define */ - nsfw_shmem_msg_head *pack_head = NULL; - nsfw_shmem_ack *ppack_data = NULL; - mring_handle hhandle = NULL; - u8 ucret = TRUE; - i32 iretval = NSFW_MEM_OK; - - //pmsg = nsfw_mgr_msg_alloc(MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MASTER); - pmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_NULL (pmsg, "remote ringcreate pmsg alloc"); - - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, release, - "remote ringcreate rspmsg alloc"); - - /*fill msg head */ - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, pmsg); - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_RING_REQ_MSG, - sizeof (nsfw_shmem_ring_req)); - - /*fill msg data */ - pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_ring_req); - iretval = STRCPY_S (pdata->aname, sizeof (pdata->aname), name); - if (EOK != iretval) - { - NSCOMM_LOGERR ("ring create cpy name fail] ret=%d", iretval); - goto release; - } - - /*fill msg data */ - NSFW_SHMEM_MRING_DATA_INIT (pdata, 0, n, entype, socket_id); - - ucret = nsfw_mgr_send_req_wait_rsp (pmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("ring create rsp fail] ret=%d", ucret); - goto release; - } - - /*interrupt mgs head */ - pack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (pack_head, NSFW_RING_ACK_MSG, - sizeof (nsfw_shmem_ack), release); - - ppack_data = NSFW_SHMEM_GET_DATA (pack_head, nsfw_shmem_ack); - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, ppack_data->cstate, 0, - ppack_data->usseq, release); - - hhandle = ADDR_SHTOL (ppack_data->pbase_addr); - NSCOMM_LOGDBG ("ring create] name=%s, handle=%p, seg=%u", name, hhandle, - ppack_data->usseq); -release: - NSFW_SHMEM_MSG_FREE (pmsg, prsp_msg); - return hhandle; -} - -/* - *create a mem pool that the members are rings by send a msg - *ieltnum:the num of ring member - *iringnum:the num of ring in simple mem pool - *entype:the default the of ring - */ -i32 -nsfw_remote_shmem_ringcreatev (const char *name, i32 ieltnum, - mring_handle * pringhandle_array, i32 iringnum, - i32 socket_id, nsfw_mpool_type entype) -{ - unsigned int useltsize = 0; - mring_handle nhandle = NULL; - i32 icount = 0; - i32 n = 0; - uint64_t baseaddr = 0; - uint64_t endaddr = 0; - /*the num of ring member must be power of 2 */ - unsigned int usnum = common_mem_align32pow2 (ieltnum + 1); - - useltsize = - sizeof (struct nsfw_mem_ring) + usnum * sizeof (union RingData_U); - nhandle = - nsfw_remote_shmem_mpcreate (name, iringnum, useltsize, socket_id, - NSFW_MRING_SPSC); - NSFW_POINT_CHK_RET_ERR (nhandle, "remote ringcreatev msg alloc"); - - n = - nsfw_shmem_ring_sc_dequeuev (nhandle, (void **) pringhandle_array, - iringnum); - - if (n != iringnum) - { - NSCOMM_LOGERR ("ring dequeue fail] ringnum=%d, retnum=%d", iringnum, n); - return NSFW_MEM_ERR; - } - - nsfw_shmem_ring_baseaddr_query (&baseaddr, &endaddr); - - for (icount = 0; icount < iringnum; icount++) - { - nsfw_mem_ring_init (pringhandle_array[icount], usnum, (void *) baseaddr, - NSFW_SHMEM, entype); - } - - return NSFW_MEM_OK; -} - -/* - *look up a msg by send a msg - */ -void * -nsfw_remote_shmem_lookup (const i8 * name, nsfw_mem_struct_type entype) -{ - /*msg point define */ - nsfw_mgr_msg *pmsg = NULL; - nsfw_mgr_msg *prsp_msg = NULL; - void *addr = NULL; - /*msg head data define */ - nsfw_shmem_msg_head *pdata_head = NULL; - - /*msg data define */ - nsfw_shmem_lookup_req *pdata = NULL; - - /*ack msg define */ - nsfw_shmem_msg_head *pack_head = NULL; - nsfw_shmem_ack *lpack_data = NULL; - u8 ucret = TRUE; - - pmsg = nsfw_mgr_msg_alloc (MGR_MSG_MEM_ALLOC_REQ, NSFW_PROC_MAIN); - NSFW_POINT_CHK_RET_NULL (pmsg, "remote lookup pmsg alloc"); - - prsp_msg = nsfw_mgr_null_rspmsg_alloc (); - NSFW_POINT_CHK_RET_GOTO (prsp_msg, perr, "remote lookup rspmsg alloc"); - - /*msg head init */ - pdata_head = GET_USER_MSG (nsfw_shmem_msg_head, pmsg); - NSFW_SHMEM_MSG_HEAD_INIT (pdata_head, NSFW_MEM_LOOKUP_REQ_MSG, - sizeof (nsfw_shmem_lookup_req)); - - pdata = NSFW_SHMEM_GET_DATA (pdata_head, nsfw_shmem_lookup_req); - if (EOK != STRCPY_S (pdata->aname, sizeof (pdata->aname), name)) - { - NSCOMM_LOGERR ("STRCPY_S failed]name=%s", name); - } - pdata->usseq = 0; - pdata->ustype = entype; - pdata->ireserv = 0; - - ucret = nsfw_mgr_send_req_wait_rsp (pmsg, prsp_msg); - - if (FALSE == ucret) - { - NSCOMM_LOGERR ("mem lookup fail] ret=%u", ucret); - goto release; - } - - /*interrupt mgs head */ - pack_head = GET_USER_MSG (nsfw_shmem_msg_head, prsp_msg); - NSFW_SHMEM_MSGHEAD_CHK_GOTO (pack_head, NSFW_MEM_LOOKUP_ACK_MSG, - sizeof (nsfw_shmem_ack), perr); - - lpack_data = NSFW_SHMEM_GET_DATA (pack_head, nsfw_shmem_ack); - NSFW_SHMEM_ACKSTATE_CHK_GOTO (NSFW_MEM_ALLOC_SUCC, lpack_data->cstate, 0, - lpack_data->usseq, perr); - - addr = ADDR_SHTOL (lpack_data->pbase_addr); - NSCOMM_LOGDBG ("shmem lookup] name=%s, handle=%p, seg=%u", name, addr, - lpack_data->usseq); - goto release; -perr: - addr = NULL; - -release: - NSFW_SHMEM_MSG_FREE (pmsg, prsp_msg); - return addr; -} |