static ssize_t psmx2_writev(struct fid_ep *ep, const struct iovec *iov, void **desc, size_t count, fi_addr_t dest_addr, uint64_t addr, uint64_t key, void *context) { struct psmx2_fid_ep *ep_priv; ep_priv = container_of(ep, struct psmx2_fid_ep, ep); if (!iov || !count) return -FI_EINVAL; if (count > 1) return psmx2_writev_generic(ep, iov, desc, count, dest_addr, addr, key, context, ep_priv->tx_flags, 0); return psmx2_write_generic(ep, iov->iov_base, iov->iov_len, desc ? desc[0] : NULL, dest_addr, addr, key, context, ep_priv->tx_flags, 0); }
static ssize_t psmx2_writemsg(struct fid_ep *ep, const struct fi_msg_rma *msg, uint64_t flags) { if (!msg || !msg->msg_iov || !msg->iov_count || !msg->rma_iov || msg->rma_iov_count != 1) return -FI_EINVAL; if (msg->iov_count > 1) return psmx2_writev_generic(ep, msg->msg_iov, msg->desc, msg->iov_count, msg->addr, msg->rma_iov[0].addr, msg->rma_iov[0].key, msg->context, flags, msg->data); return psmx2_write_generic(ep, msg->msg_iov[0].iov_base, msg->msg_iov[0].iov_len, msg->desc ? msg->desc[0] : NULL, msg->addr, msg->rma_iov[0].addr, msg->rma_iov[0].key, msg->context, flags, msg->data); }
int psmx2_process_trigger(struct psmx2_fid_domain *domain, struct psmx2_trigger *trigger) { switch (trigger->op) { case PSMX2_TRIGGERED_SEND: psmx2_send_generic(trigger->send.ep, trigger->send.buf, trigger->send.len, trigger->send.desc, trigger->send.dest_addr, trigger->send.context, trigger->send.flags, trigger->send.data); break; case PSMX2_TRIGGERED_SENDV: psmx2_sendv_generic(trigger->sendv.ep, trigger->sendv.iov, trigger->sendv.desc, trigger->sendv.count, trigger->sendv.dest_addr, trigger->sendv.context, trigger->sendv.flags, trigger->sendv.data); break; case PSMX2_TRIGGERED_RECV: psmx2_recv_generic(trigger->recv.ep, trigger->recv.buf, trigger->recv.len, trigger->recv.desc, trigger->recv.src_addr, trigger->recv.context, trigger->recv.flags); break; case PSMX2_TRIGGERED_TSEND: psmx2_tagged_send_generic(trigger->tsend.ep, trigger->tsend.buf, trigger->tsend.len, trigger->tsend.desc, trigger->tsend.dest_addr, trigger->tsend.tag, trigger->tsend.context, trigger->tsend.flags, trigger->tsend.data); break; case PSMX2_TRIGGERED_TSENDV: psmx2_tagged_sendv_generic(trigger->tsendv.ep, trigger->tsendv.iov, trigger->tsendv.desc, trigger->tsendv.count, trigger->tsendv.dest_addr, trigger->tsendv.tag, trigger->tsendv.context, trigger->tsendv.flags, trigger->tsendv.data); break; case PSMX2_TRIGGERED_TRECV: psmx2_tagged_recv_generic(trigger->trecv.ep, trigger->trecv.buf, trigger->trecv.len, trigger->trecv.desc, trigger->trecv.src_addr, trigger->trecv.tag, trigger->trecv.ignore, trigger->trecv.context, trigger->trecv.flags); break; case PSMX2_TRIGGERED_WRITE: psmx2_write_generic(trigger->write.ep, trigger->write.buf, trigger->write.len, trigger->write.desc, trigger->write.dest_addr, trigger->write.addr, trigger->write.key, trigger->write.context, trigger->write.flags, trigger->write.data); break; case PSMX2_TRIGGERED_WRITEV: psmx2_writev_generic(trigger->writev.ep, trigger->writev.iov, trigger->writev.desc, trigger->writev.count, trigger->writev.dest_addr, trigger->writev.addr, trigger->writev.key, trigger->writev.context, trigger->writev.flags, trigger->writev.data); break; case PSMX2_TRIGGERED_READ: psmx2_read_generic(trigger->read.ep, trigger->read.buf, trigger->read.len, trigger->read.desc, trigger->read.src_addr, trigger->read.addr, trigger->read.key, trigger->read.context, trigger->read.flags); break; case PSMX2_TRIGGERED_READV: psmx2_readv_generic(trigger->readv.ep, trigger->readv.iov, trigger->readv.desc, trigger->readv.count, trigger->readv.src_addr, trigger->readv.addr, trigger->readv.key, trigger->readv.context, trigger->readv.flags); break; case PSMX2_TRIGGERED_ATOMIC_WRITE: psmx2_atomic_write_generic( trigger->atomic_write.ep, trigger->atomic_write.buf, trigger->atomic_write.count, trigger->atomic_write.desc, trigger->atomic_write.dest_addr, trigger->atomic_write.addr, trigger->atomic_write.key, trigger->atomic_write.datatype, trigger->atomic_write.atomic_op, trigger->atomic_write.context, trigger->atomic_write.flags); break; case PSMX2_TRIGGERED_ATOMIC_READWRITE: psmx2_atomic_readwrite_generic( trigger->atomic_readwrite.ep, trigger->atomic_readwrite.buf, trigger->atomic_readwrite.count, trigger->atomic_readwrite.desc, trigger->atomic_readwrite.result, trigger->atomic_readwrite.result_desc, trigger->atomic_readwrite.dest_addr, trigger->atomic_readwrite.addr, trigger->atomic_readwrite.key, trigger->atomic_readwrite.datatype, trigger->atomic_readwrite.atomic_op, trigger->atomic_readwrite.context, trigger->atomic_readwrite.flags); break; case PSMX2_TRIGGERED_ATOMIC_COMPWRITE: psmx2_atomic_compwrite_generic( trigger->atomic_compwrite.ep, trigger->atomic_compwrite.buf, trigger->atomic_compwrite.count, trigger->atomic_compwrite.desc, trigger->atomic_compwrite.compare, trigger->atomic_compwrite.compare_desc, trigger->atomic_compwrite.result, trigger->atomic_compwrite.result_desc, trigger->atomic_compwrite.dest_addr, trigger->atomic_compwrite.addr, trigger->atomic_compwrite.key, trigger->atomic_compwrite.datatype, trigger->atomic_compwrite.atomic_op, trigger->atomic_compwrite.context, trigger->atomic_compwrite.flags); break; default: FI_INFO(&psmx2_prov, FI_LOG_CQ, "%d unsupported op\n", trigger->op); break; } free(trigger); return 0; }