Patch "net/mlx5: E-Switch, Correctly deal with inline mode on ConnectX-5" has been added to the 4.10-stable tree
This is a note to let you know that I've just added the patch titled
net/mlx5: E-Switch, Correctly deal with inline mode on ConnectX-5
to the 4.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-mlx5-e-switch-correctly-deal-with-inline-mode-on-connectx-5.patch
and it can be found in the queue-4.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Sat Apr 29 08:22:40 CEST 2017
From: Or Gerlitz <[email protected]>
Date: Thu, 30 Mar 2017 15:56:10 +0200
Subject: net/mlx5: E-Switch, Correctly deal with inline mode on ConnectX-5
From: Or Gerlitz <[email protected]>
[ Upstream commit c415f704c8276bc686abcb0497bf2606038ca73c ]
On ConnectX5 the wqe inline mode is "none" and hence the FW reports MLX5_CAP_INLINE_MODE_NOT_REQUIRED.
Fix our devlink callbacks to deal with that on get and set.
Also fix the tc flow parsing code not to fail anything when inline isn't required.
--- drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 3 - drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 36 ++++++++----- 2 files changed, 26 insertions(+), 13 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +2 -1
@@ -611,7 +611,8 @@ static int parse_cls_flower(struct mlx5eif (!err && esw->mode ==SRIOV_OFFLOADS && rep->vport !=FDB_UPLINK_VPORT ) { -if (min_inline > esw->offloads.inline_mode) { +if (esw->offloads.inline_mode !=MLX5_INLINE_MODE_NONE && + esw->offloads.inline_mode < min_inline) {netdev_warn (priv->netdev,"Flow is not offloaded due to min inline setting, required %d actual %d\n" , min_inline, esw->offloads.inline_mode);
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +24 -12
@@ -908,8 +908,7 @@ int mlx5_devlink_eswitch_inline_mode_setstruct mlx5_core_dev *dev =devlink_priv (devlink);struct mlx5_eswitch *esw = dev->priv.eswitch;int num_vports = esw->enabled_vports; -int err; -int vport; +int err, vport;u8 mlx5_mode;if (!MLX5_CAP_GEN (dev, vport_group_manager))
@@ -918,9 +917,17 @@ int mlx5_devlink_eswitch_inline_mode_setif (esw->mode ==SRIOV_NONE )return -EOPNOTSUPP ; -if (MLX5_CAP_ETH (dev, wqe_inline_mode) != -MLX5_CAP_INLINE_MODE_VPORT_CONTEXT ) +switch (MLX5_CAP_ETH (dev, wqe_inline_mode)) { +case MLX5_CAP_INLINE_MODE_NOT_REQUIRED : +if (mode ==DEVLINK_ESWITCH_INLINE_MODE_NONE ) +return 0 ; +/* fall through */ +case MLX5_CAP_INLINE_MODE_L2 : +esw_warn (dev,"Inline mode can't be set\n" );return -EOPNOTSUPP ; +case MLX5_CAP_INLINE_MODE_VPORT_CONTEXT : +break ; + }if (esw->offloads.num_flows >0 ) {esw_warn (dev,"Can't set inline mode when flows are configured\n" );
@@ -963,18 +970,14 @@ int mlx5_devlink_eswitch_inline_mode_getif (esw->mode ==SRIOV_NONE )return -EOPNOTSUPP ; -if (MLX5_CAP_ETH (dev, wqe_inline_mode) != -MLX5_CAP_INLINE_MODE_VPORT_CONTEXT ) -return -EOPNOTSUPP ; -return esw_inline_mode_to_devlink (esw->offloads.inline_mode, mode); }int mlx5_eswitch_inline_mode_get (struct mlx5_eswitch *esw,int nvfs,u8 *mode) { +u8 prev_mlx5_mode, mlx5_mode =MLX5_INLINE_MODE_L2 ;struct mlx5_core_dev *dev = esw->dev;int vport; -u8 prev_mlx5_mode, mlx5_mode =MLX5_INLINE_MODE_L2 ;if (!MLX5_CAP_GEN (dev, vport_group_manager))return -EOPNOTSUPP ;
@@ -982,10 +985,18 @@ int mlx5_eswitch_inline_mode_get(structif (esw->mode ==SRIOV_NONE )return -EOPNOTSUPP ; -if (MLX5_CAP_ETH (dev, wqe_inline_mode) != -MLX5_CAP_INLINE_MODE_VPORT_CONTEXT ) -return -EOPNOTSUPP ; +switch (MLX5_CAP_ETH (dev, wqe_inline_mode)) { +case MLX5_CAP_INLINE_MODE_NOT_REQUIRED : + mlx5_mode =MLX5_INLINE_MODE_NONE ; + goto out; +case MLX5_CAP_INLINE_MODE_L2 : + mlx5_mode =MLX5_INLINE_MODE_L2 ; + goto out; +case MLX5_CAP_INLINE_MODE_VPORT_CONTEXT : + goto query_vports; + } +query_vports:for (vport =1 ; vport <= nvfs; vport++) {mlx5_query_nic_vport_min_inline (dev, vport, &mlx5_mode);if (vport >1 && prev_mlx5_mode != mlx5_mode)
@@ -993,6 +1004,7 @@ int mlx5_eswitch_inline_mode_get(struct prev_mlx5_mode = mlx5_mode; } +out: *mode = mlx5_mode;return 0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.10/net-mlx5-e-switch-correctly-deal-with-inline-mode-on-connectx-5.patch