rpma_cq_get_completion - receive a completion of an operation
#include <librpma.h>
struct rpma_cq;
struct rpma_completion;
enum rpma_op {
RPMA_OP_READ,
RPMA_OP_WRITE,
RPMA_OP_FLUSH,
RPMA_OP_SEND,
RPMA_OP_RECV,
RPMA_OP_RECV_RDMA_WITH_IMM,
};
int rpma_cq_get_completion(struct rpma_cq *cq,
struct rpma_completion *cmpl);
rpma_cq_get_completion() receives the next available completion of an already posted operation. All operations generate completion on error. The operations posted with the RPMA_F_COMPLETION_ALWAYS flag also generate a completion on success. The following operations are available:
RPMA_OP_READ - RMA read operation
RPMA_OP_WRITE - RMA write operation
RPMA_OP_FLUSH - RMA flush operation
RPMA_OP_SEND - messaging send operation
RPMA_OP_RECV - messaging receive operation
RPMA_OP_RECV_RDMA_WITH_IMM - messaging receive operation for RMA write operation with immediate data
Note that if the provided cq is the main CQ and the receive CQ is present on the same connection this function won't return RPMA_OP_RECV and RPMA_OP_RECV_RDMA_WITH_IMM at any time. The receive CQ has to be used instead to collect these completions. Please see the rpma_conn_get_rcq(3) for details about the receive CQ.
The rpma_cq_get_completion() function returns 0 on success or a negative error code on failure. On success, it writes the first available completion to cmpl. If op_status of the written cmpl is not equal to IBV_WC_SUCCESS then only op_context of the returned cmpl is valid.
rpma_cq_get_completion() can fail with the following errors:
RPMA_E_INVAL - cq or cmpl is NULL
RPMA_E_NO_COMPLETION - no completions available
RPMA_E_PROVIDER - ibv_poll_cq(3) failed with a provider error
RPMA_E_UNKNOWN - ibv_poll_cq(3) failed but no provider error is available
RPMA_E_NOSUPP - not supported opcode
rpma_conn_get_cq(3), rpma_conn_get_rcq(3), rpma_cq_wait(3), rpma_cq_get_fd(3), rpma_flush(3), rpma_read(3), rpma_recv(3), rpma_send(3), rpma_send_with_imm(3), rpma_write(3), rpma_write_with_imm(3), rpma_write_atomic(3), librpma(7) and https://pmem.io/rpma/