IB: new common API for draining queues
authorSteve Wise <swise@opengridcomputing.com.com>
Wed, 17 Feb 2016 16:15:41 +0000 (08:15 -0800)
committerDoug Ledford <dledford@redhat.com>
Mon, 29 Feb 2016 22:10:27 +0000 (17:10 -0500)
commit765d67748bcf802c4642a49cd0139787d0d80783
treee31df1485f9eef18d5b6276dd6562c2cdd62e505
parentfc77dbd34c5c99bce46d40a2491937c3bcbd10af
IB: new common API for draining queues

Add provider-specific drain_sq/drain_rq functions for providers needing
special drain logic.

Add static functions __ib_drain_sq() and __ib_drain_rq() which post noop
WRs to the SQ or RQ and block until their completions are processed.
This ensures the applications completions for work requests posted prior
to the drain work request have all been processed.

Add API functions ib_drain_sq(), ib_drain_rq(), and ib_drain_qp().

For the drain logic to work, the caller must:

ensure there is room in the CQ(s) and QP for the drain work request
and completion.

allocate the CQ using ib_alloc_cq() and the CQ poll context cannot be
IB_POLL_DIRECT.

ensure that there are no other contexts that are posting WRs concurrently.
Otherwise the drain is not guaranteed.

Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/verbs.c
include/rdma/ib_verbs.h