FAILED: patch "[PATCH] net/mlx5: E-Switch, Avoid setup attempt if not being e-switch" failed to apply to 4.9-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
0efc8562491b7d36f6bbc4fbc8f3348cb6641e9cMon Sep 17 00:00:00 2001
From: Or Gerlitz <[email protected]>
Date: Thu, 31 May 2018 11:16:18 +0300
Subject: [PATCH] net/mlx5: E-Switch, Avoid setup attempt if not being e-switch
manager
In smartnic env, the host (PF) driver might not be an e-switch manager, hence the FW will err on driver attempts to deal with setting/unsetting the eswitch and as a result the overall setup of sriov will fail.
Fix that by avoiding the operation if e-switch management is not allowed for this driver instance. While here, move to use the correct name for the esw manager capability name.
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +1 -1
@@ -839,7 +839,7 @@ static bool mlx5e_is_vf_vport_rep(struct mlx5e_priv *priv)struct mlx5e_rep_priv *rpriv = priv->ppriv;struct mlx5_eswitch_rep *rep; -if (!MLX5_CAP_GEN (priv->mdev, eswitch_flow_table)) +if (!MLX5_ESWITCH_MANAGER (priv->mdev))return false; rep = rpriv->rep;
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +1 -1
@@ -1604,7 +1604,7 @@ int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)if (!ESW_ALLOWED (esw))return 0 ; -if (!MLX5_CAP_GEN (esw->dev, eswitch_flow_table) || +if (!MLX5_ESWITCH_MANAGER (esw->dev) || !MLX5_CAP_ESW_FLOWTABLE_FDB (esw->dev, ft_support)) {esw_warn (esw->dev,"E-Switch FDB is not supported, aborting ...\n" );return -EOPNOTSUPP ;
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +2 -1
@@ -32,6 +32,7 @@#include <linux/mutex.h> #include <linux/mlx5/driver.h> +#include <linux/mlx5/eswitch.h> #include "mlx5_core.h" #include "fs_core.h"
@@ -2652,7 +2653,7 @@ int mlx5_init_fs(struct mlx5_core_dev *dev) goto err; } -if (MLX5_CAP_GEN (dev, eswitch_flow_table)) { +if (MLX5_ESWITCH_MANAGER (dev)) {if (MLX5_CAP_ESW_FLOWTABLE_FDB (dev, ft_support)) { err =init_fdb_root_ns (steering);if (err)
drivers/net/ethernet/mellanox/mlx5/core/fw.c +3 -2
@@ -32,6 +32,7 @@#include <linux/mlx5/driver.h> #include <linux/mlx5/cmd.h> +#include <linux/mlx5/eswitch.h> #include <linux/module.h> #include "mlx5_core.h" #include "../../mlxfw/mlxfw.h"
@@ -159,13 +160,13 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev) }if (MLX5_CAP_GEN (dev, vport_group_manager) && -MLX5_CAP_GEN (dev, eswitch_flow_table)) { +MLX5_ESWITCH_MANAGER (dev)) { err =mlx5_core_get_caps (dev,MLX5_CAP_ESWITCH_FLOW_TABLE );if (err)return err; } -if (MLX5_CAP_GEN (dev, eswitch_flow_table)) { +if (MLX5_ESWITCH_MANAGER (dev)) { err =mlx5_core_get_caps (dev,MLX5_CAP_ESWITCH );if (err)return err;
drivers/net/ethernet/mellanox/mlx5/core/sriov.c +6 -1
@@ -88,6 +88,9 @@ static int mlx5_device_enable_sriov(struct mlx5_core_dev *dev, int num_vfs)return -EBUSY ; } +if (!MLX5_ESWITCH_MANAGER (dev)) + goto enable_vfs_hca; + err =mlx5_eswitch_enable_sriov (dev->priv.eswitch, num_vfs,SRIOV_LEGACY );if (err) { mlx5_core_warn(dev,
@@ -95,6 +98,7 @@ static int mlx5_device_enable_sriov(struct mlx5_core_dev *dev, int num_vfs)return err; } +enable_vfs_hca:for (vf =0 ; vf < num_vfs; vf++) { err =mlx5_core_enable_hca (dev, vf +1 );if (err) {
@@ -140,7 +144,8 @@ static void mlx5_device_disable_sriov(struct mlx5_core_dev *dev) } out: -mlx5_eswitch_disable_sriov (dev->priv.eswitch); +if (MLX5_ESWITCH_MANAGER (dev)) +mlx5_eswitch_disable_sriov (dev->priv.eswitch);if (mlx5_wait_for_vf_pages (dev))mlx5_core_warn (dev,"timeout reclaiming VFs pages\n" );
include/linux/mlx5/eswitch.h +2 -0
@@ -8,6 +8,8 @@#include <linux/mlx5/driver.h> +#define MLX5_ESWITCH_MANAGER (mdev) MLX5_CAP_GEN(mdev, eswitch_manager) +enum {SRIOV_NONE ,SRIOV_LEGACY ,
include/linux/mlx5/mlx5_ifc.h +1 -1
@@ -922,7 +922,7 @@ struct mlx5_ifc_cmd_hca_cap_bits {u8 vnic_env_queue_counters[0x1 ];u8 ets[0x1 ];u8 nic_flow_table[0x1 ]; -u8 eswitch_flow_table[0x1 ]; +u8 eswitch_manager[0x1 ];u8 device_memory[0x1 ];u8 mcam_reg[0x1 ];u8 pcam_reg[0x1 ];