aboutsummaryrefslogtreecommitdiffstats
path: root/man/ibv_get_cq_event.3
diff options
context:
space:
mode:
Diffstat (limited to 'man/ibv_get_cq_event.3')
-rw-r--r--man/ibv_get_cq_event.3185
1 files changed, 0 insertions, 185 deletions
diff --git a/man/ibv_get_cq_event.3 b/man/ibv_get_cq_event.3
deleted file mode 100644
index 70b2572..0000000
--- a/man/ibv_get_cq_event.3
+++ /dev/null
@@ -1,185 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.TH IBV_GET_CQ_EVENT 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
-.SH "NAME"
-ibv_get_cq_event, ibv_ack_cq_events \- get and acknowledge completion queue (CQ) events
-
-.SH "SYNOPSIS"
-.nf
-.B #include <infiniband/verbs.h>
-.sp
-.BI "int ibv_get_cq_event(struct ibv_comp_channel " "*channel" ,
-.BI " struct ibv_cq " "**cq" ", void " "**cq_context" );
-.sp
-.BI "void ibv_ack_cq_events(struct ibv_cq " "*cq" ", unsigned int " "nevents" );
-.fi
-
-.SH "DESCRIPTION"
-.B ibv_get_cq_event()
-waits for the next completion event in the completion event channel
-.I channel\fR.
-Fills the arguments
-.I cq
-with the CQ that got the event and
-.I cq_context
-with the CQ's context\fR.
-.PP
-.B ibv_ack_cq_events()
-acknowledges
-.I nevents
-events on the CQ
-.I cq\fR.
-
-.SH "RETURN VALUE"
-.B ibv_get_cq_event()
-returns 0 on success, and \-1 on error.
-.PP
-.B ibv_ack_cq_events()
-returns no value.
-.SH "NOTES"
-All completion events that
-.B ibv_get_cq_event()
-returns must be acknowledged using
-.B ibv_ack_cq_events()\fR.
-To avoid races, destroying a CQ will wait for all completion events to
-be acknowledged; this guarantees a one-to-one correspondence between
-acks and successful gets.
-.PP
-Calling
-.B ibv_ack_cq_events()
-may be relatively expensive in the datapath, since it must take a
-mutex. Therefore it may be better to amortize this cost by
-keeping a count of the number of events needing acknowledgement and
-acking several completion events in one call to
-.B ibv_ack_cq_events()\fR.
-.SH "EXAMPLES"
-The following code example demonstrates one possible way to work with
-completion events. It performs the following steps:
-.PP
-Stage I: Preparation
-.br
-1. Creates a CQ
-.br
-2. Requests for notification upon a new (first) completion event
-.PP
-Stage II: Completion Handling Routine
-.br
-3. Wait for the completion event and ack it
-.br
-4. Request for notification upon the next completion event
-.br
-5. Empty the CQ
-.PP
-Note that an extra event may be triggered without having a
-corresponding completion entry in the CQ. This occurs if a completion
-entry is added to the CQ between Step 4 and Step 5, and the CQ is then
-emptied (polled) in Step 5.
-.PP
-.nf
-cq = ibv_create_cq(ctx, 1, ev_ctx, channel, 0);
-if (!cq) {
- fprintf(stderr, "Failed to create CQ\en");
- return 1;
-}
-.PP
-/* Request notification before any completion can be created */
-if (ibv_req_notify_cq(cq, 0)) {
- fprintf(stderr, "Couldn't request CQ notification\en");
- return 1;
-}
-.PP
-\&.
-\&.
-\&.
-.PP
-/* Wait for the completion event */
-if (ibv_get_cq_event(channel, &ev_cq, &ev_ctx)) {
- fprintf(stderr, "Failed to get cq_event\en");
- return 1;
-}
-
-/* Ack the event */
-ibv_ack_cq_events(ev_cq, 1);
-.PP
-/* Request notification upon the next completion event */
-if (ibv_req_notify_cq(ev_cq, 0)) {
- fprintf(stderr, "Couldn't request CQ notification\en");
- return 1;
-}
-.PP
-/* Empty the CQ: poll all of the completions from the CQ (if any exist) */
-do {
- ne = ibv_poll_cq(cq, 1, &wc);
- if (ne < 0) {
- fprintf(stderr, "Failed to poll completions from the CQ\en");
- return 1;
- }
-
- /* there may be an extra event with no completion in the CQ */
- if (ne == 0)
- continue;
-.PP
- if (wc.status != IBV_WC_SUCCESS) {
- fprintf(stderr, "Completion with status 0x%x was found\en", wc.status);
- return 1;
- }
-} while (ne);
-.fi
-
-The following code example demonstrates one possible way to work with
-completion events in non-blocking mode. It performs the following
-steps:
-.PP
-1. Set the completion event channel to be non-blocked
-.br
-2. Poll the channel until there it has a completion event
-.br
-3. Get the completion event and ack it
-.PP
-.nf
-/* change the blocking mode of the completion channel */
-flags = fcntl(channel->fd, F_GETFL);
-rc = fcntl(channel->fd, F_SETFL, flags | O_NONBLOCK);
-if (rc < 0) {
- fprintf(stderr, "Failed to change file descriptor of completion event channel\en");
- return 1;
-}
-
-
-/*
- * poll the channel until it has an event and sleep ms_timeout
- * milliseconds between any iteration
- */
-my_pollfd.fd = channel->fd;
-my_pollfd.events = POLLIN;
-my_pollfd.revents = 0;
-
-do {
- rc = poll(&my_pollfd, 1, ms_timeout);
-} while (rc == 0);
-if (rc < 0) {
- fprintf(stderr, "poll failed\en");
- return 1;
-}
-ev_cq = cq;
-
-/* Wait for the completion event */
-if (ibv_get_cq_event(channel, &ev_cq, &ev_ctx)) {
- fprintf(stderr, "Failed to get cq_event\en");
- return 1;
-}
-
-/* Ack the event */
-ibv_ack_cq_events(ev_cq, 1);
-
-.fi
-.SH "SEE ALSO"
-.BR ibv_create_comp_channel (3),
-.BR ibv_create_cq (3),
-.BR ibv_req_notify_cq (3),
-.BR ibv_poll_cq (3)
-
-.SH "AUTHORS"
-.TP
-Dotan Barak
-.RI < dotanba@gmail.com >