aboutsummaryrefslogtreecommitdiffstats
path: root/src/framework/common/mem_mgr/nsfw_shmem/nsfw_rshmem_mng.c
diff options
context:
space:
mode:
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.c987
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;
-}