accel: use iovecs for crc32c operations

Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Ic9f1f002edf273e9cd2247f353b5d7de9d2dea05
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15941
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Konrad Sztyber 2022-12-10 13:27:03 +01:00 committed by Tomasz Zawadzki
parent bc6a14636a
commit 3d1d5452e0
4 changed files with 7 additions and 22 deletions

View File

@ -352,11 +352,12 @@ spdk_accel_submit_crc32c(struct spdk_io_channel *ch, uint32_t *crc_dst,
return -ENOMEM; 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->crc_dst = crc_dst;
accel_task->src = src;
accel_task->s.iovcnt = 0;
accel_task->seed = seed; accel_task->seed = seed;
accel_task->nbytes = nbytes;
accel_task->op_code = ACCEL_OPC_CRC32C; accel_task->op_code = ACCEL_OPC_CRC32C;
accel_task->src_domain = NULL; accel_task->src_domain = NULL;
accel_task->dst_domain = NULL; accel_task->dst_domain = NULL;

View File

@ -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); accel_task->s2.iovs, accel_task->s2.iovcnt);
break; break;
case ACCEL_OPC_CRC32C: 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; break;
case ACCEL_OPC_COPY_CRC32C: case ACCEL_OPC_COPY_CRC32C:
rc = _check_flags(accel_task->flags); rc = _check_flags(accel_task->flags);

View File

@ -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); task->fill_pattern, flags, dsa_done, idxd_task);
break; break;
case ACCEL_OPC_CRC32C: case ACCEL_OPC_CRC32C:
if (task->s.iovcnt == 0) { rc = spdk_idxd_submit_crc32c(chan->chan, task->s.iovs, task->s.iovcnt, task->seed,
siov.iov_base = task->src; task->crc_dst, flags, dsa_done, idxd_task);
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);
break; break;
case ACCEL_OPC_COPY_CRC32C: case ACCEL_OPC_COPY_CRC32C:
if (task->s.iovcnt == 0) { if (task->s.iovcnt == 0) {

View File

@ -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); rc = spdk_accel_submit_crc32c(g_ch, &crc_dst, src, seed, nbytes, NULL, cb_arg);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
CU_ASSERT(task.crc_dst == &crc_dst); 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.seed == seed);
CU_ASSERT(task.op_code == ACCEL_OPC_CRC32C); CU_ASSERT(task.op_code == ACCEL_OPC_CRC32C);
CU_ASSERT(task.nbytes == nbytes);
expected_accel_task = TAILQ_FIRST(&g_sw_ch->tasks_to_complete); expected_accel_task = TAILQ_FIRST(&g_sw_ch->tasks_to_complete);
TAILQ_REMOVE(&g_sw_ch->tasks_to_complete, expected_accel_task, link); TAILQ_REMOVE(&g_sw_ch->tasks_to_complete, expected_accel_task, link);
CU_ASSERT(expected_accel_task == &task); CU_ASSERT(expected_accel_task == &task);