From patchwork Fri Dec 14 15:33:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kovacevic, Marko" X-Patchwork-Id: 48885 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 37D521B994; Fri, 14 Dec 2018 16:33:37 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 228161B87F for ; Fri, 14 Dec 2018 16:33:33 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Dec 2018 07:33:32 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,353,1539673200"; d="scan'208";a="125968588" Received: from silpixa00399502.ir.intel.com (HELO silpixa00399502.ger.corp.intel.com) ([10.237.222.111]) by fmsmga002.fm.intel.com with ESMTP; 14 Dec 2018 07:33:30 -0800 From: Marko Kovacevic To: dev@dpdk.org Cc: akhil.goyal@nxp.com, lee.daly@intel.com, tomaszx.jozwiak@intel.com, cathal.ohare@intel.com, fiona.trahe@intel.com, Marko Kovacevic Date: Fri, 14 Dec 2018 15:33:26 +0000 Message-Id: <20181214153326.17356-2-marko.kovacevic@intel.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20181214153326.17356-1-marko.kovacevic@intel.com> References: <20181214153326.17356-1-marko.kovacevic@intel.com> Subject: [dpdk-dev] [PATCH v1 2/2] 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: Marko Kovacevic Acked-by: Lee Daly --- test/test/test_compressdev.c | 185 +++++++++++++++++++++++++++++++------------ 1 file changed, 134 insertions(+), 51 deletions(-) diff --git a/test/test/test_compressdev.c b/test/test/test_compressdev.c index 63b1ba9..1fa9824 100644 --- a/test/test/test_compressdev.c +++ b/test/test/test_compressdev.c @@ -71,6 +71,13 @@ struct comp_testsuite_params { struct rte_comp_xform *def_decomp_xform; }; +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 */ +}; + static struct comp_testsuite_params testsuite_params = { 0 }; static void @@ -346,7 +353,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); @@ -354,14 +361,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"); @@ -370,15 +373,31 @@ 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); @@ -392,14 +411,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); @@ -655,7 +674,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], struct rte_comp_xform *decompress_xforms[], unsigned int num_xforms, enum rte_comp_op_type state, - unsigned int sgl, + enum varied_buff buff_type, enum zlib_direction zlib_dir) { struct comp_testsuite_params *ts_params = &testsuite_params; @@ -686,7 +705,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], 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; @@ -701,7 +720,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], 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], @@ -728,7 +747,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], goto exit; } - if (sgl) { + if (buff_type == SGL_BOTH || buff_type == LB_TO_SGL) { for (i = 0; i < num_bufs; i++) { out_of_space ? data_size = OUT_OF_SPACE_BUF : (data_size = strlen(test_bufs[i]) * @@ -931,7 +950,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], 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); @@ -1220,7 +1239,7 @@ test_compressdev_deflate_stateless_fixed(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1233,7 +1252,7 @@ test_compressdev_deflate_stateless_fixed(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1286,7 +1305,7 @@ test_compressdev_deflate_stateless_dynamic(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1299,7 +1318,7 @@ test_compressdev_deflate_stateless_dynamic(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1331,7 +1350,7 @@ test_compressdev_deflate_stateless_multi_op(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) return TEST_FAILED; @@ -1342,7 +1361,7 @@ test_compressdev_deflate_stateless_multi_op(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) return TEST_FAILED; @@ -1382,7 +1401,7 @@ test_compressdev_deflate_stateless_multi_level(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1453,7 +1472,7 @@ test_compressdev_deflate_stateless_multi_xform(void) decompress_xforms, NUM_XFORMS, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1492,8 +1511,8 @@ test_compressdev_deflate_stateless_sgl(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 1, - ZLIB_DECOMPRESS) < 0) + SGL_BOTH, + ZLIB_COMPRESS) < 0) return TEST_FAILED; /* Compress with Zlib, decompress with compressdev */ @@ -1503,13 +1522,12 @@ test_compressdev_deflate_stateless_sgl(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 1, - ZLIB_COMPRESS) < 0) + SGL_BOTH, + ZLIB_DECOMPRESS) < 0) return TEST_FAILED; } return TEST_SUCCESS; - } static int @@ -1571,7 +1589,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1586,7 +1604,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_NONE) < 0) { ret = TEST_FAILED; goto exit; @@ -1611,7 +1629,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1625,7 +1643,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_NONE) < 0) { ret = TEST_FAILED; goto exit; @@ -1652,7 +1670,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_NONE) < 0) { ret = TEST_FAILED; goto exit; @@ -1705,9 +1723,8 @@ test_compressdev_out_of_space_buffer(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 1, - ZLIB_DECOMPRESS, - 0) == 0) { + LB_BOTH, + ZLIB_DECOMPRESS) == 0) { ret = TEST_FAILED; goto exit; @@ -1720,9 +1737,8 @@ test_compressdev_out_of_space_buffer(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, - ZLIB_COMPRESS, - 0) == 0) { + LB_BOTH, + ZLIB_COMPRESS) == 0) { ret = TEST_FAILED; goto exit; } @@ -1735,9 +1751,8 @@ test_compressdev_out_of_space_buffer(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, - ZLIB_DECOMPRESS, - 0) == 0) { + SGL_BOTH, + ZLIB_DECOMPRESS) == 0) { ret = TEST_FAILED; goto exit; @@ -1750,9 +1765,8 @@ test_compressdev_out_of_space_buffer(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, - ZLIB_COMPRESS, - 0) == 0) { + SGL_BOTH, + ZLIB_COMPRESS) == 0) { ret = TEST_FAILED; goto exit; } @@ -1765,6 +1779,72 @@ test_compressdev_out_of_space_buffer(void) return ret; } +static int +test_compressdev_deflate_stateless_varied_buf(void) +{ + struct comp_testsuite_params *ts_params = &testsuite_params; + uint16_t i; + const char *test_buffer; + const struct rte_compressdev_capabilities *capab; + + capab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE); + TEST_ASSERT(capab != NULL, "Failed to retrieve device capabilities"); + + for (i = 0; i < RTE_DIM(compress_test_bufs); i++) { + test_buffer = compress_test_bufs[0]; + + if (capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_LB_OUT) { + /* Compress with compressdev, decompress with Zlib*/ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + SGL_TO_LB, + ZLIB_DECOMPRESS) < 0) + return TEST_FAILED; + + /* Compress with Zlib, decompress with compressdev*/ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + SGL_TO_LB, + ZLIB_COMPRESS) < 0) + return TEST_FAILED; + } + + if (capab->comp_feature_flags & RTE_COMP_FF_OOP_LB_IN_SGL_OUT) { + /* Compress with compressdev, decompress with Zlib*/ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + LB_TO_SGL, + ZLIB_DECOMPRESS) < 0) + return TEST_FAILED; + + /* Compress with Zlib, decompress with compressdev*/ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + LB_TO_SGL, + ZLIB_COMPRESS) < 0) + return TEST_FAILED; + } + } + + return TEST_SUCCESS; +} + static struct unit_test_suite compressdev_testsuite = { .suite_name = "compressdev unit test suite", .setup = testsuite_setup, @@ -1788,6 +1868,9 @@ static struct unit_test_suite compressdev_testsuite = { test_compressdev_deflate_stateless_checksum), TEST_CASE_ST(generic_ut_setup, generic_ut_teardown, test_compressdev_out_of_space_buffer), + TEST_CASE_ST(generic_ut_setup, generic_ut_teardown, + test_compressdev_deflate_stateless_varied_buf), + TEST_CASES_END() /**< NULL terminate unit test array */ } };