From 3d1d5452e0a5c21618c9cd0d78c0bf7562d2616a Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Sat, 10 Dec 2022 13:27:03 +0100 Subject: [PATCH] accel: use iovecs for crc32c operations Signed-off-by: Konrad Sztyber Change-Id: Ic9f1f002edf273e9cd2247f353b5d7de9d2dea05 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15941 Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk Tested-by: SPDK CI Jenkins --- lib/accel/accel.c | 7 ++++--- lib/accel/accel_sw.c | 6 +----- module/accel/dsa/accel_dsa.c | 13 ++----------- test/unit/lib/accel/accel.c/accel_ut.c | 3 --- 4 files changed, 7 insertions(+), 22 deletions(-) diff --git a/lib/accel/accel.c b/lib/accel/accel.c index 2908ac947..05cef61c0 100644 --- a/lib/accel/accel.c +++ b/lib/accel/accel.c @@ -352,11 +352,12 @@ spdk_accel_submit_crc32c(struct spdk_io_channel *ch, uint32_t *crc_dst, return -ENOMEM; } + accel_task->s.iovs = &accel_task->aux_iovs[SPDK_ACCEL_AUX_IOV_SRC]; + accel_task->s.iovs[0].iov_base = src; + accel_task->s.iovs[0].iov_len = nbytes; + accel_task->s.iovcnt = 1; accel_task->crc_dst = crc_dst; - accel_task->src = src; - accel_task->s.iovcnt = 0; accel_task->seed = seed; - accel_task->nbytes = nbytes; accel_task->op_code = ACCEL_OPC_CRC32C; accel_task->src_domain = NULL; accel_task->dst_domain = NULL; diff --git a/lib/accel/accel_sw.c b/lib/accel/accel_sw.c index ab1728333..119e98755 100644 --- a/lib/accel/accel_sw.c +++ b/lib/accel/accel_sw.c @@ -546,11 +546,7 @@ sw_accel_submit_tasks(struct spdk_io_channel *ch, struct spdk_accel_task *accel_ accel_task->s2.iovs, accel_task->s2.iovcnt); break; case ACCEL_OPC_CRC32C: - if (accel_task->s.iovcnt == 0) { - _sw_accel_crc32c(accel_task->crc_dst, accel_task->src, accel_task->seed, accel_task->nbytes); - } else { - _sw_accel_crc32cv(accel_task->crc_dst, accel_task->s.iovs, accel_task->s.iovcnt, accel_task->seed); - } + _sw_accel_crc32cv(accel_task->crc_dst, accel_task->s.iovs, accel_task->s.iovcnt, accel_task->seed); break; case ACCEL_OPC_COPY_CRC32C: rc = _check_flags(accel_task->flags); diff --git a/module/accel/dsa/accel_dsa.c b/module/accel/dsa/accel_dsa.c index b07a66a31..647d2d54e 100644 --- a/module/accel/dsa/accel_dsa.c +++ b/module/accel/dsa/accel_dsa.c @@ -183,17 +183,8 @@ _process_single_task(struct spdk_io_channel *ch, struct spdk_accel_task *task) task->fill_pattern, flags, dsa_done, idxd_task); break; case ACCEL_OPC_CRC32C: - if (task->s.iovcnt == 0) { - siov.iov_base = task->src; - siov.iov_len = task->nbytes; - iov = &siov; - iovcnt = 1; - } else { - iov = task->s.iovs; - iovcnt = task->s.iovcnt; - } - rc = spdk_idxd_submit_crc32c(chan->chan, iov, iovcnt, task->seed, task->crc_dst, - flags, dsa_done, idxd_task); + rc = spdk_idxd_submit_crc32c(chan->chan, task->s.iovs, task->s.iovcnt, task->seed, + task->crc_dst, flags, dsa_done, idxd_task); break; case ACCEL_OPC_COPY_CRC32C: if (task->s.iovcnt == 0) { diff --git a/test/unit/lib/accel/accel.c/accel_ut.c b/test/unit/lib/accel/accel.c/accel_ut.c index 133659a20..ce7f2343b 100644 --- a/test/unit/lib/accel/accel.c/accel_ut.c +++ b/test/unit/lib/accel/accel.c/accel_ut.c @@ -367,11 +367,8 @@ test_spdk_accel_submit_crc32c(void) rc = spdk_accel_submit_crc32c(g_ch, &crc_dst, src, seed, nbytes, NULL, cb_arg); CU_ASSERT(rc == 0); CU_ASSERT(task.crc_dst == &crc_dst); - CU_ASSERT(task.src == src); - CU_ASSERT(task.s.iovcnt == 0); CU_ASSERT(task.seed == seed); CU_ASSERT(task.op_code == ACCEL_OPC_CRC32C); - CU_ASSERT(task.nbytes == nbytes); expected_accel_task = TAILQ_FIRST(&g_sw_ch->tasks_to_complete); TAILQ_REMOVE(&g_sw_ch->tasks_to_complete, expected_accel_task, link); CU_ASSERT(expected_accel_task == &task);