Commit 1f8176f7 authored by Shaker Daibes's avatar Shaker Daibes Committed by David S. Miller

net/mlx4_en: Check the enabling pptx/pprx flags in SET_PORT wrapper flow

Make sure pptx/pprx mask flag is set using new fields upon set port
request. In addition, move this code into a helper function for better
code readability.
Signed-off-by: default avatarShaker Daibes <shakerd@mellanox.com>
Signed-off-by: default avatarTariq Toukan <tariqt@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bf1f9396
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#define _MLX4_EN_PORT_H_ #define _MLX4_EN_PORT_H_
#define SET_PORT_GEN_ALL_VALID 0x7
#define SET_PORT_PROMISC_SHIFT 31 #define SET_PORT_PROMISC_SHIFT 31
#define SET_PORT_MC_PROMISC_SHIFT 30 #define SET_PORT_MC_PROMISC_SHIFT 30
......
...@@ -776,7 +776,9 @@ struct mlx4_vlan_table { ...@@ -776,7 +776,9 @@ struct mlx4_vlan_table {
int max; int max;
}; };
#define SET_PORT_GEN_ALL_VALID 0x7 #define SET_PORT_GEN_ALL_VALID (MLX4_FLAG_V_MTU_MASK | \
MLX4_FLAG_V_PPRX_MASK | \
MLX4_FLAG_V_PPTX_MASK)
#define SET_PORT_PROMISC_SHIFT 31 #define SET_PORT_PROMISC_SHIFT 31
#define SET_PORT_MC_PROMISC_SHIFT 30 #define SET_PORT_MC_PROMISC_SHIFT 30
......
...@@ -53,6 +53,8 @@ ...@@ -53,6 +53,8 @@
#define MLX4_FLAG2_V_IGNORE_FCS_MASK BIT(1) #define MLX4_FLAG2_V_IGNORE_FCS_MASK BIT(1)
#define MLX4_FLAG2_V_USER_MTU_MASK BIT(5) #define MLX4_FLAG2_V_USER_MTU_MASK BIT(5)
#define MLX4_FLAG_V_MTU_MASK BIT(0) #define MLX4_FLAG_V_MTU_MASK BIT(0)
#define MLX4_FLAG_V_PPRX_MASK BIT(1)
#define MLX4_FLAG_V_PPTX_MASK BIT(2)
#define MLX4_IGNORE_FCS_MASK 0x1 #define MLX4_IGNORE_FCS_MASK 0x1
#define MLX4_TC_MAX_NUMBER 8 #define MLX4_TC_MAX_NUMBER 8
...@@ -1305,12 +1307,32 @@ mlx4_en_set_port_user_mtu(struct mlx4_dev *dev, int slave, int port, ...@@ -1305,12 +1307,32 @@ mlx4_en_set_port_user_mtu(struct mlx4_dev *dev, int slave, int port,
gen_context->user_mtu = cpu_to_be16(master->max_user_mtu[port]); gen_context->user_mtu = cpu_to_be16(master->max_user_mtu[port]);
} }
static void
mlx4_en_set_port_global_pause(struct mlx4_dev *dev, int slave,
struct mlx4_set_port_general_context *gen_context)
{
struct mlx4_priv *priv = mlx4_priv(dev);
struct mlx4_mfunc_master_ctx *master = &priv->mfunc.master;
/* Slave cannot change Global Pause configuration */
if (slave != mlx4_master_func_num(dev) &&
(gen_context->pptx != master->pptx ||
gen_context->pprx != master->pprx)) {
gen_context->pptx = master->pptx;
gen_context->pprx = master->pprx;
mlx4_warn(dev, "denying Global Pause change for slave:%d\n",
slave);
} else {
master->pptx = gen_context->pptx;
master->pprx = gen_context->pprx;
}
}
static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod, static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
u8 op_mod, struct mlx4_cmd_mailbox *inbox) u8 op_mod, struct mlx4_cmd_mailbox *inbox)
{ {
struct mlx4_priv *priv = mlx4_priv(dev); struct mlx4_priv *priv = mlx4_priv(dev);
struct mlx4_port_info *port_info; struct mlx4_port_info *port_info;
struct mlx4_mfunc_master_ctx *master = &priv->mfunc.master;
struct mlx4_set_port_rqp_calc_context *qpn_context; struct mlx4_set_port_rqp_calc_context *qpn_context;
struct mlx4_set_port_general_context *gen_context; struct mlx4_set_port_general_context *gen_context;
struct mlx4_roce_gid_entry *gid_entry_tbl, *gid_entry_mbox, *gid_entry_mb1; struct mlx4_roce_gid_entry *gid_entry_tbl, *gid_entry_mbox, *gid_entry_mb1;
...@@ -1372,19 +1394,11 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod, ...@@ -1372,19 +1394,11 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
mlx4_en_set_port_user_mtu(dev, slave, port, mlx4_en_set_port_user_mtu(dev, slave, port,
gen_context); gen_context);
/* Slave cannot change Global Pause configuration */ if (gen_context->flags &
if (slave != mlx4_master_func_num(dev) && (MLX4_FLAG_V_PPRX_MASK || MLX4_FLAG_V_PPTX_MASK))
((gen_context->pptx != master->pptx) || mlx4_en_set_port_global_pause(dev, slave,
(gen_context->pprx != master->pprx))) { gen_context);
gen_context->pptx = master->pptx;
gen_context->pprx = master->pprx;
mlx4_warn(dev,
"denying Global Pause change for slave:%d\n",
slave);
} else {
master->pptx = gen_context->pptx;
master->pprx = gen_context->pprx;
}
break; break;
case MLX4_SET_PORT_GID_TABLE: case MLX4_SET_PORT_GID_TABLE:
/* change to MULTIPLE entries: number of guest's gids /* change to MULTIPLE entries: number of guest's gids
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment