accel: use iovecs for compress operations

Also, since this was the last operation using dst and nbytes, these
fields were removed from spdk_accel_task.

Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I0d6b090e101c016d1bdcbe7a3bee7d6f691f1c9e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15943
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
This commit is contained in:
Konrad Sztyber 2022-12-10 14:06:47 +01:00 committed by Jim Harris
parent a374f8ba19
commit 1866faffe2
5 changed files with 14 additions and 22 deletions

View File

@ -63,7 +63,6 @@ struct spdk_accel_task {
struct iovec *iovs;
uint32_t iovcnt;
} s2;
void *dst;
};
union {
struct {
@ -81,10 +80,7 @@ struct spdk_accel_task {
};
enum accel_opcode op_code;
uint64_t nbytes;
union {
uint64_t nbytes_dst; /* for compress op */
uint64_t iv; /* Initialization vector (tweak) for crypto op */
};
uint64_t iv; /* Initialization vector (tweak) for crypto op */
int flags;
int status;
struct iovec aux_iovs[SPDK_ACCEL_AUX_IOV_MAX];

View File

@ -502,23 +502,19 @@ spdk_accel_submit_compress(struct spdk_io_channel *ch, void *dst, uint64_t nbyte
struct spdk_accel_task *accel_task;
struct spdk_accel_module_if *module = g_modules_opc[ACCEL_OPC_COMPRESS];
struct spdk_io_channel *module_ch = accel_ch->module_ch[ACCEL_OPC_COMPRESS];
size_t i, src_len = 0;
accel_task = _get_task(accel_ch, cb_fn, cb_arg);
if (accel_task == NULL) {
return -ENOMEM;
}
for (i = 0; i < src_iovcnt; i++) {
src_len += src_iovs[i].iov_len;
}
accel_task->nbytes = src_len;
accel_task->d.iovs = &accel_task->aux_iovs[SPDK_ACCEL_AUX_IOV_DST];
accel_task->d.iovs[0].iov_base = dst;
accel_task->d.iovs[0].iov_len = nbytes;
accel_task->d.iovcnt = 1;
accel_task->output_size = output_size;
accel_task->s.iovs = src_iovs;
accel_task->s.iovcnt = src_iovcnt;
accel_task->dst = dst;
accel_task->nbytes_dst = nbytes;
accel_task->flags = flags;
accel_task->op_code = ACCEL_OPC_COMPRESS;
accel_task->src_domain = NULL;

View File

@ -239,13 +239,14 @@ _sw_accel_compress(struct sw_accel_io_channel *sw_ch, struct spdk_accel_task *ac
size_t last_seglen = accel_task->s.iovs[accel_task->s.iovcnt - 1].iov_len;
struct iovec *siov = accel_task->s.iovs;
struct iovec *diov = accel_task->d.iovs;
size_t remaining = accel_task->nbytes;
uint32_t s = 0, d = 0;
size_t remaining;
uint32_t i, s = 0, d = 0;
int rc = 0;
accel_task->d.iovcnt = 1;
diov[0].iov_base = accel_task->dst;
diov[0].iov_len = accel_task->nbytes_dst;
remaining = 0;
for (i = 0; i < accel_task->s.iovcnt; ++i) {
remaining += accel_task->s.iovs[i].iov_len;
}
isal_deflate_reset(&sw_ch->stream);
sw_ch->stream.end_of_stream = 0;

View File

@ -137,8 +137,9 @@ _process_single_task(struct spdk_io_channel *ch, struct spdk_accel_task *task)
switch (task->op_code) {
case ACCEL_OPC_COMPRESS:
rc = spdk_idxd_submit_compress(chan->chan, task->dst, task->nbytes_dst, task->s.iovs,
task->s.iovcnt, task->output_size, flags, iaa_done, idxd_task);
rc = spdk_idxd_submit_compress(chan->chan, task->d.iovs[0].iov_base, task->d.iovs[0].iov_len,
task->s.iovs, task->s.iovcnt, task->output_size, flags,
iaa_done, idxd_task);
break;
case ACCEL_OPC_DECOMPRESS:
rc = spdk_idxd_submit_decompress(chan->chan, task->d.iovs, task->d.iovcnt, task->s.iovs,

View File

@ -395,7 +395,6 @@ test_spdk_accel_submit_crc32cv(void)
iov[i].iov_len = TEST_SUBMIT_SIZE;
}
task.nbytes = TEST_SUBMIT_SIZE;
TAILQ_INSERT_TAIL(&g_accel_ch->task_pool, &task, link);
/* accel submission OK. */
@ -407,7 +406,6 @@ test_spdk_accel_submit_crc32cv(void)
CU_ASSERT(task.seed == seed);
CU_ASSERT(task.op_code == ACCEL_OPC_CRC32C);
CU_ASSERT(task.cb_arg == cb_arg);
CU_ASSERT(task.nbytes == iov[0].iov_len);
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);