From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F0FFFA0C57 for ; Tue, 30 Nov 2021 13:17:40 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E4B93410F7; Tue, 30 Nov 2021 13:17:40 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2052.outbound.protection.outlook.com [40.107.237.52]) by mails.dpdk.org (Postfix) with ESMTP id C3D0E410F7 for ; Tue, 30 Nov 2021 13:17:39 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g1WSCk0VysZEvMdI13lJwX5GPDInI8+6i7Pgbiw8atnhF/mSBxEUjlI/c07YMeDXRgXmAHSuqSKU+CLvjNzMTDfkrRX2bAWwHlRtyvUBSTuF+LeZyXaEUKdxMa82cNv5w6s1hLHEEPghBSeHLoXpSPwDOp3eew1gyYGd2z0uQBGWS7UhEHXnzJ42oNvyYOXdHnk9s1BLev/SqlxME/EY3CP/KQmOCR5o/i2/wfHm+tTH/Zdgnx6YzkUzXgbW+9rvZDNRkOLWdEB/8k3plKReoB9QwATkKhK47QVtNA7Y3NXYUmzS3m8zJqlaL9PV81XjWaC1t1q9DCsew4myRUuM5w== 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=ieH2NZQTmQGmcUfmHBMp4ld4lyK20exvois9gHi2ogo=; b=M3sLVpRvT0MRCXsBmYMnRSpZuz7hj4JEfy/n1d5U4JMVQ7huwZBCaE3PPjk+JP0y3yT3HKMBuFgoyDe2OXYMY3xXLa1zzyVZLHLUgA2irOZYtW2xcan8vzXrDDm5afAbVPZLwp6h98jJtTSQZHQyhMd5mEicFgiBWRl7PbWsaVPWlxGmIdsn0es55sKiTmK3cxnfSYWPTo3sUdAhj2ZBg9rqtnedkfFyVf9TJp1QpWS8mDs10uX7w3xGv/VNiHNpnfghMHpxQo/IIak58DjyxpswyxjzJe6CnO8pwjAPktJaJNpBp92/NEppZAfhOeAOO+T6WXs+PPmQBV0+AP3n5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=quarantine 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=ieH2NZQTmQGmcUfmHBMp4ld4lyK20exvois9gHi2ogo=; b=Vz3sEpOPZ0nVSWlBe1keQe1Ggl3sjmmWAvvb1qE2Vi6uujG/DrhQA1YNu3YncQijECsnN59iIcKpIq9HiQ53DdvmaSxpq0JmhyJHVk5z18kEQBS3ECGQkdNxLXHEE4GV+hEhFSREQo4CVkX8J9P6jBC0TG6LwA5fcsdGPCiFMxgxKO1a5fEA2Y7pq9zQp4slXZAQB+T/j5rYHFQ5Hm7qbZvJS5NdsPwGY1Hq7fXA3e+bIDG5FkC5nSZFZPqRf1d1ZqBTI+VZ+XU77rKI0fEpum5NRGwmkzTap3zhXj7P/s4BXUGzRN6BEU7Jl9cyjKKamSKLxH+iRl/3ZJhGDNgdjQ== Received: from MW4PR04CA0180.namprd04.prod.outlook.com (2603:10b6:303:85::35) by DM5PR1201MB0266.namprd12.prod.outlook.com (2603:10b6:4:57::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.23; Tue, 30 Nov 2021 12:17:38 +0000 Received: from CO1NAM11FT026.eop-nam11.prod.protection.outlook.com (2603:10b6:303:85:cafe::58) by MW4PR04CA0180.outlook.office365.com (2603:10b6:303:85::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.11 via Frontend Transport; Tue, 30 Nov 2021 12:17:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) 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.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT026.mail.protection.outlook.com (10.13.175.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4734.22 via Frontend Transport; Tue, 30 Nov 2021 12:17:36 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Tue, 30 Nov 2021 12:17:35 +0000 Received: from nvidia.com (172.20.187.6) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.986.5; Tue, 30 Nov 2021 04:17:34 -0800 From: Lior Margalit To: Matan Azrad CC: Lior Margalit , Subject: [PATCH 20.11 2/5] net/mlx5: fix RSS expansion for explicit graph node Date: Tue, 30 Nov 2021 14:17:11 +0200 Message-ID: <20211130121714.4170879-2-lmargalit@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211130121714.4170879-1-lmargalit@nvidia.com> References: <20211130121714.4170879-1-lmargalit@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 56af2eea-2d35-4d13-b09b-08d9b3fb6563 X-MS-TrafficTypeDiagnostic: DM5PR1201MB0266: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:245; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LQ1RWxWBo6chSIu6elvJP+4wGhnP/9Ps+KUa2mzsGanj/SkKOlaqd353MU0960c8LvrIE6SooZsGFMjN5ks9xVwhy39XLrLW8/wgxZcr7h3bzYwsGS2+kbfvENdKyrEVKW6BwX/AR1gnfLG1jxGHcxw16Zy7exomu8uNyzUPMhwWCqcoNze1D9vr1IDjTsaFlOo96jPnY39pL0f1k955VAHFU5xIQg+LRow2PJZUW6Rs/EdLYMBslMoW1o6UB4lER66J+EP4L1nEOQr3LnRkq3bHtCV+ApdUVYPd7+fTPakVVr5wlTxhUmSlkL5P52E/YggGPA2B+6MJM1GHdlzJ6Cn1dWGPtIrXCAL2Y2WgGTtK2IVRotX/O31Z7zY0nOT4lBU6z2IxGpLo9vmm9b6r8VIbaCpFJ3WSjVAFpATZFm7S/x9jsK2r8FV9krqYNml8RIvUiKc1Vt5lnoGwN2/HucHSXl2XTru2IS5gTLkoOOtAJ8BEqbT3fz1AUNuSX5A/MYX9UlgBrsETV34xtYMYVRR7JEmYOyUQebCrsMmCFwPgUZOZtHNVYVzIWOzh9cgXH8dQmO93k5jOUjrdGL6qyGmo9xp76JCFkJXQqXKlnh7gk6jjFyJU1q3DTcSS6LWgzjdtJeD8hmFLM/v+L2d0W3kiwIAWgbpDZfPhkxXkrI/S5daiAR7b+GpfLu20pRNuOuz8EHwfjxBj4PtHwKsil2aDcHTrP1iVL8YM+CemfXKf9IPETzIVZeHKK4604B8U0knVDSz9wve0vrORWGxMGw== X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(40470700001)(5660300002)(6286002)(1076003)(55016003)(6666004)(356005)(40460700001)(37006003)(70206006)(70586007)(82310400004)(83380400001)(86362001)(316002)(8936002)(6636002)(54906003)(6862004)(2906002)(47076005)(508600001)(7696005)(36756003)(2616005)(26005)(8676002)(4326008)(186003)(336012)(36860700001)(16526019)(426003)(7636003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2021 12:17:36.7621 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 56af2eea-2d35-4d13-b09b-08d9b3fb6563 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT026.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0266 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org [ upstream commit 69d268b4fff3791c3fea772a43abca1660982005 ] The RSS expansion algorithm is using a graph to find the possible expansion paths. A graph node with the 'explicit' flag will be skipped, if it is not found in the flow pattern. The current implementation misses the case where the node with the explicit flag is in the middle of the expanded path. For example: testpmd> flow create 0 ingress pattern eth / ipv6 / udp / vxlan / end actions rss level 2 types tcp end / end The VLAN node has the explicit flag, so it is currently included in the expanded flow: ETH IPV6 UDP VXLAN END ETH IPV6 UDP VXLAN ETH VLAN IPV4 TCP END ETH IPV6 UDP VXLAN ETH VLAN IPV6 TCP END The fix is to skip the nodes with the explicit flag while iterating over the possible expansion paths. Using the above example, the flows will be: ETH IPV6 UDP VXLAN END ETH IPV6 UDP VXLAN ETH IPV4 TCP END ETH IPV6 UDP VXLAN ETH IPV6 TCP END Fixes: 3f02c7ff6815 ("net/mlx5: fix RSS expansion for inner tunnel VLAN") Cc: stable@dpdk.org Signed-off-by: Lior Margalit Acked-by: Matan Azrad --- drivers/net/mlx5/mlx5_flow.c | 44 ++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 2b916899e8..cacccd6cc8 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -282,6 +282,26 @@ mlx5_flow_expand_rss_item_complete(const struct rte_flow_item *item) return ret; } +static const int * +mlx5_flow_expand_rss_skip_explicit(const struct mlx5_flow_expand_node graph[], + const int *next_node) +{ + const struct mlx5_flow_expand_node *node = NULL; + const int *next = next_node; + + while (next && *next) { + /* + * Skip the nodes with the MLX5_EXPANSION_NODE_EXPLICIT + * flag set, because they were not found in the flow pattern. + */ + node = &graph[*next]; + if (!(node->node_flags & MLX5_EXPANSION_NODE_EXPLICIT)) + break; + next = node->next; + } + return next; +} + #define MLX5_RSS_EXP_ELT_N 16 /** @@ -414,17 +434,8 @@ mlx5_flow_expand_rss(struct mlx5_flow_expand_rss *buf, size_t size, } } memset(flow_items, 0, sizeof(flow_items)); - next_node = node->next; - while (next_node) { - /* - * Skip the nodes with the MLX5_EXPANSION_NODE_EXPLICIT - * flag set, because they were not found in the flow pattern. - */ - node = &graph[*next_node]; - if (!(node->node_flags & MLX5_EXPANSION_NODE_EXPLICIT)) - break; - next_node = node->next; - } + next_node = mlx5_flow_expand_rss_skip_explicit(graph, + node->next); stack[stack_pos] = next_node; node = next_node ? &graph[*next_node] : NULL; while (node) { @@ -461,7 +472,8 @@ mlx5_flow_expand_rss(struct mlx5_flow_expand_rss *buf, size_t size, /* Go deeper. */ if (!(node->node_flags & MLX5_EXPANSION_NODE_OPTIONAL) && node->next) { - next_node = node->next; + next_node = mlx5_flow_expand_rss_skip_explicit(graph, + node->next); if (stack_pos++ == MLX5_RSS_EXP_ELT_N) { rte_errno = E2BIG; return -rte_errno; @@ -469,15 +481,17 @@ mlx5_flow_expand_rss(struct mlx5_flow_expand_rss *buf, size_t size, stack[stack_pos] = next_node; } else if (*(next_node + 1)) { /* Follow up with the next possibility. */ - ++next_node; + next_node = mlx5_flow_expand_rss_skip_explicit(graph, + ++next_node); } else { /* Move to the next path. */ if (stack_pos) next_node = stack[--stack_pos]; - next_node++; + next_node = mlx5_flow_expand_rss_skip_explicit(graph, + ++next_node); stack[stack_pos] = next_node; } - node = *next_node ? &graph[*next_node] : NULL; + node = next_node && *next_node ? &graph[*next_node] : NULL; }; return lsize; } -- 2.25.1