OSDN Git Service

iser-target: Introduce isert_poll_budget
authorSagi Grimberg <sagig@mellanox.com>
Tue, 2 Dec 2014 14:57:44 +0000 (16:57 +0200)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sat, 13 Dec 2014 07:32:31 +0000 (23:32 -0800)
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@mellanox.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/infiniband/ulp/isert/ib_isert.c

index eb3d628..2284148 100644 (file)
@@ -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);
 }