EC_BOOL cextsrv_req_encode(CEXTSRV *cextsrv, UINT8 *out_buff, const UINT32 out_buff_max_len, UINT32 *out_buff_len, TASK_FUNC *task_req_func) { FUNC_ADDR_NODE *func_addr_node; UINT32 send_comm; UINT32 position; send_comm = CMPI_ANY_COMM; position = 0; if(0 != dbg_fetch_func_addr_node_by_index(task_req_func->func_id, &func_addr_node)) { dbg_log(SEC_0069_CEXTSRV, 0)(LOGSTDOUT, "error:cextsrv_req_encode: failed to fetch func addr node by func id %lx\n", task_req_func->func_id); return (EC_FALSE); } cmpi_encode_uint32(send_comm, (task_req_func->func_id), out_buff, out_buff_max_len, &(position)); cmpi_encode_uint32(send_comm, (task_req_func->func_para_num), out_buff, out_buff_max_len, &(position)); task_req_func_para_encode(send_comm, task_req_func->func_para_num, (FUNC_PARA *)task_req_func->func_para, func_addr_node, out_buff, out_buff_max_len, &(position)); (*out_buff_len) = position;/*set to real length*/ return (EC_TRUE); }
EC_BOOL cproc_isend(CPROC *cproc, const UINT32 recv_rank, const UINT32 msg_tag, TASK_NODE *task_node) { CPROC_ITEM *cproc_item; UINT32 msg_len; UINT32 pos; /*check validity*/ if(recv_rank >= CPROC_SIZE(cproc)) { sys_log(LOGSTDOUT, "error:cproc_isend: invalid recv rank %ld where communicator size is %ld\n", recv_rank, CPROC_SIZE(cproc)); return (EC_FALSE); } cproc_item = CPROC_ITEM(cproc, CMPI_LOCAL_RANK, recv_rank); #if 0 sys_log(LOGSTDOUT, "[DEBUG] cproc_isend: to send task_node %lx (pos %ld, len %ld) on cproc_item %lx (row %ld, col %ld) while send_rank = %ld, recv_rank = %ld\n", task_node, TASK_NODE_BUFF_POS(task_node), TASK_NODE_BUFF_LEN(task_node), cproc_item, CPROC_ITEM_ROW_RANK(cproc_item), CPROC_ITEM_COL_RANK(cproc_item), CMPI_LOCAL_RANK, recv_rank); #endif msg_len = TASK_NODE_BUFF_LEN(task_node); pos = 0; cmpi_encode_uint32(CMPI_LOCAL_COMM, msg_len, TASK_NODE_BUFF(task_node), TASK_NODE_BUFF_LEN(task_node), &pos); cmpi_encode_uint32(CMPI_LOCAL_COMM, msg_tag, TASK_NODE_BUFF(task_node), TASK_NODE_BUFF_LEN(task_node), &pos); cproc_isend_node(cproc, cproc_item, task_node); return (EC_TRUE); }