[Accel-config] [PATCH 7/8] add scan chain
"Guo, Lingyan" <[email protected]> Fri, 27 Oct 2023 11:06:54 +0800
| Newsgroups | dev.linux.lists.accel-config |
|---|---|
| Message-ID | <[email protected]> |
From: lingyan <[email protected]> change: enable decompress + scan chaining path Signed-off-by: lingyan <[email protected]> --- test/iaa.c | 20 +++++++++++++++++++- test/iaa_prep.c | 2 ++ test/iaa_test.c | 7 +++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/test/iaa.c b/test/iaa.c index a313906..09584ce 100644 --- a/test/iaa.c +++ b/test/iaa.c @@ -327,6 +327,13 @@ static int init_scan(struct task *tsk, int tflags, memcpy(tsk->src2, (void *)&iaa_filter_aecs, IAA_FILTER_AECS_SIZE); tsk->iaa_src2_xfer_size = IAA_FILTER_AECS_SIZE; + if (tsk->is_shadow_compress) { + tsk->shadown_src2 = aligned_alloc(32, IAA_COMPRESS_SRC2_SIZE); + if (!tsk->shadown_src2) + return -ENOMEM; + memset_pattern(tsk->shadown_src2, 0, IAA_COMPRESS_SRC2_SIZE); + } + tsk->dst1 = aligned_alloc(ADDR_ALIGNMENT, IAA_GENERAL_MAX_DEST_SIZE); if (!tsk->dst1) return -ENOMEM; @@ -1501,6 +1508,11 @@ int iaa_scan_multi_task_nodes(struct acctest_context *ctx, int chaining) int ret = ACCTEST_STATUS_OK; while (tsk_node) { + if (chaining) { + memcpy(tsk_node->tsk->src1, tsk_node->tsk->dst1, + tsk_node->tsk->comp->iax_output_size); + tsk_node->tsk->xfer_size = tsk_node->tsk->comp->iax_output_size; + } tsk_node->tsk->opcode = IAX_OPCODE_SCAN; tsk_node->tsk->dflags = (IDXD_OP_FLAG_CRAV | IDXD_OP_FLAG_RCR); @@ -1508,7 +1520,13 @@ int iaa_scan_multi_task_nodes(struct acctest_context *ctx, int chaining) tsk_node->tsk->dflags |= IDXD_OP_FLAG_BOF; tsk_node->tsk->dflags |= IDXD_OP_FLAG_RD_SRC2_AECS; - + if (chaining) { + tsk_node->tsk->iaa_decompr_flags = (IDXD_DECOMPRESS_FLAG_SELECT_EOB_BFINAL | + IDXD_DECOMPRESS_FLAG_CHECK_EOB | + IDXD_DECOMPRESS_FLAG_STOP_ON_EOB | + IDXD_DECOMPRESS_FLAG_FLUSH_OUTPUT | + IDXD_DECOMPRESS_FLAG_EN_DECOMPRESS); + } iaa_prep_scan(tsk_node->tsk, chaining); tsk_node = tsk_node->next; } diff --git a/test/iaa_prep.c b/test/iaa_prep.c index 966ea68..ca539dd 100644 --- a/test/iaa_prep.c +++ b/test/iaa_prep.c @@ -142,6 +142,8 @@ void iaa_prep_scan(struct task *tsk, int chaining) acctest_prep_desc_common(tsk->desc, tsk->opcode, (uint64_t)(tsk->dst1), (uint64_t)(tsk->src1), tsk->xfer_size, tsk->dflags); + if (chaining) + tsk->desc->iax_decompr_flags = tsk->iaa_decompr_flags; tsk->desc->completion_addr = (uint64_t)(tsk->comp); tsk->desc->iax_max_dst_size = tsk->iaa_max_dst_size; tsk->desc->iax_src2_addr = (uint64_t)(tsk->src2); diff --git a/test/iaa_test.c b/test/iaa_test.c index 3590cc3..a6cd0f6 100644 --- a/test/iaa_test.c +++ b/test/iaa_test.c @@ -351,6 +351,8 @@ static int test_filter(struct acctest_context *ctx, size_t buf_size, int tflags, /* allocate memory to src and dest buffers and fill in the desc for all the nodes*/ tsk_node = ctx->multi_task_node; while (tsk_node) { + if (chaining) + tsk_node->tsk->is_shadow_compress = 1; tsk_node->tsk->iaa_filter_flags = (uint32_t)extra_flags_2; tsk_node->tsk->iaa_num_inputs = (uint32_t)extra_flags_3; @@ -363,6 +365,11 @@ static int test_filter(struct acctest_context *ctx, size_t buf_size, int tflags, switch (opcode) { case IAX_OPCODE_SCAN: + if (chaining) { + rc = iaa_prehook_compress_multi_task_nodes(ctx); + if (rc != ACCTEST_STATUS_OK) + return rc; + } rc = iaa_scan_multi_task_nodes(ctx, chaining); if (rc != ACCTEST_STATUS_OK) return rc; -- 2.34.1