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

Commit 2fc8d112 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'mlx4-fixes'



Tariq Toukan says:

====================
mlx4 bug fixes for 4.9

This patchset includes 2 bug fixes:
* In patch 1 we revert the commit that avoids invoking unregister_netdev
in shutdown flow, as it introduces netdev presence issues where
it can be accessed unsafely by ndo operations during the flow.
* Patch 2 is a simple fix for a variable uninitialization issue.

Series generated against net commit:
6998cc6e tipc: resolve connection flow control compatibility problem
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents faa1fa54 44b911e7
Loading
Loading
Loading
Loading
+2 −15
Original line number Diff line number Diff line
@@ -2079,13 +2079,6 @@ static int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
	return -ENOMEM;
}

static void mlx4_en_shutdown(struct net_device *dev)
{
	rtnl_lock();
	netif_device_detach(dev);
	mlx4_en_close(dev);
	rtnl_unlock();
}

static int mlx4_en_copy_priv(struct mlx4_en_priv *dst,
			     struct mlx4_en_priv *src,
@@ -2162,8 +2155,6 @@ void mlx4_en_destroy_netdev(struct net_device *dev)
{
	struct mlx4_en_priv *priv = netdev_priv(dev);
	struct mlx4_en_dev *mdev = priv->mdev;
	bool shutdown = mdev->dev->persist->interface_state &
					    MLX4_INTERFACE_STATE_SHUTDOWN;

	en_dbg(DRV, priv, "Destroying netdev on port:%d\n", priv->port);

@@ -2171,9 +2162,6 @@ void mlx4_en_destroy_netdev(struct net_device *dev)
	if (priv->registered) {
		devlink_port_type_clear(mlx4_get_devlink_port(mdev->dev,
							      priv->port));
		if (shutdown)
			mlx4_en_shutdown(dev);
		else
		unregister_netdev(dev);
	}

@@ -2203,7 +2191,6 @@ void mlx4_en_destroy_netdev(struct net_device *dev)
	kfree(priv->tx_ring);
	kfree(priv->tx_cq);

	if (!shutdown)
	free_netdev(dev);
}

+1 −4
Original line number Diff line number Diff line
@@ -4147,11 +4147,8 @@ static void mlx4_shutdown(struct pci_dev *pdev)

	mlx4_info(persist->dev, "mlx4_shutdown was called\n");
	mutex_lock(&persist->interface_state_mutex);
	if (persist->interface_state & MLX4_INTERFACE_STATE_UP) {
		/* Notify mlx4 clients that the kernel is being shut down */
		persist->interface_state |= MLX4_INTERFACE_STATE_SHUTDOWN;
	if (persist->interface_state & MLX4_INTERFACE_STATE_UP)
		mlx4_unload_one(pdev);
	}
	mutex_unlock(&persist->interface_state_mutex);
}

+6 −1
Original line number Diff line number Diff line
@@ -1457,7 +1457,12 @@ EXPORT_SYMBOL_GPL(mlx4_multicast_detach);
int mlx4_flow_steer_promisc_add(struct mlx4_dev *dev, u8 port,
				u32 qpn, enum mlx4_net_trans_promisc_mode mode)
{
	struct mlx4_net_trans_rule rule;
	struct mlx4_net_trans_rule rule = {
		.queue_mode = MLX4_NET_TRANS_Q_FIFO,
		.exclusive = 0,
		.allow_loopback = 1,
	};

	u64 *regid_p;

	switch (mode) {
+0 −1
Original line number Diff line number Diff line
@@ -476,7 +476,6 @@ enum {
enum {
	MLX4_INTERFACE_STATE_UP		= 1 << 0,
	MLX4_INTERFACE_STATE_DELETION	= 1 << 1,
	MLX4_INTERFACE_STATE_SHUTDOWN	= 1 << 2,
};

#define MSTR_SM_CHANGE_MASK (MLX4_EQ_PORT_INFO_MSTR_SM_SL_CHANGE_MASK | \