Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ad48372 authored by David S. Miller's avatar David S. Miller
Browse files

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: default avatarDavid S. Miller <davem@davemloft.net>
parents e43e5052 bffb023a
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -1993,7 +1993,6 @@ static void mlx4_master_do_cmd(struct mlx4_dev *dev, int slave, u8 cmd,
			goto reset_slave;
			goto reset_slave;
		slave_state[slave].vhcr_dma = ((u64) param) << 48;
		slave_state[slave].vhcr_dma = ((u64) param) << 48;
		priv->mfunc.master.slave_state[slave].cookie = 0;
		priv->mfunc.master.slave_state[slave].cookie = 0;
		mutex_init(&priv->mfunc.master.gen_eqe_mutex[slave]);
		break;
		break;
	case MLX4_COMM_CMD_VHCR1:
	case MLX4_COMM_CMD_VHCR1:
		if (slave_state[slave].last_cmd != MLX4_COMM_CMD_VHCR0)
		if (slave_state[slave].last_cmd != MLX4_COMM_CMD_VHCR0)
@@ -2225,6 +2224,7 @@ int mlx4_multi_func_init(struct mlx4_dev *dev)
		for (i = 0; i < dev->num_slaves; ++i) {
		for (i = 0; i < dev->num_slaves; ++i) {
			s_state = &priv->mfunc.master.slave_state[i];
			s_state = &priv->mfunc.master.slave_state[i];
			s_state->last_cmd = MLX4_COMM_CMD_RESET;
			s_state->last_cmd = MLX4_COMM_CMD_RESET;
			mutex_init(&priv->mfunc.master.gen_eqe_mutex[i]);
			for (j = 0; j < MLX4_EVENT_TYPES_NUM; ++j)
			for (j = 0; j < MLX4_EVENT_TYPES_NUM; ++j)
				s_state->event_eq[j].eqn = -1;
				s_state->event_eq[j].eqn = -1;
			__raw_writel((__force u32) 0,
			__raw_writel((__force u32) 0,
+8 −7
Original line number Original line Diff line number Diff line
@@ -2805,13 +2805,6 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
	netif_carrier_off(dev);
	netif_carrier_off(dev);
	mlx4_en_set_default_moderation(priv);
	mlx4_en_set_default_moderation(priv);


	err = register_netdev(dev);
	if (err) {
		en_err(priv, "Netdev registration failed for port %d\n", port);
		goto out;
	}
	priv->registered = 1;

	en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num);
	en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num);
	en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num);
	en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num);


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


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


	err = register_netdev(dev);
	if (err) {
		en_err(priv, "Netdev registration failed for port %d\n", port);
		goto out;
	}

	priv->registered = 1;

	return 0;
	return 0;


out:
out:
+7 −11
Original line number Original line Diff line number Diff line
@@ -153,9 +153,7 @@ void mlx4_gen_slave_eqe(struct work_struct *work)


		/* All active slaves need to receive the event */
		/* All active slaves need to receive the event */
		if (slave == ALL_SLAVES) {
		if (slave == ALL_SLAVES) {
			for (i = 0; i < dev->num_slaves; i++) {
			for (i = 0; i <= dev->persist->num_vfs; i++) {
				if (i != dev->caps.function &&
				    master->slave_state[i].active)
				if (mlx4_GEN_EQE(dev, i, eqe))
				if (mlx4_GEN_EQE(dev, i, eqe))
					mlx4_warn(dev, "Failed to generate event for slave %d\n",
					mlx4_warn(dev, "Failed to generate event for slave %d\n",
						  i);
						  i);
@@ -203,13 +201,11 @@ static void mlx4_slave_event(struct mlx4_dev *dev, int slave,
			     struct mlx4_eqe *eqe)
			     struct mlx4_eqe *eqe)
{
{
	struct mlx4_priv *priv = mlx4_priv(dev);
	struct mlx4_priv *priv = mlx4_priv(dev);
	struct mlx4_slave_state *s_slave =
		&priv->mfunc.master.slave_state[slave];


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


	slave_event(dev, slave, eqe);
	slave_event(dev, slave, eqe);
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -3095,6 +3095,12 @@ int mlx4_GEN_EQE(struct mlx4_dev *dev, int slave, struct mlx4_eqe *eqe)
	if (!priv->mfunc.master.slave_state)
	if (!priv->mfunc.master.slave_state)
		return -EINVAL;
		return -EINVAL;


	/* check for slave valid, slave not PF, and slave active */
	if (slave < 0 || slave > dev->persist->num_vfs ||
	    slave == dev->caps.function ||
	    !priv->mfunc.master.slave_state[slave].active)
		return 0;

	event_eq = &priv->mfunc.master.slave_state[slave].event_eq[eqe->type];
	event_eq = &priv->mfunc.master.slave_state[slave].event_eq[eqe->type];


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