diff mbox

[for-next,3/4] RDMA/libocrdma: stop polling when SQ/RQ is empty

Message ID 25d7e82e-650e-4e10-8048-b310ffcfeaa6@CMEXHTCAS1.ad.emulex.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Devesh Sharma July 1, 2014, 5:54 a.m. UTC
From: Selvin Xavier <selvin.xavier@emulex.com>

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 |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)
diff mbox

Patch

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);