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

Commit 044ca2a5 authored by Yevgeny Petrilin's avatar Yevgeny Petrilin Committed by David S. Miller
Browse files

net/mlx4_en: Release QP range in free_resources



Add a missing resource release in ring cleanup.
Not doing this leaves a range of QPs that are being reserved,
and no one can use them.

Signed-off-by: default avatarYevgeny Petrilin <yevgenyp@mellanox.co.il>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9858d2d1
Loading
Loading
Loading
Loading
+8 −4
Original line number Original line Diff line number Diff line
@@ -929,15 +929,20 @@ void mlx4_en_free_resources(struct mlx4_en_priv *priv)
		if (priv->rx_cq[i].buf)
		if (priv->rx_cq[i].buf)
			mlx4_en_destroy_cq(priv, &priv->rx_cq[i]);
			mlx4_en_destroy_cq(priv, &priv->rx_cq[i]);
	}
	}

	if (priv->base_tx_qpn) {
		mlx4_qp_release_range(priv->mdev->dev, priv->base_tx_qpn, priv->tx_ring_num);
		priv->base_tx_qpn = 0;
	}
}
}


int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
{
{
	struct mlx4_en_port_profile *prof = priv->prof;
	struct mlx4_en_port_profile *prof = priv->prof;
	int i;
	int i;
	int base_tx_qpn, err;
	int err;


	err = mlx4_qp_reserve_range(priv->mdev->dev, priv->tx_ring_num, 256, &base_tx_qpn);
	err = mlx4_qp_reserve_range(priv->mdev->dev, priv->tx_ring_num, 256, &priv->base_tx_qpn);
	if (err) {
	if (err) {
		en_err(priv, "failed reserving range for TX rings\n");
		en_err(priv, "failed reserving range for TX rings\n");
		return err;
		return err;
@@ -949,7 +954,7 @@ int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
				      prof->tx_ring_size, i, TX))
				      prof->tx_ring_size, i, TX))
			goto err;
			goto err;


		if (mlx4_en_create_tx_ring(priv, &priv->tx_ring[i], base_tx_qpn + i,
		if (mlx4_en_create_tx_ring(priv, &priv->tx_ring[i], priv->base_tx_qpn + i,
					   prof->tx_ring_size, TXBB_SIZE))
					   prof->tx_ring_size, TXBB_SIZE))
			goto err;
			goto err;
	}
	}
@@ -969,7 +974,6 @@ int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)


err:
err:
	en_err(priv, "Failed to allocate NIC resources\n");
	en_err(priv, "Failed to allocate NIC resources\n");
	mlx4_qp_release_range(priv->mdev->dev, base_tx_qpn, priv->tx_ring_num);
	return -ENOMEM;
	return -ENOMEM;
}
}


+1 −0
Original line number Original line Diff line number Diff line
@@ -495,6 +495,7 @@ struct mlx4_en_priv {
	int vids[128];
	int vids[128];
	bool wol;
	bool wol;
	struct device *ddev;
	struct device *ddev;
	int base_tx_qpn;


#ifdef CONFIG_MLX4_EN_DCB
#ifdef CONFIG_MLX4_EN_DCB
	struct ieee_ets ets;
	struct ieee_ets ets;