accel: use iovecs for compare operations
Also, replace src2 with an iovec + iovcnt and rename it to s2 to keep the naming consistent with the source buffer (s). Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com> Change-Id: I44787128377addd514818ec5aaec084b1a31f0c3 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15939 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:
parent
135396b0bc
commit
4d1ba5f294
@ -62,8 +62,11 @@ struct spdk_accel_task {
|
||||
struct iovec *iovs; /* iovs passed by the caller */
|
||||
uint32_t iovcnt; /* iovcnt passed by the caller */
|
||||
} d;
|
||||
struct {
|
||||
struct iovec *iovs;
|
||||
uint32_t iovcnt;
|
||||
} s2;
|
||||
void *dst;
|
||||
void *src2;
|
||||
};
|
||||
union {
|
||||
struct {
|
||||
|
@ -290,9 +290,14 @@ spdk_accel_submit_compare(struct spdk_io_channel *ch, void *src1,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
accel_task->src = src1;
|
||||
accel_task->src2 = src2;
|
||||
accel_task->nbytes = nbytes;
|
||||
accel_task->s.iovs = &accel_task->aux_iovs[SPDK_ACCEL_AUX_IOV_SRC];
|
||||
accel_task->s2.iovs = &accel_task->aux_iovs[SPDK_ACCEL_AUX_IOV_SRC2];
|
||||
accel_task->s.iovs[0].iov_base = src1;
|
||||
accel_task->s.iovs[0].iov_len = nbytes;
|
||||
accel_task->s.iovcnt = 1;
|
||||
accel_task->s2.iovs[0].iov_base = src2;
|
||||
accel_task->s2.iovs[0].iov_len = nbytes;
|
||||
accel_task->s2.iovcnt = 1;
|
||||
accel_task->op_code = ACCEL_OPC_COMPARE;
|
||||
accel_task->src_domain = NULL;
|
||||
accel_task->dst_domain = NULL;
|
||||
|
@ -195,9 +195,18 @@ _sw_accel_copyv(void *dst, struct iovec *iov, uint32_t iovcnt, int flags)
|
||||
}
|
||||
|
||||
static int
|
||||
_sw_accel_compare(void *src1, void *src2, size_t nbytes)
|
||||
_sw_accel_compare(struct iovec *src_iovs, uint32_t src_iovcnt,
|
||||
struct iovec *src2_iovs, uint32_t src2_iovcnt)
|
||||
{
|
||||
return memcmp(src1, src2, nbytes);
|
||||
if (spdk_unlikely(src_iovcnt != 1 || src2_iovcnt != 1)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (spdk_unlikely(src_iovs[0].iov_len != src2_iovs[0].iov_len)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return memcmp(src_iovs[0].iov_base, src2_iovs[0].iov_base, src_iovs[0].iov_len);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -520,7 +529,8 @@ sw_accel_submit_tasks(struct spdk_io_channel *ch, struct spdk_accel_task *accel_
|
||||
}
|
||||
break;
|
||||
case ACCEL_OPC_COMPARE:
|
||||
rc = _sw_accel_compare(accel_task->src, accel_task->src2, accel_task->nbytes);
|
||||
rc = _sw_accel_compare(accel_task->s.iovs, accel_task->s.iovcnt,
|
||||
accel_task->s2.iovs, accel_task->s2.iovcnt);
|
||||
break;
|
||||
case ACCEL_OPC_CRC32C:
|
||||
if (accel_task->s.iovcnt == 0) {
|
||||
|
@ -170,11 +170,9 @@ _process_single_task(struct spdk_io_channel *ch, struct spdk_accel_task *task)
|
||||
rc = idxd_submit_dualcast(chan, idxd_task, flags);
|
||||
break;
|
||||
case ACCEL_OPC_COMPARE:
|
||||
siov.iov_base = task->src;
|
||||
siov.iov_len = task->nbytes;
|
||||
diov.iov_base = task->dst;
|
||||
diov.iov_len = task->nbytes;
|
||||
rc = spdk_idxd_submit_compare(chan->chan, &siov, 1, &diov, 1, flags, dsa_done, idxd_task);
|
||||
rc = spdk_idxd_submit_compare(chan->chan, task->s.iovs, task->s.iovcnt,
|
||||
task->s2.iovs, task->s2.iovcnt, flags,
|
||||
dsa_done, idxd_task);
|
||||
break;
|
||||
case ACCEL_OPC_FILL:
|
||||
diov.iov_base = task->dst;
|
||||
|
@ -288,10 +288,7 @@ test_spdk_accel_submit_compare(void)
|
||||
/* accel submission OK. */
|
||||
rc = spdk_accel_submit_compare(g_ch, src1, src2, nbytes, NULL, cb_arg);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(task.src == src1);
|
||||
CU_ASSERT(task.src2 == src2);
|
||||
CU_ASSERT(task.op_code == ACCEL_OPC_COMPARE);
|
||||
CU_ASSERT(task.nbytes == nbytes);
|
||||
CU_ASSERT(memcmp(src1, src2, TEST_SUBMIT_SIZE) == 0);
|
||||
expected_accel_task = TAILQ_FIRST(&g_sw_ch->tasks_to_complete);
|
||||
TAILQ_REMOVE(&g_sw_ch->tasks_to_complete, expected_accel_task, link);
|
||||
|
Loading…
Reference in New Issue
Block a user