]> git.openfabrics.org - ~emulex/libocrdma.git/commitdiff
RDMA/libocrdma: stop polling when SQ/RQ is empty
authorSelvin Xavier <selvin.xavier@emulex.com>
Tue, 1 Jul 2014 04:56:11 +0000 (10:26 +0530)
committerDevesh Sharma <devesh.sharma@emulex.com>
Tue, 1 Jul 2014 05:43:48 +0000 (11:13 +0530)
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 <devesh.sharma@emulex.com>
Signed-off-by: Selvin Xavier <selvin.xavier@emulex.com>
src/ocrdma_verbs.c

index a5b72524ad4c9bc2f24e3302551c8195e0bd4943..edff8b6192c462ca30ecb72d4103dd06859e267e 100644 (file)
@@ -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);