Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp1658217pxy; Mon, 2 Aug 2021 07:14:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwf6ZaIa7cSpE/Q+It9IZjxxUcOSOfLeO4HwLF+CPdKtDjOWtIfLln+/nUmKeAN4c7juZ/v X-Received: by 2002:a05:6e02:1d95:: with SMTP id h21mr205968ila.23.1627913665990; Mon, 02 Aug 2021 07:14:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627913665; cv=none; d=google.com; s=arc-20160816; b=Kv0+ETSpRMKGeMLocp8xfoQPxnE7loWJnPhu1aIrdJrkB/Fmet07gSx1Cw/sg594PC Y6W1HEGKcIeCfFhju95nWuyNhp7ZJoI4wp0qDcaplAv0LT/hbRrNbaM90TjYlofJ2PaQ 7zABvLN313dJDC09oBXCXb0f5lwqK8LUxymQjYuaSs2fxFbN2xoALZBU/+8zZgqAULNa RNAKiITfjyQvpk02bcqHixRpU6OXxD3VZjSH2BRSLgz02L/zZ5XQxNtx66EFrtD5VgkO KVIBLpucMBNkpaCvLNFMF8Z01d+gXzCAiScJqn1fwMdd+Hk4jH85zdEn5AxF5BhORgp8 4u+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=o1B4fhexWMZBMxBGbM/x5voSBxDOVipp9BeizK1KzLQ=; b=ByUvsQ4Et5ukpvO8wrqX8HWhI/XqFvC+sjAjUlgq/dq4+J9WIhpczondXIZlKo650I NNiLqpDfn3C6AhHjaceQ+Mfs/30CF1UfLHU4Eraujn5eUw5gHsMEZf9WtE+PKD49no3c Wb51ZwIDPXHmt0a1Z329ZOGyJSGUt84R07bOt0ibhcJk0dV4x29ICkZpYo0aPYlNUQ0p IXkBT3sdqsghhNbNom8hTuDc+dfFyif+lVP1MhpajPqQ8Eq/wMuNsqC7cH716e23TI9r UdIpect9BJ5A909a2Cci5zMiqIOccaGY1IKx2WR/8G8PxfR3sq3+xlCBonhxDsV74494 2BRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=fl5AC6Hl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f6si11528432iog.24.2021.08.02.07.14.14; Mon, 02 Aug 2021 07:14:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=fl5AC6Hl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236761AbhHBONd (ORCPT + 99 others); Mon, 2 Aug 2021 10:13:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:47244 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236340AbhHBOCK (ORCPT ); Mon, 2 Aug 2021 10:02:10 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3F3E0611C7; Mon, 2 Aug 2021 13:57:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627912620; bh=cK8TQhPTveH8GBhA0w/L8KH3TYDdFcw/q3ertp0kNAA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fl5AC6HljKu3OadkPJ9ITOcOdQisnzpYz2tEz6HOSRQ/Xi6+a2GPrJ642G6n3OsEG mjD+fCNKociGqX/fnL0d8KIfqvZK+7oXbuAfLZIYrylncTTSsEXE8tHkfuJA3WFf15 +fA5yrW1c4v8FXCe618OGb1xmi/NM73LxlgXPHpo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Maor Gottlieb , Mark Bloch , Saeed Mahameed , Sasha Levin Subject: [PATCH 5.13 075/104] net/mlx5: Fix flow table chaining Date: Mon, 2 Aug 2021 15:45:12 +0200 Message-Id: <20210802134346.489319526@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210802134344.028226640@linuxfoundation.org> References: <20210802134344.028226640@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Maor Gottlieb [ Upstream commit 8b54874ef1617185048029a3083d510569e93751 ] Fix a bug when flow table is created in priority that already has other flow tables as shown in the below diagram. If the new flow table (FT-B) has the lowest level in the priority, we need to connect the flow tables from the previous priority (p0) to this new table. In addition when this flow table is destroyed (FT-B), we need to connect the flow tables from the previous priority (p0) to the next level flow table (FT-C) in the same priority of the destroyed table (if exists). --------- |root_ns| --------- | -------------------------------- | | | ---------- ---------- --------- |p(prio)-x| | p-y | | p-n | ---------- ---------- --------- | | ---------------- ------------------ |ns(e.g bypass)| |ns(e.g. kernel) | ---------------- ------------------ | | | ------- ------ ---- | p0 | | p1 | |p2| ------- ------ ---- | | \ -------- ------- ------ | FT-A | |FT-B | |FT-C| -------- ------- ------ Fixes: f90edfd279f3 ("net/mlx5_core: Connect flow tables") Signed-off-by: Maor Gottlieb Reviewed-by: Mark Bloch Signed-off-by: Saeed Mahameed Signed-off-by: Sasha Levin --- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c index f74d2c834037..48fc242e066f 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c @@ -1024,17 +1024,19 @@ static int connect_fwd_rules(struct mlx5_core_dev *dev, static int connect_flow_table(struct mlx5_core_dev *dev, struct mlx5_flow_table *ft, struct fs_prio *prio) { - struct mlx5_flow_table *next_ft; + struct mlx5_flow_table *next_ft, *first_ft; int err = 0; /* Connect_prev_fts and update_root_ft_create are mutually exclusive */ - if (list_empty(&prio->node.children)) { + first_ft = list_first_entry_or_null(&prio->node.children, + struct mlx5_flow_table, node.list); + if (!first_ft || first_ft->level > ft->level) { err = connect_prev_fts(dev, ft, prio); if (err) return err; - next_ft = find_next_chained_ft(prio); + next_ft = first_ft ? first_ft : find_next_chained_ft(prio); err = connect_fwd_rules(dev, ft, next_ft); if (err) return err; @@ -2109,7 +2111,7 @@ static int disconnect_flow_table(struct mlx5_flow_table *ft) node.list) == ft)) return 0; - next_ft = find_next_chained_ft(prio); + next_ft = find_next_ft(ft); err = connect_fwd_rules(dev, next_ft, ft); if (err) return err; -- 2.30.2