diff options
Diffstat (limited to 'man/ibv_get_async_event.3')
-rw-r--r-- | man/ibv_get_async_event.3 | 164 |
1 files changed, 0 insertions, 164 deletions
diff --git a/man/ibv_get_async_event.3 b/man/ibv_get_async_event.3 deleted file mode 100644 index a76dc0c..0000000 --- a/man/ibv_get_async_event.3 +++ /dev/null @@ -1,164 +0,0 @@ -.\" -*- nroff -*- -.\" -.TH IBV_GET_ASYNC_EVENT 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual" -.SH "NAME" -ibv_get_async_event, ibv_ack_async_event \- get or acknowledge asynchronous events -.SH "SYNOPSIS" -.nf -.B #include <infiniband/verbs.h> -.sp -.BI "int ibv_get_async_event(struct ibv_context " "*context" , -.BI " struct ibv_async_event " "*event" ); -.sp -.BI "void ibv_ack_async_event(struct ibv_async_event " "*event" ); -.fi -.SH "DESCRIPTION" -.B ibv_get_async_event() -waits for the next async event of the RDMA device context -.I context -and returns it through the pointer -.I event\fR, -which is an ibv_async_event struct, as defined in <infiniband/verbs.h>. -.PP -.nf -struct ibv_async_event { -.in +8 -union { -.in +8 -struct ibv_cq *cq; /* CQ that got the event */ -struct ibv_qp *qp; /* QP that got the event */ -struct ibv_srq *srq; /* SRQ that got the event */ -int port_num; /* port number that got the event */ -.in -8 -} element; -enum ibv_event_type event_type; /* type of the event */ -.in -8 -}; -.fi -.PP -One member of the element union will be valid, depending on the -event_type member of the structure. event_type will be one of the -following events: -.PP -.I QP events: -.TP -.B IBV_EVENT_QP_FATAL \fR Error occurred on a QP and it transitioned to error state -.TP -.B IBV_EVENT_QP_REQ_ERR \fR Invalid Request Local Work Queue Error -.TP -.B IBV_EVENT_QP_ACCESS_ERR \fR Local access violation error -.TP -.B IBV_EVENT_COMM_EST \fR Communication was established on a QP -.TP -.B IBV_EVENT_SQ_DRAINED \fR Send Queue was drained of outstanding messages in progress -.TP -.B IBV_EVENT_PATH_MIG \fR A connection has migrated to the alternate path -.TP -.B IBV_EVENT_PATH_MIG_ERR \fR A connection failed to migrate to the alternate path -.TP -.B IBV_EVENT_QP_LAST_WQE_REACHED \fR Last WQE Reached on a QP associated with an SRQ -.PP -.I CQ events: -.TP -.B IBV_EVENT_CQ_ERR \fR CQ is in error (CQ overrun) -.PP -.I SRQ events: -.TP -.B IBV_EVENT_SRQ_ERR \fR Error occurred on an SRQ -.TP -.B IBV_EVENT_SRQ_LIMIT_REACHED \fR SRQ limit was reached -.PP -.I Port events: -.TP -.B IBV_EVENT_PORT_ACTIVE \fR Link became active on a port -.TP -.B IBV_EVENT_PORT_ERR \fR Link became unavailable on a port -.TP -.B IBV_EVENT_LID_CHANGE \fR LID was changed on a port -.TP -.B IBV_EVENT_PKEY_CHANGE \fR P_Key table was changed on a port -.TP -.B IBV_EVENT_SM_CHANGE \fR SM was changed on a port -.TP -.B IBV_EVENT_CLIENT_REREGISTER \fR SM sent a CLIENT_REREGISTER request to a port -.TP -.B IBV_EVENT_GID_CHANGE \fR GID table was changed on a port -.PP -.I CA events: -.TP -.B IBV_EVENT_DEVICE_FATAL \fR CA is in FATAL state -.PP -.B ibv_ack_async_event() -acknowledge the async event -.I event\fR. -.SH "RETURN VALUE" -.B ibv_get_async_event() -returns 0 on success, and \-1 on error. -.PP -.B ibv_ack_async_event() -returns no value. -.SH "NOTES" -All async events that -.B ibv_get_async_event() -returns must be acknowledged using -.B ibv_ack_async_event()\fR. -To avoid races, destroying an object (CQ, SRQ or QP) will wait for all -affiliated events for the object to be acknowledged; this avoids an -application retrieving an affiliated event after the corresponding -object has already been destroyed. -.PP -.B ibv_get_async_event() -is a blocking function. If multiple threads call this function -simultaneously, then when an async event occurs, only one thread will -receive it, and it is not possible to predict which thread will -receive it. -.SH "EXAMPLES" -The following code example demonstrates one possible way to work with async events in non-blocking mode. -It performs the following steps: -.PP -1. Set the async events queue work mode to be non-blocked -.br -2. Poll the queue until it has an async event -.br -3. Get the async event and ack it -.PP -.nf -/* change the blocking mode of the async event queue */ -flags = fcntl(ctx->async_fd, F_GETFL); -rc = fcntl(ctx->async_fd, F_SETFL, flags | O_NONBLOCK); -if (rc < 0) { - fprintf(stderr, "Failed to change file descriptor of async event queue\en"); - return 1; -} - -/* - * poll the queue until it has an event and sleep ms_timeout - * milliseconds between any iteration - */ -my_pollfd.fd = ctx->async_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; -} - -/* Get the async event */ -if (ibv_get_async_event(ctx, &async_event)) { - fprintf(stderr, "Failed to get async_event\en"); - return 1; -} - -/* Ack the event */ -ibv_ack_async_event(&async_event); - -.fi -.SH "SEE ALSO" -.BR ibv_open_device (3) -.SH "AUTHORS" -.TP -Dotan Barak <dotanba@gmail.com> |