From: Selvin Xavier Date: Tue, 1 Jul 2014 04:56:11 +0000 (+0530) Subject: RDMA/libocrdma: stop polling when SQ/RQ is empty X-Git-Tag: libocrdma-1.0.5~6 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=bf0f81d875c3cd76e85d61e61dcd874cf45d43bf;p=~emulex%2Flibocrdma.git RDMA/libocrdma: stop polling when SQ/RQ is empty The cq polling logic was hitting an infinite loop while generating flush completions for a torn down QP. This patch adds a check in flush completion logic to detect SQ/RQ empty condition and stop polling loop. Signed-off-by: Devesh Sharma Signed-off-by: Selvin Xavier --- diff --git a/src/ocrdma_verbs.c b/src/ocrdma_verbs.c index a5b7252..edff8b6 100644 --- a/src/ocrdma_verbs.c +++ b/src/ocrdma_verbs.c @@ -1739,6 +1739,11 @@ static int ocrdma_poll_err_scqe(struct ocrdma_qp *qp, *stop = 1; expand = 0; } + } else if (is_hw_sq_empty(qp)) { + /* Do nothing */ + expand = 0; + *polled = 0; + *stop = 0; } else { *polled = 1; expand = ocrdma_update_err_scqe(ibwc, cqe, qp, status); @@ -1848,6 +1853,11 @@ static int ocrdma_poll_err_rcqe(struct ocrdma_qp *qp, struct ocrdma_cqe *cqe, *stop = 1; expand = 0; } + } else if (is_hw_rq_empty(qp)) { + /* Do nothing */ + expand = 0; + *polled = 0; + *stop = 0; } else { *polled = 1; expand = ocrdma_update_err_rcqe(ibwc, cqe, qp, status);