Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 36ea63b5 authored by Sagi Grimberg's avatar Sagi Grimberg Committed by Nicholas Bellinger
Browse files

iser-target: Reduce CQ lock contention by batch polling



In order to reduce the contention on CQ locking (present
in some LLDDs) we poll in batches of 16 work completion items.

Signed-off-by: default avatarSagi Grimberg <sagig@mellanox.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 37d9fe80
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -2047,13 +2047,15 @@ 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;
	struct ib_wc *const wcs = comp->wcs;
	int i, n, completed = 0;

	while (ib_poll_cq(comp->cq, 1, &wc) == 1) {
		isert_handle_wc(&wc);
	while ((n = ib_poll_cq(comp->cq, ARRAY_SIZE(comp->wcs), wcs)) > 0) {
		for (i = 0; i < n; i++)
			isert_handle_wc(&wcs[i]);

		if (++completed >= isert_poll_budget)
		completed += n;
		if (completed >= isert_poll_budget)
			break;
	}

+2 −0
Original line number Diff line number Diff line
@@ -165,6 +165,7 @@ struct isert_conn {
 *
 * @device:     pointer to device handle
 * @cq:         completion queue
 * @wcs:        work completion array
 * @active_qps: Number of active QPs attached
 *              to completion context
 * @work:       completion work handle
@@ -172,6 +173,7 @@ struct isert_conn {
struct isert_comp {
	struct isert_device     *device;
	struct ib_cq		*cq;
	struct ib_wc		 wcs[16];
	int                      active_qps;
	struct work_struct	 work;
};