Commit f2d23928 authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Tomasz Zawadzki
Browse files

nvme/tcp: move accel ddgst calculation to a function during write



It'll make the following patches smaller.

Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I69e2142235b3dd7cec70fc04e9754fb81d357357
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/18767


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
parent 485cb2a6
Loading
Loading
Loading
Loading
+26 −8
Original line number Diff line number Diff line
@@ -465,23 +465,41 @@ pdu_accel_compute_crc32_done(void *cb_arg, int status)
	_tcp_write_pdu(pdu);
}

static bool
pdu_accel_compute_crc32(struct nvme_tcp_pdu *pdu)
{
	struct nvme_tcp_qpair *tqpair = pdu->qpair;
	struct nvme_tcp_poll_group *tgroup = nvme_tcp_poll_group(tqpair->qpair.poll_group);

	/* Only support this limited case for the first step */
	if (spdk_unlikely(nvme_qpair_get_state(&tqpair->qpair) < NVME_QPAIR_CONNECTED ||
			  pdu->dif_ctx != NULL ||
			  pdu->data_len % SPDK_NVME_TCP_DIGEST_ALIGNMENT != 0)) {
		return false;
	}

	if (tqpair->qpair.poll_group == NULL ||
	    tgroup->group.group->accel_fn_table.submit_accel_crc32c == NULL) {
		return false;
	}

	tgroup->group.group->accel_fn_table.submit_accel_crc32c(tgroup->group.group->ctx,
			&pdu->data_digest_crc32, pdu->data_iov,
			pdu->data_iovcnt, 0, pdu_accel_compute_crc32_done, pdu);

	return true;
}

static void
pdu_compute_crc32(struct nvme_tcp_pdu *pdu)
{
	struct nvme_tcp_qpair *tqpair = pdu->qpair;
	uint32_t crc32c;
	struct nvme_tcp_poll_group *tgroup = nvme_tcp_poll_group(tqpair->qpair.poll_group);

	/* Data Digest */
	if (pdu->data_len > 0 && g_nvme_tcp_ddgst[pdu->hdr.common.pdu_type] &&
	    tqpair->flags.host_ddgst_enable) {
		/* Only support this limited case for the first step */
		if ((nvme_qpair_get_state(&tqpair->qpair) >= NVME_QPAIR_CONNECTED) &&
		    (tgroup != NULL && tgroup->group.group->accel_fn_table.submit_accel_crc32c) &&
		    spdk_likely(!pdu->dif_ctx && (pdu->data_len % SPDK_NVME_TCP_DIGEST_ALIGNMENT == 0))) {
			tgroup->group.group->accel_fn_table.submit_accel_crc32c(tgroup->group.group->ctx,
					&pdu->data_digest_crc32, pdu->data_iov,
					pdu->data_iovcnt, 0, pdu_accel_compute_crc32_done, pdu);
		if (pdu_accel_compute_crc32(pdu)) {
			return;
		}