From patchwork Sun Apr 10 18:26:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raja Zidane X-Patchwork-Id: 109558 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3CA5CA04FD; Sun, 10 Apr 2022 20:26:44 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D12974068C; Sun, 10 Apr 2022 20:26:43 +0200 (CEST) Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam08on2086.outbound.protection.outlook.com [40.107.101.86]) by mails.dpdk.org (Postfix) with ESMTP id F2C5640685 for ; Sun, 10 Apr 2022 20:26:42 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fe0yZquZLUZC/GEF5D/SjP6/ZCpLtRJTjuNQTz3KFW41+I+IcnaPidNXVjWJZsTKfA4x7ZnGNwn5n5Iv+wrpdRSvnZnnkcOg5Zh/U4lxJiHn1q3TIEaZIrtW7R53/l4wq6es3TVZ9Jd9N2K474E5SL8rG27pS9LXmcZtF+EA2SCc0talkuBTnIZiCTMqvt45RnV1KqWOW1NdkycJryLt8RC+wz1TwtkG1d9ap0e5vpzawQ+FNDbSnYgYStk3WU7hAZZVvBUppa44eCFZgA6AENg9YMng6Or2di6oolfqGx35VxJDYXPuz8qRkqj/KnE3rs+gITNzEip/Vhv3Bj58Mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2MlTjjMIFWQANIiH/CHpZCSyGn7rTy77H76V9dIUL4c=; b=P7S5O1t317waSaOOVmUFLz1YWkzrbwFLHUuKTzR+js5nc0nlInjM61jqx9+tY5tbua/pnQjdnJlSSqbxHmg+EZtmwLg+PMq1/k6jnIqP+34hv8IvmRbj1+rC2ATHHkE0moywQdXrql16zQss6wb1givEy4NraHVKhQjxMBtKX2VXoe1Nc3xF1wORVll4eI9A88SD2tHPrInYPIiAfhjTVmHVWf71F+Y+2bfv5IbbvKdRVLM9lUHxCqRbPGICAYMdYnmeI5/+DN96PtBaSoJvM73aAI1I6yfcPXhfrJg8DLjg+2ByBniaZQzTAmkQaz/ny/U+RLkQZPpZwq4cz43eug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.236) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2MlTjjMIFWQANIiH/CHpZCSyGn7rTy77H76V9dIUL4c=; b=EyX8COo9yvKhJPqxqd6T/vlqnwEkZD1bYMLvSKz0GM3MAeTQ+E1uUZFvo/D4CtWBDFmpnDSuIf8aDbf+wQj+8TCLLiQsKedy+LS4VM2aC6Pr5qTMwvBJo3htuKNl61t6BqFiEOWEWkrDuumxCze3pwY8piUnlNL7KzwBEZpSYSDRS6IAVfrz4DwddCqW4E0MjM6qirsqZs3U7+T88WgOdKGnrM0iUmBuVXVn1y2o3/NMKVfo2axOzS9Tyt4057IQtpQ2VTIETEKGmv68MHYjU/I1GZ7qd8J9Q9Scc4CrP1SisRQOwVd27EZRzHW7rBt68faCFc8U9yR6l7Ki71lzsQ== Received: from DS7PR03CA0069.namprd03.prod.outlook.com (2603:10b6:5:3bb::14) by CH2PR12MB5514.namprd12.prod.outlook.com (2603:10b6:610:62::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.29; Sun, 10 Apr 2022 18:26:40 +0000 Received: from DM6NAM11FT055.eop-nam11.prod.protection.outlook.com (2603:10b6:5:3bb:cafe::96) by DS7PR03CA0069.outlook.office365.com (2603:10b6:5:3bb::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.26 via Frontend Transport; Sun, 10 Apr 2022 18:26:40 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.236) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.236 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.236; helo=mail.nvidia.com; Received: from mail.nvidia.com (12.22.5.236) by DM6NAM11FT055.mail.protection.outlook.com (10.13.173.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5144.20 via Frontend Transport; Sun, 10 Apr 2022 18:26:40 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by DRHQMAIL109.nvidia.com (10.27.9.19) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Sun, 10 Apr 2022 18:26:39 +0000 Received: from nvidia.com (10.126.230.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Sun, 10 Apr 2022 11:26:38 -0700 From: Raja Zidane To: CC: Subject: [RFC] compress/mlx5: add support for LZ4 decompress Date: Sun, 10 Apr 2022 21:26:22 +0300 Message-ID: <20220410182622.8828-1-rzidane@nvidia.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail203.nvidia.com (10.129.68.9) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 071283ff-3532-45f9-586d-08da1b1fa7f6 X-MS-TrafficTypeDiagnostic: CH2PR12MB5514:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0KihCFky6ex4rVhD9/JwxBJ/tZqQhtZnjnpd1IgUZ5zwS3E2yaBVFI2CinD7Th3k2SrbgtkicYYV5OvkMHHgmisFPGsIkAn3PXYzuko1PLYGKPjdEujSlUjEGSAxU4vgGWowBVvi3YvHaFNUR23s8lCM9tX2mkwkWVhXCzMtwOMbL467smfp35cepCrU/2atV73jc2SkomBGThbZUSi5PYlcWL0n96TI8fIKB8KveXCB6rLLSekNEpJ581f4g/cSHiLJq86P4Dx9etVaNwwhnayxdGaKJnyY3NystBv7q0OCTsP6eTbNSlQFMR4TDjqDQ4auVgWKKKPtlxlZeNk0AyVeufmQhRtT7GFVdrJomVWjYQogNyImDnDp3ptqbI5ZkIjEqyXd+q9va+gcQ47PJgLlAhV/OjwVVQyQDmx19EZxCR7Hhw3zTnuGh7lEe/yIOAyDbQe1Ro0pQRIhzl46QUwKGAZUcfQ2VrNCOh769JEjAifm+sMgRs59R/DcMC6JZtWWaBYfiPqnZqqO/8c5WfjB4dHtH/WYXopjJhy2PBxspCKS3YZBJT3ae5AG2jTyPT8IdskHfd8uspP174rJPc06hzzWu/LG9mJTVFrkG/dCPVVjmchACx93PyXSVbGgBimfZZj70VDMu09UpbCy/iRfMmTE5IJ3qUZkm01nUPqwNdV3s0oiD0ZyeyFyxCNVX2O5zdxU38+YCq29gdJlVkyDH+5qNXrhi/1AUhO3p9D+6XfsQbB/4fE4W24KtGM67n551V71PBzQefCpN1Hsig6oEPKCCeupjKl52UbGtKE= X-Forefront-Antispam-Report: CIP:12.22.5.236; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:mail.nvidia.com; PTR:InfoNoRecords; CAT:NONE; SFS:(13230001)(4636009)(40470700004)(46966006)(36840700001)(7696005)(316002)(47076005)(6666004)(82310400005)(426003)(336012)(2906002)(36756003)(5660300002)(86362001)(6286002)(83380400001)(16526019)(186003)(26005)(508600001)(107886003)(70206006)(70586007)(8676002)(966005)(1076003)(2616005)(40460700003)(4326008)(36860700001)(55016003)(6916009)(8936002)(356005)(81166007)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2022 18:26:40.1128 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 071283ff-3532-45f9-586d-08da1b1fa7f6 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[12.22.5.236]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DM6NAM11FT055.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB5514 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org LZ4 decompress will be supported starting from BlueField3. Add LZ4 params struct to RTE XFORM struct. Add case to check for LZ4 algo, and pass params from RTE XFORM. Signed-off-by: Raja Zidane --- drivers/common/mlx5/mlx5_prm.h | 6 +++++ drivers/compress/mlx5/mlx5_compress.c | 29 +++++++++++++++++++++++ lib/compressdev/rte_comp.h | 34 +++++++++++++++++++++++---- 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 2ded67e85e..b89bf922b8 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -548,9 +548,15 @@ struct mlx5_rdma_write_wqe { #define MLX5_OPC_MOD_MMO_DECOMP 0x3u #define MLX5_OPC_MOD_MMO_DMA 0x1u +#define WQE_GGA_DECOMP_DEFLATE 0x0u +#define WQE_GGA_DECOMP_SNAPPY 0x1u +#define WQE_GGA_DECOMP_LZ4 0x2u + #define WQE_GGA_COMP_WIN_SIZE_OFFSET 12u #define WQE_GGA_COMP_BLOCK_SIZE_OFFSET 16u #define WQE_GGA_COMP_DYNAMIC_SIZE_OFFSET 20u +#define WQE_GGA_DECOMP_PARAMS_OFFSET 20u +#define WQE_GGA_DECOMP_TYPE_OFFSET 8u #define MLX5_GGA_COMP_WIN_SIZE_UNITS 1024u #define MLX5_GGA_COMP_WIN_SIZE_MAX (32u * MLX5_GGA_COMP_WIN_SIZE_UNITS) #define MLX5_GGA_COMP_LOG_BLOCK_SIZE_MAX 15u diff --git a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c index 82b871bd86..4994e38ab6 100644 --- a/drivers/compress/mlx5/mlx5_compress.c +++ b/drivers/compress/mlx5/mlx5_compress.c @@ -298,6 +298,10 @@ mlx5_compress_xform_create(struct rte_compressdev *dev, DRV_LOG(ERR, "Not enough capabilities to support compress operation, maybe old FW/OFED version?"); return -ENOTSUP; } + if (xform->compress.algo == RTE_COMP_ALGO_LZ4) { + DRV_LOG(ERR, "LZ4 compression is not supported."); + return -ENOTSUP; + } if (xform->compress.level == RTE_COMP_LEVEL_NONE) { DRV_LOG(ERR, "Non-compressed block is not supported."); return -ENOTSUP; @@ -371,6 +375,31 @@ mlx5_compress_xform_create(struct rte_compressdev *dev, case RTE_COMP_ALGO_DEFLATE: xfrm->opcode += MLX5_OPC_MOD_MMO_DECOMP << WQE_CSEG_OPC_MOD_OFFSET; + xfrm->gga_ctrl1 += WQE_GGA_DECOMP_DEFLATE << + WQE_GGA_DECOMP_TYPE_OFFSET; + break; + case RTE_COMP_ALGO_LZ4: + xfrm->opcode += MLX5_OPC_MOD_MMO_DECOMP << + WQE_CSEG_OPC_MOD_OFFSET; + xfrm->gga_ctrl1 += WQE_GGA_DECOMP_LZ4 << + WQE_GGA_DECOMP_TYPE_OFFSET; + switch (xform->decompress.lz4.lz4) { + case RTE_COMP_LZ4_DATA_ONLY: + xfrm->gga_ctrl1 += 0u << + WQE_GGA_DECOMP_PARAMS_OFFSET; + break; + case RTE_COMP_LZ4_BLOCK_WITHOUT_CHECKSUM: + xfrm->gga_ctrl1 += 1u << + WQE_GGA_DECOMP_PARAMS_OFFSET; + break; + case RTE_COMP_LZ4_BLOCK_WITH_CHECKSUM: + xfrm->gga_ctrl1 += 2u << + WQE_GGA_DECOMP_PARAMS_OFFSET; + break; + default: + xfrm->gga_ctrl1 += 0u << + WQE_GGA_DECOMP_PARAMS_OFFSET; + } break; default: goto err; diff --git a/lib/compressdev/rte_comp.h b/lib/compressdev/rte_comp.h index 95306c5d03..2a0cd79873 100644 --- a/lib/compressdev/rte_comp.h +++ b/lib/compressdev/rte_comp.h @@ -109,6 +109,10 @@ enum rte_comp_algorithm { /**< LZS compression algorithm * https://tools.ietf.org/html/rfc2395 */ + RTE_COMP_ALGO_LZ4, + /**< LZ4 compression algorithm + * + */ RTE_COMP_ALGO_LIST_END }; @@ -162,6 +166,14 @@ enum rte_comp_huffman { /**< Use Dynamic Huffman codes */ }; +enum rte_comp_lz4 { + RTE_COMP_LZ4_DEFAULT, + /**< PMD may choose which LZ4 codes to use */ + RTE_COMP_LZ4_DATA_ONLY, + RTE_COMP_LZ4_BLOCK_WITHOUT_CHECKSUM, + RTE_COMP_LZ4_BLOCK_WITH_CHECKSUM, +}; + /** Compression flush flags */ enum rte_comp_flush_flag { RTE_COMP_FLUSH_NONE, @@ -215,6 +227,12 @@ struct rte_comp_deflate_params { /**< Compression huffman encoding type */ }; +/** Parameters specific to the lz4 algorithm */ +struct rte_comp_lz4_params { + enum rte_comp_lz4 lz4; + /**< Compression LZ4 encoding type */ +}; + /** Setup Data for compression */ struct rte_comp_compress_xform { enum rte_comp_algorithm algo; @@ -222,6 +240,8 @@ struct rte_comp_compress_xform { union { struct rte_comp_deflate_params deflate; /**< Parameters specific to the deflate algorithm */ + struct rte_comp_lz4_params lz4; + /**< Parameters specific to the lz4 algorithm */ }; /**< Algorithm specific parameters */ int level; /**< Compression level */ @@ -246,11 +266,15 @@ struct rte_comp_decompress_xform { /**< Algorithm to use for decompression */ enum rte_comp_checksum_type chksum; /**< Type of checksum to generate on the decompressed data */ - uint8_t window_size; - /**< Base two log value of sliding window which was used to generate - * compressed data. If window size can't be supported by the PMD then - * setup of stream or private_xform should fail. - */ + union { + uint8_t window_size; + /**< Base two log value of sliding window which was used to generate + * compressed data. If window size can't be supported by the PMD then + * setup of stream or private_xform should fail. + */ + struct rte_comp_lz4_params lz4; + /**< Parameters specific to the lz4 algorithm */ + }; enum rte_comp_hash_algorithm hash_algo; /**< Hash algorithm to be used with decompress operation. Hash is always * done on plaintext.