From 00b0dc66248cfd6e1e54bd71ec610d7e638b0fd5 Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Tue, 25 May 2021 00:46:33 +0800 Subject: [PATCH] nvme/tcp: Do not offload header crc32c calculation if header digest is enabled. The header size is very small, which does not have too much value to offload such calculation by hardware. Signed-off-by: Ziye Yang Change-Id: Iaa82f39312df7eef3282325a33677ea41ab735ab Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8011 Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Ben Walker --- include/spdk_internal/nvme_tcp.h | 1 - lib/nvme/nvme_tcp.c | 32 +++----------------------------- 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/include/spdk_internal/nvme_tcp.h b/include/spdk_internal/nvme_tcp.h index 8d2e20515..3345880c1 100644 --- a/include/spdk_internal/nvme_tcp.h +++ b/include/spdk_internal/nvme_tcp.h @@ -101,7 +101,6 @@ struct nvme_tcp_pdu { bool has_hdgst; bool ddgst_enable; - uint32_t header_digest_crc32; uint32_t data_digest_crc32; uint8_t data_digest[SPDK_NVME_TCP_DIGEST_LEN]; diff --git a/lib/nvme/nvme_tcp.c b/lib/nvme/nvme_tcp.c index ce9fc0b92..218ccaea1 100644 --- a/lib/nvme/nvme_tcp.c +++ b/lib/nvme/nvme_tcp.c @@ -460,22 +460,6 @@ pdu_data_crc32_compute(struct nvme_tcp_pdu *pdu) _tcp_write_pdu(pdu); } -static void -header_crc32_accel_done(void *cb_arg, int status) -{ - struct nvme_tcp_pdu *pdu = cb_arg; - - pdu->header_digest_crc32 ^= SPDK_CRC32C_XOR; - MAKE_DIGEST_WORD((uint8_t *)pdu->hdr.raw + pdu->hdr.common.hlen, pdu->header_digest_crc32); - if (spdk_unlikely(status)) { - SPDK_ERRLOG("Failed to compute header digest on pdu=%p\n", pdu); - _pdu_write_done(pdu, status); - return; - } - - pdu_data_crc32_compute(pdu); -} - static int nvme_tcp_qpair_write_pdu(struct nvme_tcp_qpair *tqpair, struct nvme_tcp_pdu *pdu, @@ -484,27 +468,17 @@ nvme_tcp_qpair_write_pdu(struct nvme_tcp_qpair *tqpair, { int hlen; uint32_t crc32c; - struct nvme_tcp_poll_group *tgroup = nvme_tcp_poll_group(tqpair->qpair.poll_group); hlen = pdu->hdr.common.hlen; - pdu->cb_fn = cb_fn; pdu->cb_arg = cb_arg; pdu->qpair = tqpair; /* Header Digest */ if (g_nvme_tcp_hdgst[pdu->hdr.common.pdu_type] && tqpair->flags.host_hdgst_enable) { - if (tgroup != NULL && tgroup->group.group->accel_fn_table.submit_accel_crc32c) { - pdu->iov[0].iov_base = &pdu->hdr.raw; - pdu->iov[0].iov_len = hlen; - tgroup->group.group->accel_fn_table.submit_accel_crc32c(tgroup->group.group->ctx, - &pdu->header_digest_crc32, - pdu->iov, 1, 0, header_crc32_accel_done, pdu); - return 0; - } else { - crc32c = nvme_tcp_pdu_calc_header_digest(pdu); - MAKE_DIGEST_WORD((uint8_t *)pdu->hdr.raw + hlen, crc32c); - } + crc32c = nvme_tcp_pdu_calc_header_digest(pdu); + MAKE_DIGEST_WORD((uint8_t *)pdu->hdr.raw + hlen, crc32c); + } pdu_data_crc32_compute(pdu);