[Accel-config] [PATCH 6/8] add chain opt & expand scan src1 buffer

"Guo, Lingyan" <[email protected]> Fri, 27 Oct 2023 11:06:53 +0800
Newsgroups dev.linux.lists.accel-config
Message-ID <[email protected]>
change:
  add parameter -c to support chaining
  expend scan input to MAX_DEST_SIZE

Signed-off-by: Guo, Lingyan <[email protected]>
---
 test/iaa.c      | 15 ++++++++-------
 test/iaa.h      |  4 ++--
 test/iaa_prep.c |  2 +-
 test/iaa_test.c | 14 ++++++++++----
 4 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/test/iaa.c b/test/iaa.c
index 3256cde..a313906 100644
--- a/test/iaa.c
+++ b/test/iaa.c
@@ -306,19 +306,18 @@ static int init_scan(struct task *tsk, int tflags,
 	tsk->xfer_size = src1_xfer_size;
 
 	// Enough space for Chain decompress result
-	tsk->input = aligned_alloc(ADDR_ALIGNMENT, src1_xfer_size);
+	tsk->input = aligned_alloc(ADDR_ALIGNMENT, IAA_GENERAL_MAX_DEST_SIZE);
 	if (!tsk->input)
 		return -ENOMEM;
+	memset_pattern(tsk->input, 0, IAA_GENERAL_MAX_DEST_SIZE);
 	for (i = 0; i < (src1_xfer_size / 4); i++)
 		((uint32_t *)tsk->input)[i] = pattern++;
 
-	tsk->src1 = aligned_alloc(ADDR_ALIGNMENT, src1_xfer_size);
+	tsk->src1 = aligned_alloc(ADDR_ALIGNMENT, IAA_GENERAL_MAX_DEST_SIZE);
 	if (!tsk->src1)
 		return -ENOMEM;
-	memset_pattern(tsk->src1, 0, src1_xfer_size);
 	memcpy(tsk->src1, tsk->input, src1_xfer_size);
 
-
 	tsk->src2 = aligned_alloc(32, IAA_FILTER_AECS_SIZE);
 	if (!tsk->src2)
 		return -ENOMEM;
@@ -1496,19 +1495,21 @@ static int iaa_wait_scan(struct acctest_context *ctx, struct task *tsk)
 	return ACCTEST_STATUS_OK;
 }
 
-int iaa_scan_multi_task_nodes(struct acctest_context *ctx)
+int iaa_scan_multi_task_nodes(struct acctest_context *ctx, int chaining)
 {
 	struct task_node *tsk_node = ctx->multi_task_node;
 	int ret = ACCTEST_STATUS_OK;
 
 	while (tsk_node) {
-		tsk_node->tsk->dflags |= (IDXD_OP_FLAG_CRAV | IDXD_OP_FLAG_RCR);
+		tsk_node->tsk->opcode = IAX_OPCODE_SCAN;
+
+		tsk_node->tsk->dflags = (IDXD_OP_FLAG_CRAV | IDXD_OP_FLAG_RCR);
 		if ((tsk_node->tsk->test_flags & TEST_FLAGS_BOF) && ctx->bof)
 			tsk_node->tsk->dflags |= IDXD_OP_FLAG_BOF;
 
 		tsk_node->tsk->dflags |= IDXD_OP_FLAG_RD_SRC2_AECS;
 
-		iaa_prep_scan(tsk_node->tsk);
+		iaa_prep_scan(tsk_node->tsk, chaining);
 		tsk_node = tsk_node->next;
 	}
 
diff --git a/test/iaa.h b/test/iaa.h
index ddbf1d9..574229d 100644
--- a/test/iaa.h
+++ b/test/iaa.h
@@ -20,7 +20,7 @@ int iaa_zdecompress32_multi_task_nodes(struct acctest_context *ctx);
 int iaa_compress_multi_task_nodes(struct acctest_context *ctx);
 int iaa_prehook_compress_multi_task_nodes(struct acctest_context *ctx);
 int iaa_decompress_multi_task_nodes(struct acctest_context *ctx);
-int iaa_scan_multi_task_nodes(struct acctest_context *ctx);
+int iaa_scan_multi_task_nodes(struct acctest_context *ctx, int chaining);
 int iaa_set_membership_multi_task_nodes(struct acctest_context *ctx);
 int iaa_extract_multi_task_nodes(struct acctest_context *ctx);
 int iaa_select_multi_task_nodes(struct acctest_context *ctx);
@@ -41,7 +41,7 @@ void iaa_prep_zcompress32(struct task *tsk);
 void iaa_prep_zdecompress32(struct task *tsk);
 void iaa_prep_compress(struct task *tsk);
 void iaa_prep_decompress(struct task *tsk);
-void iaa_prep_scan(struct task *tsk);
+void iaa_prep_scan(struct task *tsk, int chaining);
 void iaa_prep_set_membership(struct task *tsk);
 void iaa_prep_extract(struct task *tsk);
 void iaa_prep_select(struct task *tsk);
diff --git a/test/iaa_prep.c b/test/iaa_prep.c
index add8bf0..966ea68 100644
--- a/test/iaa_prep.c
+++ b/test/iaa_prep.c
@@ -136,7 +136,7 @@ void iaa_prep_decompress(struct task *tsk)
 	tsk->comp->status = 0;
 }
 
-void iaa_prep_scan(struct task *tsk)
+void iaa_prep_scan(struct task *tsk, int chaining)
 {
 	info("preparing descriptor for scan\n");
 
diff --git a/test/iaa_test.c b/test/iaa_test.c
index da76aef..3590cc3 100644
--- a/test/iaa_test.c
+++ b/test/iaa_test.c
@@ -28,6 +28,7 @@ static void usage(void)
 	"-d              ; wq device such as iax1/wq1.0\n"
 	"-n <number of descriptors> ;descriptor count to submit\n"
 	"-t <ms timeout> ; ms to wait for descs to complete\n"
+	"-c				 ; chain filter op with decompression\n"
 	"-v              ; verbose\n"
 	"-h              ; print this message\n");
 }
@@ -323,7 +324,8 @@ static int test_compress(struct acctest_context *ctx, size_t buf_size, int tflag
 }
 
 static int test_filter(struct acctest_context *ctx, size_t buf_size, int tflags,
-		       int extra_flags_2, int extra_flags_3, uint32_t opcode, int num_desc)
+		       int extra_flags_2, int extra_flags_3, uint32_t opcode, int num_desc,
+			   int chaining)
 {
 	struct task_node *tsk_node;
 	int rc = ACCTEST_STATUS_OK;
@@ -361,7 +363,7 @@ static int test_filter(struct acctest_context *ctx, size_t buf_size, int tflags,
 
 		switch (opcode) {
 		case IAX_OPCODE_SCAN:
-			rc = iaa_scan_multi_task_nodes(ctx);
+			rc = iaa_scan_multi_task_nodes(ctx, chaining);
 			if (rc != ACCTEST_STATUS_OK)
 				return rc;
 
@@ -595,8 +597,9 @@ int main(int argc, char *argv[])
 	int dev_id = ACCTEST_DEVICE_ID_NO_INPUT;
 	int dev_wq_id = ACCTEST_DEVICE_ID_NO_INPUT;
 	unsigned int num_desc = 1;
+	int chaining = 0;
 
-	while ((opt = getopt(argc, argv, "w:l:f:1:2:3:a:m:o:b:c:d:n:t:p:vh")) != -1) {
+	while ((opt = getopt(argc, argv, "w:l:f:1:2:3:a:m:o:b:d:n:t:p:vhc")) != -1) {
 		switch (opt) {
 		case 'w':
 			wq_type = atoi(optarg);
@@ -636,6 +639,9 @@ int main(int argc, char *argv[])
 		case 'n':
 			num_desc = strtoul(optarg, NULL, 0);
 			break;
+		case 'c':
+			chaining = 1;
+			break;
 		case 't':
 			ms_timeout = strtoul(optarg, NULL, 0);
 			break;
@@ -704,7 +710,7 @@ int main(int argc, char *argv[])
 	case IAX_OPCODE_FIND_UNIQUE:
 	case IAX_OPCODE_EXPAND:
 		rc = test_filter(iaa, buf_size, tflags, extra_flags_2,
-				 extra_flags_3, opcode, num_desc);
+				 extra_flags_3, opcode, num_desc, chaining);
 		if (rc != ACCTEST_STATUS_OK)
 			goto error;
 		break;
-- 
2.34.1