[Accel-config] [PATCH RESEND v1 09/14] accel-config/test: Add test code of operation Compress

Li Zhang <li4.zhang at intel.com> Tue, 07 Jun 2022 10:58:29 +0800
Newsgroups dev.linux.lists.accel-config
Message-ID <[email protected]>
--===============4116785501521026656==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Add test code of operation Compress

Signed-off-by: Li Zhang <li4.zhang(a)intel.com>
---
 test/iaa.c      | 136 ++++++++++++++++++++++++++++++++++++++++++++++++
 test/iaa.h      |   4 ++
 test/iaa_prep.c |  14 +++++
 test/iaa_test.c |  65 +++++++++++++++++++++++
 4 files changed, 219 insertions(+)

diff --git a/test/iaa.c b/test/iaa.c
index 524446a..0c607ee 100644
--- a/test/iaa.c
+++ b/test/iaa.c
@@ -18,6 +18,7 @@
 #include "iaa.h"
 #include "algorithms/iaa_crc64.h"
 #include "algorithms/iaa_zcompress.h"
+#include "algorithms/iaa_compress.h"
 =

 static int init_crc64(struct task *tsk, int tflags, int opcode, unsigned l=
ong src1_xfer_size)
 {
@@ -153,6 +154,36 @@ static int init_zdecompress32(struct task *tsk, int tf=
lags, int opcode, unsigned
 	return ACCTEST_STATUS_OK;
 }
 =

+static int init_compress(struct task *tsk, int tflags, int opcode, unsigne=
d long src1_xfer_size)
+{
+	tsk->pattern =3D 0x98765432abcdef01;
+	tsk->opcode =3D opcode;
+	tsk->test_flags =3D tflags;
+	tsk->xfer_size =3D src1_xfer_size;
+
+	tsk->src1 =3D aligned_alloc(32, src1_xfer_size);
+	if (!tsk->src1)
+		return -ENOMEM;
+	memset_pattern(tsk->src1, tsk->pattern, src1_xfer_size);
+
+	tsk->src2 =3D aligned_alloc(32, IAA_COMPRESS_SRC2_SIZE);
+	if (!tsk->src2)
+		return -ENOMEM;
+	memset_pattern(tsk->src2, 0, IAA_COMPRESS_SRC2_SIZE);
+
+	tsk->dst1 =3D aligned_alloc(32, IAA_COMPRESS_MAX_DEST_SIZE);
+	if (!tsk->dst1)
+		return -ENOMEM;
+	memset_pattern(tsk->dst1, 0, IAA_COMPRESS_MAX_DEST_SIZE);
+
+	tsk->output =3D aligned_alloc(32, IAA_COMPRESS_MAX_DEST_SIZE);
+	if (!tsk->output)
+		return -ENOMEM;
+	memset_pattern(tsk->output, 0, IAA_COMPRESS_MAX_DEST_SIZE);
+
+	return ACCTEST_STATUS_OK;
+}
+
 int init_task(struct task *tsk, int tflags, int opcode, unsigned long src1=
_xfer_size)
 {
 	int rc =3D 0;
@@ -176,6 +207,9 @@ int init_task(struct task *tsk, int tflags, int opcode,=
 unsigned long src1_xfer_
 	case IAX_OPCODE_ZDECOMPRESS32:
 		rc =3D init_zdecompress32(tsk, tflags, opcode, src1_xfer_size);
 		break;
+	case IAX_OPCODE_COMPRESS:
+		rc =3D init_compress(tsk, tflags, opcode, src1_xfer_size);
+		break;
 	}
 =

 	if (rc !=3D ACCTEST_STATUS_OK) {
@@ -468,6 +502,62 @@ int iaa_zdecompress32_multi_task_nodes(struct acctest_=
context *ctx)
 	return ret;
 }
 =

+static int iaa_wait_compress(struct acctest_context *ctx, struct task *tsk)
+{
+	struct completion_record *comp =3D tsk->comp;
+	int rc;
+
+	rc =3D acctest_wait_on_desc_timeout(comp, ctx, ms_timeout);
+	if (rc < 0) {
+		err("compress desc timeout\n");
+		return ACCTEST_STATUS_TIMEOUT;
+	}
+
+	return ACCTEST_STATUS_OK;
+}
+
+int iaa_compress_multi_task_nodes(struct acctest_context *ctx)
+{
+	struct task_node *tsk_node =3D ctx->multi_task_node;
+	int ret =3D ACCTEST_STATUS_OK;
+
+	while (tsk_node) {
+		tsk_node->tsk->dflags |=3D (IDXD_OP_FLAG_CRAV | IDXD_OP_FLAG_RCR);
+		if ((tsk_node->tsk->test_flags & TEST_FLAGS_BOF) && ctx->bof)
+			tsk_node->tsk->dflags |=3D IDXD_OP_FLAG_BOF;
+
+		tsk_node->tsk->dflags |=3D (IDXD_OP_FLAG_WR_SRC2_CMPL | IDXD_OP_FLAG_RD_=
SRC2_AECS);
+		tsk_node->tsk->iaa_src2_xfer_size =3D IAA_COMPRESS_AECS_SIZE;
+
+		memcpy(tsk_node->tsk->src2, (void *)iaa_compress_aecs, IAA_COMPRESS_AECS=
_SIZE);
+
+		tsk_node->tsk->iaa_compr_flags =3D (IDXD_COMPRESS_FLAG_EOB_BFINAL |
+						  IDXD_COMPRESS_FLAG_FLUSH_OUTPUT);
+		tsk_node->tsk->iaa_max_dst_size =3D IAA_COMPRESS_MAX_DEST_SIZE;
+
+		iaa_prep_compress(tsk_node->tsk);
+		tsk_node =3D tsk_node->next;
+	}
+
+	info("Submitted all compress jobs\n");
+	tsk_node =3D ctx->multi_task_node;
+	while (tsk_node) {
+		acctest_desc_submit(ctx, tsk_node->tsk->desc);
+		tsk_node =3D tsk_node->next;
+	}
+
+	tsk_node =3D ctx->multi_task_node;
+	while (tsk_node) {
+		ret =3D iaa_wait_compress(ctx, tsk_node->tsk);
+		if (ret !=3D ACCTEST_STATUS_OK)
+			info("Desc: %p failed with ret: %d\n",
+			     tsk_node->tsk->desc, tsk_node->tsk->comp->status);
+		tsk_node =3D tsk_node->next;
+	}
+
+	return ret;
+}
+
 /* mismatch_expected: expect mismatched buffer with success status 0x1 */
 int iaa_task_result_verify(struct task *tsk, int mismatch_expected)
 {
@@ -494,6 +584,9 @@ int iaa_task_result_verify(struct task *tsk, int mismat=
ch_expected)
 	case IAX_OPCODE_ZDECOMPRESS32:
 		ret =3D task_result_verify_zdecompress32(tsk, mismatch_expected);
 		break;
+	case IAX_OPCODE_COMPRESS:
+		ret =3D task_result_verify_compress(tsk, mismatch_expected);
+		break;
 	}
 =

 	if (ret =3D=3D ACCTEST_STATUS_OK)
@@ -722,3 +815,46 @@ int task_result_verify_zdecompress32(struct task *tsk,=
 int mismatch_expected)
 =

 	return -ENXIO;
 }
+
+int task_result_verify_compress(struct task *tsk, int mismatch_expected)
+{
+	int i =3D 0;
+	int rc;
+	int expected_len;
+
+	if (mismatch_expected)
+		warn("invalid arg mismatch_expected for %d\n", tsk->opcode);
+
+	rc =3D iaa_do_decompress(tsk->output, tsk->dst1, tsk->comp->iax_output_si=
ze, &expected_len);
+	if (rc)
+		return -ENXIO;
+	rc =3D memcmp(tsk->src1, tsk->output, expected_len);
+
+	if (!mismatch_expected) {
+		if (expected_len - tsk->xfer_size) {
+			err("Compress mismatch, exp len %d, act len %d\n",
+			    expected_len, tsk->xfer_size);
+
+			return -ENXIO;
+		}
+		if (rc) {
+			err("Compress mismatch, memcmp rc %d\n", rc);
+			for (i =3D 0; i < (expected_len / 4); i++) {
+				printf("Exp[%d]=3D0x%04X, Act[%d]=3D0x%04X\n",
+				       i, ((uint32_t *)tsk->output)[i],
+				       i, ((uint32_t *)tsk->src1)[i]);
+			}
+
+			return -ENXIO;
+		}
+		return ACCTEST_STATUS_OK;
+	}
+
+	/* mismatch_expected */
+	if (rc) {
+		info("expected mismatch\n");
+		return ACCTEST_STATUS_OK;
+	}
+
+	return -ENXIO;
+}
diff --git a/test/iaa.h b/test/iaa.h
index 2a14781..1e6010f 100644
--- a/test/iaa.h
+++ b/test/iaa.h
@@ -15,12 +15,15 @@ int iaa_zcompress16_multi_task_nodes(struct acctest_con=
text *ctx);
 int iaa_zdecompress16_multi_task_nodes(struct acctest_context *ctx);
 int iaa_zcompress32_multi_task_nodes(struct acctest_context *ctx);
 int iaa_zdecompress32_multi_task_nodes(struct acctest_context *ctx);
+int iaa_compress_multi_task_nodes(struct acctest_context *ctx);
+
 void iaa_prep_noop(struct task *tsk);
 void iaa_prep_crc64(struct task *tsk);
 void iaa_prep_zcompress16(struct task *tsk);
 void iaa_prep_zdecompress16(struct task *tsk);
 void iaa_prep_zcompress32(struct task *tsk);
 void iaa_prep_zdecompress32(struct task *tsk);
+void iaa_prep_compress(struct task *tsk);
 =

 int iaa_task_result_verify(struct task *tsk, int mismatch_expected);
 int iaa_task_result_verify_task_nodes(struct acctest_context *ctx, int mis=
match_expected);
@@ -29,5 +32,6 @@ int task_result_verify_zcompress16(struct task *tsk, int =
mismatch_expected);
 int task_result_verify_zdecompress16(struct task *tsk, int mismatch_expect=
ed);
 int task_result_verify_zcompress32(struct task *tsk, int mismatch_expected=
);
 int task_result_verify_zdecompress32(struct task *tsk, int mismatch_expect=
ed);
+int task_result_verify_compress(struct task *tsk, int mismatch_expected);
 =

 #endif
diff --git a/test/iaa_prep.c b/test/iaa_prep.c
index 78668ac..0d454ff 100644
--- a/test/iaa_prep.c
+++ b/test/iaa_prep.c
@@ -75,3 +75,17 @@ void iaa_prep_zdecompress32(struct task *tsk)
 	tsk->desc->iax_max_dst_size =3D tsk->iaa_max_dst_size;
 	tsk->comp->status =3D 0;
 }
+
+void iaa_prep_compress(struct task *tsk)
+{
+	info("preparing descriptor for compress\n");
+
+	acctest_prep_desc_common(tsk->desc, tsk->opcode, (uint64_t)(tsk->dst1),
+				 (uint64_t)(tsk->src1), tsk->xfer_size, tsk->dflags);
+	tsk->desc->completion_addr =3D (uint64_t)(tsk->comp);
+	tsk->desc->iax_compr_flags =3D tsk->iaa_compr_flags;
+	tsk->desc->iax_src2_addr =3D (uint64_t)(tsk->src2);
+	tsk->desc->iax_src2_xfer_size =3D tsk->iaa_src2_xfer_size;
+	tsk->desc->iax_max_dst_size =3D tsk->iaa_max_dst_size;
+	tsk->comp->status =3D 0;
+}
diff --git a/test/iaa_test.c b/test/iaa_test.c
index ba3d412..16bf363 100644
--- a/test/iaa_test.c
+++ b/test/iaa_test.c
@@ -221,6 +221,65 @@ static int test_zcompress(struct acctest_context *ctx,=
 size_t buf_size,
 	return rc;
 }
 =

+static int test_compress(struct acctest_context *ctx, size_t buf_size, int=
 tflags,
+			 int extra_flags, uint32_t opcode, int num_desc)
+{
+	struct task_node *tsk_node;
+	int rc =3D ACCTEST_STATUS_OK;
+	int itr =3D num_desc, i =3D 0, range =3D 0;
+
+	info("testcompress: opcode %d len %#lx tflags %#x num_desc %ld extra_flag=
s %#lx\n",
+	     opcode, buf_size, tflags, num_desc, extra_flags);
+
+	ctx->is_batch =3D 0;
+
+	if (ctx->dedicated =3D=3D ACCFG_WQ_SHARED)
+		range =3D ctx->threshold;
+	else
+		range =3D ctx->wq_size;
+
+	while (itr > 0 && rc =3D=3D ACCTEST_STATUS_OK) {
+		i =3D (itr < range) ? itr : range;
+		/* Allocate memory to all the task nodes, desc, completion record*/
+		rc =3D acctest_alloc_multiple_tasks(ctx, i);
+		if (rc !=3D ACCTEST_STATUS_OK)
+			return rc;
+
+		/* allocate memory to src and dest buffers and fill in the desc for all =
the nodes*/
+		tsk_node =3D ctx->multi_task_node;
+		while (tsk_node) {
+			tsk_node->tsk->iaa_compr_flags =3D extra_flags;
+
+			rc =3D init_task(tsk_node->tsk, tflags, opcode, buf_size);
+			if (rc !=3D ACCTEST_STATUS_OK)
+				return rc;
+
+			tsk_node =3D tsk_node->next;
+		}
+
+		switch (opcode) {
+		case IAX_OPCODE_COMPRESS:
+			rc =3D iaa_compress_multi_task_nodes(ctx);
+			if (rc !=3D ACCTEST_STATUS_OK)
+				return rc;
+
+			/* Verification of all the nodes*/
+			rc =3D iaa_task_result_verify_task_nodes(ctx, 0);
+			if (rc !=3D ACCTEST_STATUS_OK)
+				return rc;
+			break;
+		default:
+			err("Unsupported op %#x\n", opcode);
+			return -EINVAL;
+		}
+
+		acctest_free_task(ctx);
+		itr =3D itr - range;
+	}
+
+	return rc;
+}
+
 int main(int argc, char *argv[])
 {
 	struct acctest_context *iaa;
@@ -315,6 +374,12 @@ int main(int argc, char *argv[])
 			goto error;
 		break;
 =

+	case IAX_OPCODE_COMPRESS:
+		rc =3D test_compress(iaa, buf_size, tflags, extra_flags, opcode, num_des=
c);
+		if (rc !=3D ACCTEST_STATUS_OK)
+			goto error;
+		break;
+
 	default:
 		rc =3D -EINVAL;
 		break;
-- =

2.25.1

--===============4116785501521026656==--