From patchwork Mon Jun 20 21:04:17 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 638294 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 3rYNzL6cLBz9sDk for ; Tue, 21 Jun 2016 07:19:42 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b=i2KyMnYN; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933034AbcFTVTT (ORCPT ); Mon, 20 Jun 2016 17:19:19 -0400 Received: from mail-lb0-f194.google.com ([209.85.217.194]:33470 "EHLO mail-lb0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932957AbcFTVTF (ORCPT ); Mon, 20 Jun 2016 17:19:05 -0400 Received: by mail-lb0-f194.google.com with SMTP id o4so248796lbp.0 for ; Mon, 20 Jun 2016 14:19:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=X8DwNO/le445G/xYn/g6AJ/bMbwZnD52tO1wTyYmYfc=; b=i2KyMnYNBhHarFWyautpp1ZFipEDBbfcgguFy5V+7PAYKE2YorctQKbT9hjr5W7JJz W4HOdDtS4n/ER6uQMz3HSwPQ1YL15GHhYt/uZaFZmjoxPqU5xpHTKL94hTt7/0LBcSPG 9caAgQapc+FmF5MJ0SfiGugzqSakt0nSkYhO/h7tc2O40x4apsJ5ZEq6w6kjzEFwg2Fi m8w/pSG9OxALGTELgwpjkQOLDiTqQIVTWuKqICtamF6qX4YPXRU4jjAS2bdW9U73uEQT s8leT4aqQSIyfMrqyESHID0WH+++3W69W20pTCshegHJCQ2U2CWRP3rZTtMGl29mzY1d 7kkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=X8DwNO/le445G/xYn/g6AJ/bMbwZnD52tO1wTyYmYfc=; b=ILROWF9kdLikfhfDN80iKyQXI9DFUO09IWoY/1zR7Im7pZLy+JcxFFOnHvX9ZtlpYI WhzwOHvKfVpgz9crBISXBy2rZYvGo3Q8YhLMhVCHnF4ZW8eJxnsH8TsWcZIMbrr4lGtK oX8SYKwczTs/HufK25BjMEyCvXTqD0wGwWX7xYN5I7nrKr62FGBEnYbiLfT/H5bWChGX O0awf6ImIu/5JXdMAbaOniJSkHLqzB6E1VDybH45jEHae/1uEKlV6+I87whDUCk2Ht7F a72AIbYQETC3slZnFjfDuM08bDaJWu30Wkvvl5q28jSDBWKRZ6pVz3ppd1mZn1WVMXDB T3bA== X-Gm-Message-State: ALyK8tLIX7b0LT+6mMs0RN8S0Q9yrWAaFZFEPhTeHpemcRS0/wRIds7Fsi/X4BjzWXzJFQ== X-Received: by 10.194.104.227 with SMTP id gh3mr16339976wjb.3.1466456688253; Mon, 20 Jun 2016 14:04:48 -0700 (PDT) Received: from localhost (ip-94-113-120-206.net.upcbroadband.cz. [94.113.120.206]) by smtp.gmail.com with ESMTPSA id el4sm32622901wjd.23.2016.06.20.14.04.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 20 Jun 2016 14:04:47 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, eladr@mellanox.com, yotamg@mellanox.com, nogahf@mellanox.com, ogerlitz@mellanox.com Subject: [patch net-next 19/23] mlxsw: spectrum: Add FID get / set functions Date: Mon, 20 Jun 2016 23:04:17 +0200 Message-Id: <1466456661-5260-20-git-send-email-jiri@resnulli.us> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1466456661-5260-1-git-send-email-jiri@resnulli.us> References: <1466456661-5260-1-git-send-email-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel As previously explained, not all vPorts will be assigned FIDs, so instead of returning the FID index of a vPort, return a pointer to its FID struct. This will allow us to know whether it's legal to access the vPort's FID parameters such as index and device. Signed-off-by: Ido Schimmel Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 17 ++++++------- drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 28 +++++++++++++++------- .../ethernet/mellanox/mlxsw/spectrum_switchdev.c | 8 +++---- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 08f3f51..ea007f0 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -776,7 +776,7 @@ static int mlxsw_sp_vport_vfid_join(struct mlxsw_sp_port *mlxsw_sp_vport) if (err) goto err_vport_fid_map; - mlxsw_sp_vport->vport.f = f; + mlxsw_sp_vport_fid_set(mlxsw_sp_vport, f); f->ref_count++; return 0; @@ -792,9 +792,9 @@ err_vport_flood_set: static void mlxsw_sp_vport_vfid_leave(struct mlxsw_sp_port *mlxsw_sp_vport) { - struct mlxsw_sp_fid *f = mlxsw_sp_vport->vport.f; + struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_vport); - mlxsw_sp_vport->vport.f = NULL; + mlxsw_sp_vport_fid_set(mlxsw_sp_vport, NULL); mlxsw_sp_vport_fid_map(mlxsw_sp_vport, f->fid, false); @@ -2639,7 +2639,8 @@ static int mlxsw_sp_vport_fdb_flush(struct mlxsw_sp_port *mlxsw_sp_vport, return mlxsw_sp_port_fdb_flush_by_lag_id_fid(mlxsw_sp_vport, fid); else - return mlxsw_sp_port_fdb_flush_by_port_fid(mlxsw_sp_vport, fid); + return mlxsw_sp_port_fdb_flush_by_port_fid(mlxsw_sp_vport, + fid); } static bool mlxsw_sp_port_dev_check(const struct net_device *dev) @@ -3229,7 +3230,7 @@ static int mlxsw_sp_vport_br_vfid_join(struct mlxsw_sp_port *mlxsw_sp_vport, if (err) goto err_vport_fid_map; - mlxsw_sp_vport->vport.f = f; + mlxsw_sp_vport_fid_set(mlxsw_sp_vport, f); f->ref_count++; return 0; @@ -3244,13 +3245,13 @@ err_vport_flood_set: static void mlxsw_sp_vport_br_vfid_leave(struct mlxsw_sp_port *mlxsw_sp_vport) { - struct mlxsw_sp_fid *f = mlxsw_sp_vport->vport.f; + struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_vport); mlxsw_sp_vport_fid_map(mlxsw_sp_vport, f->fid, false); mlxsw_sp_vport_flood_set(mlxsw_sp_vport, f->fid, false); - mlxsw_sp_vport->vport.f = NULL; + mlxsw_sp_vport_fid_set(mlxsw_sp_vport, NULL); if (--f->ref_count == 0) mlxsw_sp_br_vfid_destroy(mlxsw_sp_vport->mlxsw_sp, f); } @@ -3293,8 +3294,8 @@ err_vport_br_vfid_join: static void mlxsw_sp_vport_bridge_leave(struct mlxsw_sp_port *mlxsw_sp_vport, bool flush_fdb) { + u16 fid = mlxsw_sp_vport_fid_get(mlxsw_sp_vport)->fid; u16 vid = mlxsw_sp_vport_vid_get(mlxsw_sp_vport); - u16 fid = mlxsw_sp_vport_fid_get(mlxsw_sp_vport); mlxsw_sp_port_vid_learning_set(mlxsw_sp_vport, vid, false); diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h index 1d34419..a6dd295 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h @@ -259,12 +259,6 @@ mlxsw_sp_port_lagged_get(struct mlxsw_sp *mlxsw_sp, u16 lag_id, u8 port_index) return mlxsw_sp_port && mlxsw_sp_port->lagged ? mlxsw_sp_port : NULL; } -static inline struct net_device * -mlxsw_sp_vport_br_get(const struct mlxsw_sp_port *mlxsw_sp_vport) -{ - return mlxsw_sp_vport->vport.f->dev; -} - static inline u16 mlxsw_sp_vport_vid_get(const struct mlxsw_sp_port *mlxsw_sp_vport) { @@ -279,10 +273,24 @@ mlxsw_sp_port_is_vport(const struct mlxsw_sp_port *mlxsw_sp_port) return vid != 0; } -static inline u16 +static inline void mlxsw_sp_vport_fid_set(struct mlxsw_sp_port *mlxsw_sp_vport, + struct mlxsw_sp_fid *f) +{ + mlxsw_sp_vport->vport.f = f; +} + +static inline struct mlxsw_sp_fid * mlxsw_sp_vport_fid_get(const struct mlxsw_sp_port *mlxsw_sp_vport) { - return mlxsw_sp_vport->vport.f->fid; + return mlxsw_sp_vport->vport.f; +} + +static inline struct net_device * +mlxsw_sp_vport_br_get(const struct mlxsw_sp_port *mlxsw_sp_vport) +{ + struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_vport); + + return f->dev; } static inline struct mlxsw_sp_port * @@ -307,7 +315,9 @@ mlxsw_sp_port_vport_find_by_fid(const struct mlxsw_sp_port *mlxsw_sp_port, list_for_each_entry(mlxsw_sp_vport, &mlxsw_sp_port->vports_list, vport.list) { - if (mlxsw_sp_vport_fid_get(mlxsw_sp_vport) == fid) + struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_vport); + + if (f->fid == fid) return mlxsw_sp_vport; } diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index 6713769..b31b2ce 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c @@ -58,7 +58,7 @@ static u16 mlxsw_sp_port_vid_to_fid_get(struct mlxsw_sp_port *mlxsw_sp_port, u16 fid = vid; if (mlxsw_sp_port_is_vport(mlxsw_sp_port)) - fid = mlxsw_sp_vport_fid_get(mlxsw_sp_port); + fid = mlxsw_sp_vport_fid_get(mlxsw_sp_port)->fid; if (!fid) fid = mlxsw_sp_port->pvid; @@ -233,9 +233,9 @@ static int mlxsw_sp_port_uc_flood_set(struct mlxsw_sp_port *mlxsw_sp_port, int err; if (mlxsw_sp_port_is_vport(mlxsw_sp_port)) { - u16 vfid, fid = mlxsw_sp_vport_fid_get(mlxsw_sp_port); + u16 fid = mlxsw_sp_vport_fid_get(mlxsw_sp_port)->fid; + u16 vfid = mlxsw_sp_fid_to_vfid(fid); - vfid = mlxsw_sp_fid_to_vfid(fid); return __mlxsw_sp_port_flood_set(mlxsw_sp_port, vfid, vfid, set, true); } @@ -1212,7 +1212,7 @@ static int mlxsw_sp_port_fdb_dump(struct mlxsw_sp_port *mlxsw_sp_port, return -ENOMEM; if (mlxsw_sp_port_is_vport(mlxsw_sp_port)) - vport_fid = mlxsw_sp_vport_fid_get(mlxsw_sp_port); + vport_fid = mlxsw_sp_vport_fid_get(mlxsw_sp_port)->fid; mlxsw_reg_sfd_pack(sfd_pl, MLXSW_REG_SFD_OP_QUERY_DUMP, 0); do {