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: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9858d2d1ac
commit
044ca2a5f2
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue