From patchwork Fri Sep 23 14:43:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suanming Mou X-Patchwork-Id: 116740 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 1B7ECA054A; Fri, 23 Sep 2022 16:44:20 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1644842BAE; Fri, 23 Sep 2022 16:44:10 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2080.outbound.protection.outlook.com [40.107.95.80]) by mails.dpdk.org (Postfix) with ESMTP id 3826A42BAE for ; Fri, 23 Sep 2022 16:44:08 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=itozDxARJWM3sTZmDtNX3In9PIt4fUhlLMLGfHSSGlMwlPBY38lF0eGAGLTSJQzLuvt9zDebpItcX5t6v427UoxrZsk8ioN3uEVFHU+D/3Qo9AyEbhvGfpCRT4KZw+rlbv90Y2XKBdfwXbYDGvxgRP6WVjskqMktp+6/tmO69c0R4AwKQbs43NVAUyqhHoW2r+g73PHp7yve2MuSYlQHH7QOnk+C/MFCv7hNyNx2EidaVtmVGaY0vCPdNPL9c0RsIXNnuRiIfh8eh2uCMLfDUwFvcYxQoCIWEHhiY7DmnOnp/UADBrDcym2AynAi2Cg5neQAbhMb0sN6kv21IRK7vA== 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=J86Chgs9ZP4tQD/60dJW+Q5cq1hjQNFs2GC2Inm/T94=; b=dsuOaA4pnXEJkp47nONSWKT5ir6qhmiLzGMrFqFtkNjCDihsyr2RSJLvMKv6KkcNqF0Pe5TdJvEA1f+5PJywhguJHg8qtTW3U9/GPKuNhHM5QIkJ3r7ZYlwI6ou5i0JW8TukbvOh7oiogv+PprLXMVVd1JCueBRkFktxiqpO5GvNjWPOshH2t5Q02tUDSBP3TfpTE5b5BHd+dlwxSNVyjXNZVwJyK7OoU/oplV/eIUv1tAM4PZvSzjfZr4Yv3qViWGKYYU1T77z/JAkSUXvgPmjvyV1C2f6spJK8JzjVuz6dbToeGpMbr43s4GImAmFpgI+kP7+2xhm2wJZ3iQ9YrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) 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=J86Chgs9ZP4tQD/60dJW+Q5cq1hjQNFs2GC2Inm/T94=; b=g/V/lJ91XQTb+B++TMS03SOFev3ek0uyu00XNpZpuXNrsUgJjn+siIqFcWC16TfnVzpME0kIDovHOpSZp8SpFqn2sAUu4mOKboZgdAEEonv4u76GcaeOotgQLY9A9+4EH4UYGQyQ/VS6i0ip4LvCl41fVOS/oeRVpbd5RWshkQk4H1NQG9mne7OmaqIRT6nqnwRQ2t6ceJIlza5EIeLUzQ/n1KJvQzYI8CZU7cnseuy85a3p6ogKu+vYYzmaQP7zdRJI0tPM5ntgH6ip0D2ZmFX8/qnHEeVBdlwDMi2Mk29YORkvPcTSl4WMA/KMLD1yszfN6m1e2jj8D6tUckS2SQ== Received: from BN7PR06CA0056.namprd06.prod.outlook.com (2603:10b6:408:34::33) by SA0PR12MB4367.namprd12.prod.outlook.com (2603:10b6:806:94::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20; Fri, 23 Sep 2022 14:44:06 +0000 Received: from BN8NAM11FT057.eop-nam11.prod.protection.outlook.com (2603:10b6:408:34:cafe::10) by BN7PR06CA0056.outlook.office365.com (2603:10b6:408:34::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20 via Frontend Transport; Fri, 23 Sep 2022 14:44:06 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BN8NAM11FT057.mail.protection.outlook.com (10.13.177.49) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14 via Frontend Transport; Fri, 23 Sep 2022 14:44:06 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Fri, 23 Sep 2022 07:43:51 -0700 Received: from nvidia.com (10.126.231.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.29; Fri, 23 Sep 2022 07:43:49 -0700 From: Suanming Mou To: Matan Azrad , Viacheslav Ovsiienko CC: Subject: [PATCH 02/27] net/mlx5: fix IPv6 and TCP RSS hash fields Date: Fri, 23 Sep 2022 17:43:09 +0300 Message-ID: <20220923144334.27736-3-suanmingm@nvidia.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20220923144334.27736-1-suanmingm@nvidia.com> References: <20220923144334.27736-1-suanmingm@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM11FT057:EE_|SA0PR12MB4367:EE_ X-MS-Office365-Filtering-Correlation-Id: d7771aad-255c-49cb-bdcb-08da9d72110a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: v8WxwUZ+UfC9kkx3j1+Bet7TW4XDnSOpePBxqmcknY3GsuRwWdjRFVRsxKXPKfgt8toq9MleiKypbDP7I/ybGMNioyalwpIntf3JaxlgMKNMsTxBcfqLMwmILuJWIncjpNZuzITShi+AfJ6AwgpxRCcDYTyUf2xSOIs4BbOXhRNIk+KPPBTA0W2SC+HlJjpAPzcsgiepXGeUCT4JzaVKXXVK4wnkNah3rJiI4kVVGb1LLpyDSTESvCvFs+LtSlZLPnTi6tSDGsSFx+AZZTq6IWnzzRxUbu2jDvqELoJOo/MWMpcFxnaVBtlvtSlKzogkteWrjPuvKzWxDHWS390xbAoHJXX/83gfGWGr8UcPSIRgs20MiJ4kDocHonG4jGPqEkTYCf6GEulY8DjawkNPxvIf3Xp5vY/524DzjLefJ4/KBRCEzPhS73aHKvV0l5u9fsRV2+uq8vqyA0+8y9Bcys/1ZSkgR8I4C4zjliQbLpdGPiNx/p/3hSaeI8x6d7KHAdi56pcYWdFk21bVnLptwSKCyJxGeDRkEAJsz6WCj4RJTg94OvzkMjtWJejshzFn95kGr70rxD659nFJHsnc6W3dw3EfW/O6sN0D93BCTfM6rY1JxrEl204leeVbUpvuRX2jWH8fBZGmFG0xUz4DjIt36DHPxd26FLhspFY244R7UXb4hE/j0EfcuTXpe+VUhGWLx2s7EZUORipMpIXpooupgnTdGSxJO69rqD0HGntapAdloTfqJmKekJumCFsfAb/NSCzKml7YOeFEZ6Y5Tg== X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230022)(4636009)(346002)(396003)(136003)(39860400002)(376002)(451199015)(36840700001)(46966006)(40470700004)(2906002)(82310400005)(70586007)(8676002)(4326008)(5660300002)(70206006)(8936002)(41300700001)(6636002)(186003)(478600001)(36860700001)(40460700003)(2616005)(356005)(7696005)(1076003)(6666004)(110136005)(316002)(36756003)(6286002)(26005)(83380400001)(16526019)(86362001)(47076005)(82740400003)(55016003)(40480700001)(7636003)(336012)(426003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2022 14:44:06.2064 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d7771aad-255c-49cb-bdcb-08da9d72110a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT057.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4367 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 In the flow_dv_hashfields_set() function, while item_flags was 0, the code went directly to the first if and the else case would never have chance be checked. This caused the IPv6 and TCP hash fileds in the else case would never be set. This commit adds the dedicate HW steering hash field set function to generate the RSS hash fields. Fixes: 6540da0b93b5 ("net/mlx5: fix RSS scaling issue") Signed-off-by: Suanming Mou --- drivers/net/mlx5/mlx5_flow_dv.c | 12 +++---- drivers/net/mlx5/mlx5_flow_hw.c | 59 ++++++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 885b4c5588..3e5e6781bf 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -11302,8 +11302,7 @@ flow_dv_hashfields_set(uint64_t item_flags, rss_inner = 1; #endif if ((rss_inner && (items & MLX5_FLOW_LAYER_INNER_L3_IPV4)) || - (!rss_inner && (items & MLX5_FLOW_LAYER_OUTER_L3_IPV4)) || - !items) { + (!rss_inner && (items & MLX5_FLOW_LAYER_OUTER_L3_IPV4))) { if (rss_types & MLX5_IPV4_LAYER_TYPES) { if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY) fields |= IBV_RX_HASH_SRC_IPV4; @@ -11313,8 +11312,7 @@ flow_dv_hashfields_set(uint64_t item_flags, fields |= MLX5_IPV4_IBV_RX_HASH; } } else if ((rss_inner && (items & MLX5_FLOW_LAYER_INNER_L3_IPV6)) || - (!rss_inner && (items & MLX5_FLOW_LAYER_OUTER_L3_IPV6)) || - !items) { + (!rss_inner && (items & MLX5_FLOW_LAYER_OUTER_L3_IPV6))) { if (rss_types & MLX5_IPV6_LAYER_TYPES) { if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY) fields |= IBV_RX_HASH_SRC_IPV6; @@ -11337,8 +11335,7 @@ flow_dv_hashfields_set(uint64_t item_flags, return; } if ((rss_inner && (items & MLX5_FLOW_LAYER_INNER_L4_UDP)) || - (!rss_inner && (items & MLX5_FLOW_LAYER_OUTER_L4_UDP)) || - !items) { + (!rss_inner && (items & MLX5_FLOW_LAYER_OUTER_L4_UDP))) { if (rss_types & RTE_ETH_RSS_UDP) { if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY) fields |= IBV_RX_HASH_SRC_PORT_UDP; @@ -11348,8 +11345,7 @@ flow_dv_hashfields_set(uint64_t item_flags, fields |= MLX5_UDP_IBV_RX_HASH; } } else if ((rss_inner && (items & MLX5_FLOW_LAYER_INNER_L4_TCP)) || - (!rss_inner && (items & MLX5_FLOW_LAYER_OUTER_L4_TCP)) || - !items) { + (!rss_inner && (items & MLX5_FLOW_LAYER_OUTER_L4_TCP))) { if (rss_types & RTE_ETH_RSS_TCP) { if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY) fields |= IBV_RX_HASH_SRC_PORT_TCP; diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 7343d59f1f..46c4169b4f 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -62,6 +62,63 @@ flow_hw_rxq_flag_set(struct rte_eth_dev *dev, bool enable) priv->mark_enabled = enable; } +/** + * Set the hash fields according to the @p rss_desc information. + * + * @param[in] rss_desc + * Pointer to the mlx5_flow_rss_desc. + * @param[out] hash_fields + * Pointer to the RSS hash fields. + */ +static void +flow_hw_hashfields_set(struct mlx5_flow_rss_desc *rss_desc, + uint64_t *hash_fields) +{ + uint64_t fields = 0; + int rss_inner = 0; + uint64_t rss_types = rte_eth_rss_hf_refine(rss_desc->types); + +#ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT + if (rss_desc->level >= 2) + rss_inner = 1; +#endif + if (rss_types & MLX5_IPV4_LAYER_TYPES) { + if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY) + fields |= IBV_RX_HASH_SRC_IPV4; + else if (rss_types & RTE_ETH_RSS_L3_DST_ONLY) + fields |= IBV_RX_HASH_DST_IPV4; + else + fields |= MLX5_IPV4_IBV_RX_HASH; + } else if (rss_types & MLX5_IPV6_LAYER_TYPES) { + if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY) + fields |= IBV_RX_HASH_SRC_IPV6; + else if (rss_types & RTE_ETH_RSS_L3_DST_ONLY) + fields |= IBV_RX_HASH_DST_IPV6; + else + fields |= MLX5_IPV6_IBV_RX_HASH; + } + if (rss_types & RTE_ETH_RSS_UDP) { + if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY) + fields |= IBV_RX_HASH_SRC_PORT_UDP; + else if (rss_types & RTE_ETH_RSS_L4_DST_ONLY) + fields |= IBV_RX_HASH_DST_PORT_UDP; + else + fields |= MLX5_UDP_IBV_RX_HASH; + } else if (rss_types & RTE_ETH_RSS_TCP) { + if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY) + fields |= IBV_RX_HASH_SRC_PORT_TCP; + else if (rss_types & RTE_ETH_RSS_L4_DST_ONLY) + fields |= IBV_RX_HASH_DST_PORT_TCP; + else + fields |= MLX5_TCP_IBV_RX_HASH; + } + if (rss_types & RTE_ETH_RSS_ESP) + fields |= IBV_RX_HASH_IPSEC_SPI; + if (rss_inner) + fields |= IBV_RX_HASH_INNER; + *hash_fields = fields; +} + /** * Generate the pattern item flags. * Will be used for shared RSS action. @@ -225,7 +282,7 @@ flow_hw_tir_action_register(struct rte_eth_dev *dev, MLX5_RSS_HASH_KEY_LEN); rss_desc.key_len = MLX5_RSS_HASH_KEY_LEN; rss_desc.types = !rss->types ? RTE_ETH_RSS_IP : rss->types; - flow_dv_hashfields_set(0, &rss_desc, &rss_desc.hash_fields); + flow_hw_hashfields_set(&rss_desc, &rss_desc.hash_fields); flow_dv_action_rss_l34_hash_adjust(rss->types, &rss_desc.hash_fields); if (rss->level > 1) {