Commit 3c800111 authored by Alexey Marchuk's avatar Alexey Marchuk Committed by Jim Harris
Browse files

accel/mlx5: More precise condition to update DB



The number of outstanding WRs isn't a precise
condition to update doorbells since we may have
WRs already submitted to HW but not completed
and we may update do unnecessary DB update.
Use a dedicated flag to check if DB update is
required

Signed-off-by: default avatarAlexey Marchuk <alexeymar@nvidia.com>
Change-Id: I941a0724902751cbbebea9f2cc94e8d5247b1182
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/24704


Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Community-CI: Community CI Samsung <spdk.community.ci.samsung@gmail.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 98eca6fa
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@
do {							\
	assert((qp)->wrs_submitted < (qp)->wrs_max);	\
	(qp)->wrs_submitted++;				\
	(qp)->ring_db = true;				\
	assert((task)->num_wrs < UINT16_MAX);		\
	(task)->num_wrs++;				\
} while (0)
@@ -46,6 +47,7 @@ do { \
	(dev)->wrs_in_cq++;						\
        assert((qp)->wrs_submitted < (qp)->wrs_max);			\
	(qp)->wrs_submitted++;						\
	(qp)->ring_db = true;						\
	assert((task)->num_wrs < UINT16_MAX);				\
	(task)->num_wrs++;						\
} while (0)
@@ -178,6 +180,7 @@ struct accel_mlx5_qp {
	STAILQ_HEAD(, accel_mlx5_task) in_hw;
	uint16_t wrs_submitted;
	uint16_t wrs_max;
	bool ring_db;
	bool recovering;
	struct spdk_poller *recover_poller;
};
@@ -2257,8 +2260,9 @@ accel_mlx5_poller(void *ctx)
				SPDK_ERRLOG("Error %"PRId64" on CQ, dev %s\n", rc, dev->dev_ctx->context->device->name);
			}
			completions += rc;
			if (dev->qp.wrs_submitted) {
			if (dev->qp.ring_db) {
				spdk_mlx5_qp_complete_send(dev->qp.qp);
				dev->qp.ring_db = false;
			}
		}
		if (!STAILQ_EMPTY(&dev->nomem)) {