本文整理汇总了C++中psmx_errno函数的典型用法代码示例。如果您正苦于以下问题:C++ psmx_errno函数的具体用法?C++ psmx_errno怎么用?C++ psmx_errno使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了psmx_errno函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: psmx_tagged_send_no_flag_av_map
ssize_t psmx_tagged_send_no_flag_av_map(struct fid_ep *ep, const void *buf,
size_t len, void *desc,
fi_addr_t dest_addr, uint64_t tag,
void *context)
{
struct psmx_fid_ep *ep_priv;
psm_epaddr_t psm_epaddr;
psm_mq_req_t psm_req;
uint64_t psm_tag;
struct fi_context *fi_context;
int err;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
psm_epaddr = (psm_epaddr_t) dest_addr;
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
fi_context = context;
PSMX_CTXT_TYPE(fi_context) = PSMX_TSEND_CONTEXT;
PSMX_CTXT_USER(fi_context) = (void *)buf;
PSMX_CTXT_EP(fi_context) = ep_priv;
err = psm_mq_isend(ep_priv->domain->psm_mq, psm_epaddr, 0,
psm_tag, buf, len, (void*)fi_context, &psm_req);
if (err != PSM_OK)
return psmx_errno(err);
PSMX_CTXT_REQ(fi_context) = psm_req;
return 0;
}
示例2: psmx_tagged_recv_no_event_av_table
ssize_t psmx_tagged_recv_no_event_av_table(struct fid_ep *ep, void *buf,
size_t len, void *desc,
fi_addr_t src_addr,
uint64_t tag, uint64_t ignore,
void *context)
{
struct psmx_fid_ep *ep_priv;
psm_mq_req_t psm_req;
uint64_t psm_tag, psm_tagsel;
struct fi_context *fi_context;
int err;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
psm_tagsel = (~ignore) | ep_priv->domain->reserved_tag_bits;
fi_context = &ep_priv->nocomp_recv_context;
err = psm_mq_irecv(ep_priv->domain->psm_mq,
psm_tag, psm_tagsel, 0, /* flags */
buf, len, (void *)fi_context, &psm_req);
return psmx_errno(err);
}
示例3: psmx_av_remove
static int psmx_av_remove(struct fid_av *av, fi_addr_t *fi_addr, size_t count,
uint64_t flags)
{
int err = PSM_OK;
return psmx_errno(err);
}
示例4: psmx_tagged_recv_no_flag_av_table
ssize_t psmx_tagged_recv_no_flag_av_table(struct fid_ep *ep, void *buf,
size_t len, void *desc,
fi_addr_t src_addr,
uint64_t tag, uint64_t ignore,
void *context)
{
struct psmx_fid_ep *ep_priv;
psm_mq_req_t psm_req;
uint64_t psm_tag, psm_tagsel;
struct fi_context *fi_context;
int err;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
psm_tagsel = (~ignore) | ep_priv->domain->reserved_tag_bits;
fi_context = context;
PSMX_CTXT_TYPE(fi_context) = PSMX_TRECV_CONTEXT;
PSMX_CTXT_USER(fi_context) = buf;
PSMX_CTXT_EP(fi_context) = ep_priv;
err = psm_mq_irecv(ep_priv->domain->psm_mq,
psm_tag, psm_tagsel, 0, /* flags */
buf, len, (void *)fi_context, &psm_req);
if (err != PSM_OK)
return psmx_errno(err);
PSMX_CTXT_REQ(fi_context) = psm_req;
return 0;
}
示例5: psmx_tagged_inject_no_flag_av_table
ssize_t psmx_tagged_inject_no_flag_av_table(struct fid_ep *ep, const void *buf, size_t len,
fi_addr_t dest_addr, uint64_t tag)
{
struct psmx_fid_ep *ep_priv;
struct psmx_fid_av *av;
psm_epaddr_t psm_epaddr;
uint64_t psm_tag;
int err;
size_t idx;
if (len > PSMX_INJECT_SIZE)
return -FI_EMSGSIZE;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
av = ep_priv->av;
idx = (size_t)dest_addr;
if (idx >= av->last)
return -FI_EINVAL;
psm_epaddr = av->psm_epaddrs[idx];
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
err = psm_mq_send(ep_priv->domain->psm_mq, psm_epaddr, 0, psm_tag, buf, len);
if (err != PSM_OK)
return psmx_errno(err);
if (ep_priv->send_cntr)
psmx_cntr_inc(ep_priv->send_cntr);
return 0;
}
示例6: psmx_epid_to_epaddr
int psmx_epid_to_epaddr(struct psmx_fid_domain *domain,
psm_epid_t epid, psm_epaddr_t *epaddr)
{
int err;
psm_error_t errors;
psm_epconn_t epconn;
struct psmx_epaddr_context *context;
err = psm_ep_epid_lookup(epid, &epconn);
if (err == PSM_OK) {
context = psm_epaddr_getctxt(epconn.addr);
if (context && context->epid == epid) {
*epaddr = epconn.addr;
return 0;
}
}
err = psm_ep_connect(domain->psm_ep, 1, &epid, NULL, &errors, epaddr, 30*1e9);
if (err != PSM_OK)
return psmx_errno(err);
psmx_set_epaddr_context(domain,epid,*epaddr);
return 0;
}
示例7: psmx_tagged_send_no_event_av_map
ssize_t psmx_tagged_send_no_event_av_map(struct fid_ep *ep, const void *buf,
size_t len, void *desc,
fi_addr_t dest_addr, uint64_t tag,
void *context)
{
struct psmx_fid_ep *ep_priv;
psm_epaddr_t psm_epaddr;
psm_mq_req_t psm_req;
uint64_t psm_tag;
struct fi_context *fi_context;
int err;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
psm_epaddr = (psm_epaddr_t) dest_addr;
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
fi_context = &ep_priv->nocomp_send_context;
err = psm_mq_isend(ep_priv->domain->psm_mq, psm_epaddr, 0,
psm_tag, buf, len, (void*)fi_context, &psm_req);
if (err != PSM_OK)
return psmx_errno(err);
return 0;
}
示例8: psmx_tagged_send_no_event_av_table
ssize_t psmx_tagged_send_no_event_av_table(struct fid_ep *ep, const void *buf,
size_t len, void *desc,
fi_addr_t dest_addr, uint64_t tag,
void *context)
{
struct psmx_fid_ep *ep_priv;
struct psmx_fid_av *av;
psm_epaddr_t psm_epaddr;
psm_mq_req_t psm_req;
uint64_t psm_tag;
struct fi_context *fi_context;
int err;
size_t idx;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
av = ep_priv->av;
idx = (size_t)dest_addr;
if (idx >= av->last)
return -FI_EINVAL;
psm_epaddr = av->psm_epaddrs[idx];
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
fi_context = &ep_priv->nocomp_send_context;
err = psm_mq_isend(ep_priv->domain->psm_mq, psm_epaddr, 0,
psm_tag, buf, len, (void*)fi_context, &psm_req);
if (err != PSM_OK)
return psmx_errno(err);
return 0;
}
示例9: psmx_tagged_recv_no_flag_av_table
ssize_t psmx_tagged_recv_no_flag_av_table(struct fid_ep *ep, void *buf,
size_t len, void *desc,
fi_addr_t src_addr,
uint64_t tag, uint64_t ignore,
void *context)
{
struct psmx_fid_ep *ep_priv;
psm_mq_req_t psm_req;
uint64_t psm_tag, psm_tagsel;
#if (PSM_VERNO_MAJOR >= 2)
psm_mq_tag_t psm_tag2, psm_tagsel2;
struct psmx_fid_av *av;
psm_epaddr_t psm_epaddr;
size_t idx;
#endif
struct fi_context *fi_context;
int err;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
psm_tagsel = (~ignore) | ep_priv->domain->reserved_tag_bits;
fi_context = context;
PSMX_CTXT_TYPE(fi_context) = PSMX_TRECV_CONTEXT;
PSMX_CTXT_USER(fi_context) = buf;
PSMX_CTXT_EP(fi_context) = ep_priv;
#if (PSM_VERNO_MAJOR >= 2)
if ((ep_priv->caps & FI_DIRECTED_RECV) && src_addr != FI_ADDR_UNSPEC) {
av = ep_priv->av;
idx = (size_t)src_addr;
if (idx >= av->last)
return -FI_EINVAL;
psm_epaddr = av->psm_epaddrs[idx];
}
else {
psm_epaddr = NULL;
}
PSMX_SET_TAG(psm_tag2, psm_tag, 0);
PSMX_SET_TAG(psm_tagsel2, psm_tagsel, 0);
err = psm_mq_irecv2(ep_priv->domain->psm_mq,
psm_epaddr,
&psm_tag2, &psm_tagsel2, 0, /* flags */
buf, len, (void *)fi_context, &psm_req);
#else
err = psm_mq_irecv(ep_priv->domain->psm_mq,
psm_tag, psm_tagsel, 0, /* flags */
buf, len, (void *)fi_context, &psm_req);
#endif
if (err != PSM_OK)
return psmx_errno(err);
PSMX_CTXT_REQ(fi_context) = psm_req;
return 0;
}
示例10: psmx_am_process_send
int psmx_am_process_send(struct psmx_fid_domain *domain, struct psmx_am_request *req)
{
psm_amarg_t args[8];
int am_flags = PSM_AM_FLAG_ASYNC;
int chunk_size;
size_t len;
uint64_t offset;
int err;
offset = req->send.len_sent;
len = req->send.len - offset;
chunk_size = MIN(PSMX_AM_CHUNK_SIZE, psmx_am_param.max_request_short);
while (len > chunk_size) {
args[0].u32w0 = PSMX_AM_REQ_SEND;
args[0].u32w1 = chunk_size;
args[1].u64 = (uint64_t)(uintptr_t)req;
args[2].u64 = (uint64_t)(uintptr_t)req->send.peer_context;
args[3].u64 = offset;
err = psm_am_request_short((psm_epaddr_t) req->send.dest_addr,
PSMX_AM_MSG_HANDLER, args, 4,
req->send.buf+offset, chunk_size,
am_flags, NULL, NULL);
if (err)
return psmx_errno(err);
len -= chunk_size;
offset += chunk_size;
}
args[0].u32w0 = PSMX_AM_REQ_SEND | PSMX_AM_EOM;
args[0].u32w1 = len;
args[1].u64 = (uint64_t)(uintptr_t)req;
args[2].u64 = (uint64_t)(uintptr_t)req->send.peer_context;
args[3].u64 = offset;
req->send.len_sent = offset + len;
err = psm_am_request_short((psm_epaddr_t) req->send.dest_addr,
PSMX_AM_MSG_HANDLER, args, 4,
(void *)req->send.buf+offset, len,
am_flags, NULL, NULL);
return psmx_errno(err);
}
示例11: _psmx_tagged_peek
ssize_t _psmx_tagged_peek(struct fid_ep *ep, void *buf, size_t len,
void *desc, fi_addr_t src_addr,
uint64_t tag, uint64_t ignore,
void *context, uint64_t flags)
{
struct psmx_fid_ep *ep_priv;
psm_mq_status_t psm_status;
uint64_t psm_tag, psm_tagsel;
struct psmx_cq_event *event;
int err;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
if (tag & ep_priv->domain->reserved_tag_bits) {
FI_WARN(&psmx_prov, FI_LOG_EP_DATA,
"using reserved tag bits."
"tag=%lx. reserved_bits=%lx.\n", tag,
ep_priv->domain->reserved_tag_bits);
}
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
psm_tagsel = (~ignore) | ep_priv->domain->reserved_tag_bits;
if (flags & (FI_CLAIM | FI_DISCARD))
return -FI_EOPNOTSUPP;
err = psm_mq_iprobe(ep_priv->domain->psm_mq, psm_tag, psm_tagsel,
&psm_status);
switch (err) {
case PSM_OK:
if (ep_priv->recv_cq) {
event = psmx_cq_create_event(
ep_priv->recv_cq,
context, /* op_context */
NULL, /* buf */
flags|FI_RECV|FI_TAGGED,/* flags */
psm_status.msg_length, /* len */
0, /* data */
psm_status.msg_tag, /* tag */
psm_status.msg_length, /* olen */
0); /* err */
if (event)
psmx_cq_enqueue_event(ep_priv->recv_cq, event);
else
return -FI_ENOMEM;
/* TODO: set message source to FI_ADDR_NOTAVAIL? */
}
return 0;
case PSM_MQ_NO_COMPLETIONS:
return -FI_ENOMSG;
default:
return psmx_errno(err);
}
}
示例12: psmx_av_remove
static int psmx_av_remove(struct fid_av *av, fi_addr_t *fi_addr, size_t count,
uint64_t flags)
{
struct psmx_fid_av *fid_av;
int err = PSM_OK;
fid_av = container_of(av, struct psmx_fid_av, av);
return psmx_errno(err);
}
示例13: psmx_ep_cancel
static ssize_t psmx_ep_cancel(fid_t fid, void *context)
{
struct psmx_fid_ep *ep;
psm_mq_status_t status;
struct fi_context *fi_context = context;
uint64_t flags;
struct psmx_cq_event *event;
int err;
ep = container_of(fid, struct psmx_fid_ep, ep.fid);
if (!ep->domain)
return -FI_EBADF;
if (!fi_context)
return -FI_EINVAL;
switch (PSMX_CTXT_TYPE(fi_context)) {
case PSMX_TRECV_CONTEXT:
flags = FI_RECV | FI_TAGGED;
break;
case PSMX_RECV_CONTEXT:
case PSMX_MULTI_RECV_CONTEXT:
flags = FI_RECV | FI_MSG;
break;
default:
return -FI_EOPNOTSUPP;
}
err = psm_mq_cancel((psm_mq_req_t *)&PSMX_CTXT_REQ(fi_context));
if (err == PSM_OK) {
err = psm_mq_test((psm_mq_req_t *)&PSMX_CTXT_REQ(fi_context), &status);
if (err == PSM_OK && ep->recv_cq) {
event = psmx_cq_create_event(
ep->recv_cq,
status.context,
NULL, /* buf */
flags,
0, /* len */
0, /* data */
0, /* tag */
0 /* olen */,
-FI_ECANCELED);
if (event)
psmx_cq_enqueue_event(ep->recv_cq, event);
else
return -FI_ENOMEM;
}
}
return psmx_errno(err);
}
示例14: psmx_tagged_send_no_flag_av_table
ssize_t psmx_tagged_send_no_flag_av_table(struct fid_ep *ep, const void *buf,
size_t len, void *desc,
fi_addr_t dest_addr, uint64_t tag,
void *context)
{
struct psmx_fid_ep *ep_priv;
struct psmx_fid_av *av;
psm_epaddr_t psm_epaddr;
psm_mq_req_t psm_req;
uint64_t psm_tag;
#if (PSM_VERNO_MAJOR >= 2)
psm_mq_tag_t psm_tag2;
#endif
struct fi_context *fi_context;
int err;
size_t idx;
ep_priv = container_of(ep, struct psmx_fid_ep, ep);
av = ep_priv->av;
idx = (size_t)dest_addr;
if (idx >= av->last)
return -FI_EINVAL;
psm_epaddr = av->psm_epaddrs[idx];
psm_tag = tag & (~ep_priv->domain->reserved_tag_bits);
#if (PSM_VERNO_MAJOR >= 2)
PSMX_SET_TAG(psm_tag2, psm_tag, 0);
#endif
fi_context = context;
PSMX_CTXT_TYPE(fi_context) = PSMX_TSEND_CONTEXT;
PSMX_CTXT_USER(fi_context) = (void *)buf;
PSMX_CTXT_EP(fi_context) = ep_priv;
#if (PSM_VERNO_MAJOR >= 2)
err = psm_mq_isend2(ep_priv->domain->psm_mq, psm_epaddr, 0,
&psm_tag2, buf, len, (void*)fi_context, &psm_req);
#else
err = psm_mq_isend(ep_priv->domain->psm_mq, psm_epaddr, 0,
psm_tag, buf, len, (void*)fi_context, &psm_req);
#endif
if (err != PSM_OK)
return psmx_errno(err);
PSMX_CTXT_REQ(fi_context) = psm_req;
return 0;
}
示例15: psmx_am_process_rma
int psmx_am_process_rma(struct psmx_fid_domain *domain, struct psmx_am_request *req)
{
int err;
psm_mq_req_t psm_req;
if ((req->op & PSMX_AM_OP_MASK) == PSMX_AM_REQ_WRITE_LONG) {
err = psm_mq_irecv(domain->psm_mq, (uint64_t)req->write.context, -1ULL,
0, (void *)req->write.addr, req->write.len,
(void *)&req->fi_context, &psm_req);
} else {
err = psm_mq_isend(domain->psm_mq, (psm_epaddr_t)req->read.peer_addr,
0, (uint64_t)req->read.context,
(void *)req->read.addr, req->read.len,
(void *)&req->fi_context, &psm_req);
}
return psmx_errno(err);
}