Commit 1866faff authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Jim Harris
Browse files

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: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I0d6b090e101c016d1bdcbe7a3bee7d6f691f1c9e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15943


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
parent a374f8ba
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -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 */
	};
	int				flags;
	int				status;
	struct iovec			aux_iovs[SPDK_ACCEL_AUX_IOV_MAX];
+4 −8
Original line number Diff line number Diff line
@@ -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;
+6 −5
Original line number Diff line number Diff line
@@ -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;
+3 −2
Original line number Diff line number Diff line
@@ -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,
+0 −2
Original line number Diff line number Diff line
@@ -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);