From patchwork Mon Feb 1 08:34:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Vadai X-Patchwork-Id: 576372 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id EE4AE14032A for ; Mon, 1 Feb 2016 19:37:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752468AbcBAIhZ (ORCPT ); Mon, 1 Feb 2016 03:37:25 -0500 Received: from [193.47.165.129] ([193.47.165.129]:32948 "EHLO mellanox.co.il" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1752454AbcBAIhY (ORCPT ); Mon, 1 Feb 2016 03:37:24 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from amir@vadai.me) with ESMTPS (AES256-SHA encrypted); 1 Feb 2016 10:35:47 +0200 Received: from dev-h-vrt-095.mth.labs.mlnx (dev-h-vrt-095.mth.labs.mlnx [10.194.95.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id u118ZkWk020157; Mon, 1 Feb 2016 10:35:47 +0200 From: Amir Vadai To: "David S. Miller" , netdev@vger.kernel.org, John Fastabend Cc: Or Gerlitz , Hadar Har-Zion , Jiri Pirko , Jamal Hadi Salim , Amir Vadai Subject: [RFC net-next 7/9] net/mlx5_core: Go to next flow table support Date: Mon, 1 Feb 2016 08:34:43 +0000 Message-Id: <1454315685-32202-8-git-send-email-amir@vadai.me> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1454315685-32202-1-git-send-email-amir@vadai.me> References: <1454315685-32202-1-git-send-email-amir@vadai.me> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When destination is NULL, continue processing packet in the following table. Will be used by the offloads table, to process the traffic before any other table (without it knowing who is the next table) Signed-off-by: Amir Vadai --- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c index 6f68dba..fb3717a 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c @@ -993,9 +993,27 @@ mlx5_add_flow_rule(struct mlx5_flow_table *ft, u32 flow_tag, struct mlx5_flow_destination *dest) { + struct mlx5_flow_destination *my_dest = NULL; struct mlx5_flow_group *g; struct mlx5_flow_rule *rule; + if (!dest) { + struct mlx5_flow_table *next_ft; + struct fs_prio *prio; + + fs_get_obj(prio, ft->node.parent); + next_ft = find_next_chained_ft(prio); + if (!next_ft) { + pr_warn("There is no next flow table\n"); + return ERR_PTR(-EINVAL); + } + my_dest = kzalloc(sizeof(*my_dest), GFP_KERNEL); + if (!my_dest) + return ERR_PTR(-ENOMEM); + my_dest->type = MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE; + my_dest->ft = next_ft; + dest = my_dest; + } nested_lock_ref_node(&ft->node, FS_MUTEX_GRANDPARENT); fs_for_each_fg(g, ft) if (compare_match_criteria(g->mask.match_criteria_enable, @@ -1012,6 +1030,7 @@ mlx5_add_flow_rule(struct mlx5_flow_table *ft, match_value, action, flow_tag, dest); unlock: unlock_ref_node(&ft->node); + kfree(my_dest); return rule; } EXPORT_SYMBOL(mlx5_add_flow_rule);