From patchwork Fri Jan 11 16:52:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kovacevic, Marko" X-Patchwork-Id: 49739 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0684C1B9F0; Fri, 11 Jan 2019 17:53:06 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 221D61B9AB for ; Fri, 11 Jan 2019 17:53:02 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jan 2019 08:53:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,466,1539673200"; d="scan'208";a="290817113" Received: from silpixa00399502.ir.intel.com (HELO silpixa00399502.ger.corp.intel.com) ([10.237.222.111]) by orsmga005.jf.intel.com with ESMTP; 11 Jan 2019 08:52:59 -0800 From: "Kovacevic, Marko" To: dev@dpdk.org Cc: akhil.goyal@nxp.com, pablo.de.lara.guarch@intel.com, "Kovacevic, Marko" , Kovacevic@dpdk.org Date: Fri, 11 Jan 2019 16:52:53 +0000 Message-Id: <20190111165253.14001-4-marko.kovacevic@intel.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20190111165253.14001-1-marko.kovacevic@intel.com> References: <20190111150900.11429-2-marko.kovacevic@intel.com> <20190111165253.14001-1-marko.kovacevic@intel.com> Subject: [dpdk-dev] [PATCH v4 3/3] test/compress: add varied buffer input/outputs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Added unit test to check if a SGL buffer was added as an input and a Linear Buffer as output and vice versa so we can test if the application would process the different buffers properly. Signed-off-by: Kovacevic, Marko Acked-by: Fiona Trahe Acked-by: Lee Daly Acked-by: Pablo de Lara --- v4: Added Acks resolved checkpatch issue V3: Merged test into sgl test to make it all into one --- test/test/test_compressdev.c | 124 ++++++++++++++++++++++++++++++------------- 1 file changed, 88 insertions(+), 36 deletions(-) diff --git a/test/test/test_compressdev.c b/test/test/test_compressdev.c index 1e41113..f4e7708 100644 --- a/test/test/test_compressdev.c +++ b/test/test/test_compressdev.c @@ -58,6 +58,13 @@ enum zlib_direction { ZLIB_ALL }; +enum varied_buff { + LB_BOTH = 0, /* both input and output are linear*/ + SGL_BOTH, /* both input and output are chained */ + SGL_TO_LB, /* input buffer is chained */ + LB_TO_SGL /* output buffer is chained */ +}; + struct priv_op_data { uint16_t orig_idx; }; @@ -81,7 +88,7 @@ struct interim_data_params { struct test_data_params { enum rte_comp_op_type state; - unsigned int sgl; + enum varied_buff buff_type; enum zlib_direction zlib_dir; unsigned int out_of_space; }; @@ -368,7 +375,7 @@ compress_zlib(struct rte_comp_op *op, } /* Assuming stateless operation */ - /* SGL */ + /* SGL Input */ if (op->m_src->nb_segs > 1) { single_src_buf = rte_malloc(NULL, rte_pktmbuf_pkt_len(op->m_src), 0); @@ -376,14 +383,10 @@ compress_zlib(struct rte_comp_op *op, RTE_LOG(ERR, USER1, "Buffer could not be allocated\n"); goto exit; } - single_dst_buf = rte_malloc(NULL, - rte_pktmbuf_pkt_len(op->m_dst), 0); - if (single_dst_buf == NULL) { - RTE_LOG(ERR, USER1, "Buffer could not be allocated\n"); - goto exit; - } - if (rte_pktmbuf_read(op->m_src, 0, - rte_pktmbuf_pkt_len(op->m_src), + + if (rte_pktmbuf_read(op->m_src, op->src.offset, + rte_pktmbuf_pkt_len(op->m_src) - + op->src.offset, single_src_buf) == NULL) { RTE_LOG(ERR, USER1, "Buffer could not be read entirely\n"); @@ -392,15 +395,32 @@ compress_zlib(struct rte_comp_op *op, stream.avail_in = op->src.length; stream.next_in = single_src_buf; - stream.avail_out = rte_pktmbuf_pkt_len(op->m_dst); - stream.next_out = single_dst_buf; } else { stream.avail_in = op->src.length; - stream.next_in = rte_pktmbuf_mtod(op->m_src, uint8_t *); + stream.next_in = rte_pktmbuf_mtod_offset(op->m_src, uint8_t *, + op->src.offset); + } + /* SGL output */ + if (op->m_dst->nb_segs > 1) { + + single_dst_buf = rte_malloc(NULL, + rte_pktmbuf_pkt_len(op->m_dst), 0); + if (single_dst_buf == NULL) { + RTE_LOG(ERR, USER1, + "Buffer could not be allocated\n"); + goto exit; + } + + stream.avail_out = op->m_dst->pkt_len; + stream.next_out = single_dst_buf; + + } else {/* linear output */ stream.avail_out = op->m_dst->data_len; - stream.next_out = rte_pktmbuf_mtod(op->m_dst, uint8_t *); + stream.next_out = rte_pktmbuf_mtod_offset(op->m_dst, uint8_t *, + op->dst.offset); } + /* Stateless operation, all buffer will be compressed in one go */ zlib_flush = map_zlib_flush_flag(op->flush_flag); ret = deflate(&stream, zlib_flush); @@ -414,14 +434,14 @@ compress_zlib(struct rte_comp_op *op, goto exit; /* Copy data to destination SGL */ - if (op->m_src->nb_segs > 1) { + if (op->m_dst->nb_segs > 1) { uint32_t remaining_data = stream.total_out; uint8_t *src_data = single_dst_buf; struct rte_mbuf *dst_buf = op->m_dst; while (remaining_data > 0) { - uint8_t *dst_data = rte_pktmbuf_mtod(dst_buf, - uint8_t *); + uint8_t *dst_data = rte_pktmbuf_mtod_offset(dst_buf, + uint8_t *, op->dst.offset); /* Last segment */ if (remaining_data < dst_buf->data_len) { memcpy(dst_data, src_data, remaining_data); @@ -438,12 +458,14 @@ compress_zlib(struct rte_comp_op *op, op->consumed = stream.total_in; if (xform->compress.chksum == RTE_COMP_CHECKSUM_ADLER32) { rte_pktmbuf_adj(op->m_dst, ZLIB_HEADER_SIZE); - op->produced = stream.total_out - - (ZLIB_HEADER_SIZE + ZLIB_TRAILER_SIZE); + rte_pktmbuf_trim(op->m_dst, ZLIB_TRAILER_SIZE); + op->produced = stream.total_out - (ZLIB_HEADER_SIZE + + ZLIB_TRAILER_SIZE); } else if (xform->compress.chksum == RTE_COMP_CHECKSUM_CRC32) { rte_pktmbuf_adj(op->m_dst, GZIP_HEADER_SIZE); - op->produced = stream.total_out - - (GZIP_HEADER_SIZE + GZIP_TRAILER_SIZE); + rte_pktmbuf_trim(op->m_dst, GZIP_TRAILER_SIZE); + op->produced = stream.total_out - (GZIP_HEADER_SIZE + + GZIP_TRAILER_SIZE); } else op->produced = stream.total_out; @@ -679,7 +701,7 @@ test_deflate_comp_decomp(const struct interim_data_params *int_data, struct rte_comp_xform **decompress_xforms = int_data->decompress_xforms; unsigned int num_xforms = int_data->num_xforms; enum rte_comp_op_type state = test_data->state; - unsigned int sgl = test_data->sgl; + unsigned int buff_type = test_data->buff_type; unsigned int out_of_space = test_data->out_of_space; enum zlib_direction zlib_dir = test_data->zlib_dir; int ret_status = -1; @@ -715,7 +737,7 @@ test_deflate_comp_decomp(const struct interim_data_params *int_data, memset(ops_processed, 0, sizeof(struct rte_comp_op *) * num_bufs); memset(priv_xforms, 0, sizeof(void *) * num_bufs); - if (sgl) + if (buff_type == SGL_BOTH) buf_pool = ts_params->small_mbuf_pool; else buf_pool = ts_params->large_mbuf_pool; @@ -730,7 +752,7 @@ test_deflate_comp_decomp(const struct interim_data_params *int_data, goto exit; } - if (sgl) { + if (buff_type == SGL_BOTH || buff_type == SGL_TO_LB) { for (i = 0; i < num_bufs; i++) { data_size = strlen(test_bufs[i]) + 1; if (prepare_sgl_bufs(test_bufs[i], uncomp_bufs[i], @@ -757,7 +779,7 @@ test_deflate_comp_decomp(const struct interim_data_params *int_data, goto exit; } - if (sgl) { + if (buff_type == SGL_BOTH || buff_type == LB_TO_SGL) { for (i = 0; i < num_bufs; i++) { if (out_of_space == 1 && oos_zlib_decompress) { data_size = OUT_OF_SPACE_BUF; @@ -982,7 +1004,7 @@ test_deflate_comp_decomp(const struct interim_data_params *int_data, goto exit; } - if (sgl) { + if (buff_type == SGL_BOTH || buff_type == LB_TO_SGL) { for (i = 0; i < num_bufs; i++) { priv_data = (struct priv_op_data *) (ops_processed[i] + 1); @@ -1293,7 +1315,7 @@ test_compressdev_deflate_stateless_fixed(void) struct test_data_params test_data = { RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS, 0 }; @@ -1363,7 +1385,7 @@ test_compressdev_deflate_stateless_dynamic(void) struct test_data_params test_data = { RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS, 0 }; @@ -1416,7 +1438,7 @@ test_compressdev_deflate_stateless_multi_op(void) struct test_data_params test_data = { RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS, 0 }; @@ -1465,7 +1487,7 @@ test_compressdev_deflate_stateless_multi_level(void) struct test_data_params test_data = { RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS, 0 }; @@ -1554,7 +1576,7 @@ test_compressdev_deflate_stateless_multi_xform(void) struct test_data_params test_data = { RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS, 0 }; @@ -1599,7 +1621,7 @@ test_compressdev_deflate_stateless_sgl(void) struct test_data_params test_data = { RTE_COMP_OP_STATELESS, - 1, + SGL_BOTH, ZLIB_DECOMPRESS, 0 }; @@ -1617,6 +1639,36 @@ test_compressdev_deflate_stateless_sgl(void) test_data.zlib_dir = ZLIB_COMPRESS; if (test_deflate_comp_decomp(&int_data, &test_data) < 0) return TEST_FAILED; + + if (capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_LB_OUT) { + /* Compress with compressdev, decompress with Zlib */ + test_data.zlib_dir = ZLIB_DECOMPRESS; + test_data.buff_type = SGL_TO_LB; + if (test_deflate_comp_decomp(&int_data, &test_data) < 0) + return TEST_FAILED; + + /* Compress with Zlib, decompress with compressdev */ + test_data.zlib_dir = ZLIB_COMPRESS; + test_data.buff_type = SGL_TO_LB; + if (test_deflate_comp_decomp(&int_data, &test_data) < 0) + return TEST_FAILED; + } + + if (capab->comp_feature_flags & RTE_COMP_FF_OOP_LB_IN_SGL_OUT) { + /* Compress with compressdev, decompress with Zlib */ + test_data.zlib_dir = ZLIB_DECOMPRESS; + test_data.buff_type = LB_TO_SGL; + if (test_deflate_comp_decomp(&int_data, &test_data) < 0) + return TEST_FAILED; + + /* Compress with Zlib, decompress with compressdev */ + test_data.zlib_dir = ZLIB_COMPRESS; + test_data.buff_type = LB_TO_SGL; + if (test_deflate_comp_decomp(&int_data, &test_data) < 0) + return TEST_FAILED; + } + + } return TEST_SUCCESS; @@ -1676,7 +1728,7 @@ test_compressdev_deflate_stateless_checksum(void) struct test_data_params test_data = { RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS, 0 }; @@ -1806,7 +1858,7 @@ test_compressdev_out_of_space_buffer(void) struct test_data_params test_data = { RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS, 1 }; @@ -1827,7 +1879,7 @@ test_compressdev_out_of_space_buffer(void) if (capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) { /* Compress with compressdev, decompress with Zlib */ test_data.zlib_dir = ZLIB_DECOMPRESS; - test_data.sgl = 1; + test_data.buff_type = SGL_BOTH; if (test_deflate_comp_decomp(&int_data, &test_data) < 0) { ret = TEST_FAILED; goto exit; @@ -1835,7 +1887,7 @@ test_compressdev_out_of_space_buffer(void) /* Compress with Zlib, decompress with compressdev */ test_data.zlib_dir = ZLIB_COMPRESS; - test_data.sgl = 1; + test_data.buff_type = SGL_BOTH; if (test_deflate_comp_decomp(&int_data, &test_data) < 0) { ret = TEST_FAILED; goto exit;