summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/isert/ib_isert.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index eb3d628ec4dd..22841487f600 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -2044,13 +2044,19 @@ isert_handle_wc(struct ib_wc *wc)
static void
isert_cq_work(struct work_struct *work)
{
+ enum { isert_poll_budget = 65536 };
struct isert_comp *comp = container_of(work, struct isert_comp,
work);
+ int completed = 0;
struct ib_wc wc;
- while (ib_poll_cq(comp->cq, 1, &wc) == 1)
+ while (ib_poll_cq(comp->cq, 1, &wc) == 1) {
isert_handle_wc(&wc);
+ if (++completed >= isert_poll_budget)
+ break;
+ }
+
ib_req_notify_cq(comp->cq, IB_CQ_NEXT_COMP);
}