Skip to content

Commit 8ad4837

Browse files
committed
Merge branch 'mlx4'
Or Gerlitz says: ==================== mlx4 driver RC fixes Ido's patch should go to -stable of >= 3.14 too, the issue is older but it hits us with VXLAN for which driver support dates there. As for Jack's fix, for the time being, picking it to 4.0 is OK. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents e43e505 + bffb023 commit 8ad4837

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed

drivers/net/ethernet/mellanox/mlx4/cmd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1993,7 +1993,6 @@ static void mlx4_master_do_cmd(struct mlx4_dev *dev, int slave, u8 cmd,
19931993
goto reset_slave;
19941994
slave_state[slave].vhcr_dma = ((u64) param) << 48;
19951995
priv->mfunc.master.slave_state[slave].cookie = 0;
1996-
mutex_init(&priv->mfunc.master.gen_eqe_mutex[slave]);
19971996
break;
19981997
case MLX4_COMM_CMD_VHCR1:
19991998
if (slave_state[slave].last_cmd != MLX4_COMM_CMD_VHCR0)
@@ -2225,6 +2224,7 @@ int mlx4_multi_func_init(struct mlx4_dev *dev)
22252224
for (i = 0; i < dev->num_slaves; ++i) {
22262225
s_state = &priv->mfunc.master.slave_state[i];
22272226
s_state->last_cmd = MLX4_COMM_CMD_RESET;
2227+
mutex_init(&priv->mfunc.master.gen_eqe_mutex[i]);
22282228
for (j = 0; j < MLX4_EVENT_TYPES_NUM; ++j)
22292229
s_state->event_eq[j].eqn = -1;
22302230
__raw_writel((__force u32) 0,

drivers/net/ethernet/mellanox/mlx4/en_netdev.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2805,13 +2805,6 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
28052805
netif_carrier_off(dev);
28062806
mlx4_en_set_default_moderation(priv);
28072807

2808-
err = register_netdev(dev);
2809-
if (err) {
2810-
en_err(priv, "Netdev registration failed for port %d\n", port);
2811-
goto out;
2812-
}
2813-
priv->registered = 1;
2814-
28152808
en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num);
28162809
en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num);
28172810

@@ -2853,6 +2846,14 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
28532846

28542847
mlx4_set_stats_bitmap(mdev->dev, &priv->stats_bitmap);
28552848

2849+
err = register_netdev(dev);
2850+
if (err) {
2851+
en_err(priv, "Netdev registration failed for port %d\n", port);
2852+
goto out;
2853+
}
2854+
2855+
priv->registered = 1;
2856+
28562857
return 0;
28572858

28582859
out:

drivers/net/ethernet/mellanox/mlx4/eq.c

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,10 @@ void mlx4_gen_slave_eqe(struct work_struct *work)
153153

154154
/* All active slaves need to receive the event */
155155
if (slave == ALL_SLAVES) {
156-
for (i = 0; i < dev->num_slaves; i++) {
157-
if (i != dev->caps.function &&
158-
master->slave_state[i].active)
159-
if (mlx4_GEN_EQE(dev, i, eqe))
160-
mlx4_warn(dev, "Failed to generate event for slave %d\n",
161-
i);
156+
for (i = 0; i <= dev->persist->num_vfs; i++) {
157+
if (mlx4_GEN_EQE(dev, i, eqe))
158+
mlx4_warn(dev, "Failed to generate event for slave %d\n",
159+
i);
162160
}
163161
} else {
164162
if (mlx4_GEN_EQE(dev, slave, eqe))
@@ -203,13 +201,11 @@ static void mlx4_slave_event(struct mlx4_dev *dev, int slave,
203201
struct mlx4_eqe *eqe)
204202
{
205203
struct mlx4_priv *priv = mlx4_priv(dev);
206-
struct mlx4_slave_state *s_slave =
207-
&priv->mfunc.master.slave_state[slave];
208204

209-
if (!s_slave->active) {
210-
/*mlx4_warn(dev, "Trying to pass event to inactive slave\n");*/
205+
if (slave < 0 || slave > dev->persist->num_vfs ||
206+
slave == dev->caps.function ||
207+
!priv->mfunc.master.slave_state[slave].active)
211208
return;
212-
}
213209

214210
slave_event(dev, slave, eqe);
215211
}

drivers/net/ethernet/mellanox/mlx4/resource_tracker.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3095,6 +3095,12 @@ int mlx4_GEN_EQE(struct mlx4_dev *dev, int slave, struct mlx4_eqe *eqe)
30953095
if (!priv->mfunc.master.slave_state)
30963096
return -EINVAL;
30973097

3098+
/* check for slave valid, slave not PF, and slave active */
3099+
if (slave < 0 || slave > dev->persist->num_vfs ||
3100+
slave == dev->caps.function ||
3101+
!priv->mfunc.master.slave_state[slave].active)
3102+
return 0;
3103+
30983104
event_eq = &priv->mfunc.master.slave_state[slave].event_eq[eqe->type];
30993105

31003106
/* Create the event only if the slave is registered */

0 commit comments

Comments
 (0)