In case the CQ is packed with completions, we can't just hog the CPU forever. Poll until a sufficient budget (currently hard-coded to 64k completions) and if budget is exhausted, bailout and give a chance to other threads. Signed-off-by: Sagi Grimberg <sagig@xxxxxxxxxxxx> --- drivers/infiniband/ulp/isert/ib_isert.c | 8 +++++++- 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 603d6b8..46ba758 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); } -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe target-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html