* [PATCH V1 1/3] net/mlx4_en: Set correct port parameters during device initialization
2012-06-25 10:24 [PATCH net V1 0/3] net/mlx4: Bug fixes for the mlx4_en driver Yevgeny Petrilin
@ 2012-06-25 10:24 ` Yevgeny Petrilin
2012-06-25 10:24 ` [PATCH V1 2/3] net/mlx4: Use single completion vector after NOP failure Yevgeny Petrilin
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Yevgeny Petrilin @ 2012-06-25 10:24 UTC (permalink / raw)
To: davem; +Cc: netdev, Yevgeny Petrilin
Set valid port parameters: MTU and flow control configuration when
configuring the port during HW device initialization,
prior to the net device open() being called.
Using invalid parameters (such as all zeros)
could lead to bad firmware behavior.
Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
---
drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 926d8aa..a80280e 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -1204,9 +1204,11 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num);
/* Configure port */
+ mlx4_en_calc_rx_buf(dev);
err = mlx4_SET_PORT_general(mdev->dev, priv->port,
- MLX4_EN_MIN_MTU,
- 0, 0, 0, 0);
+ priv->rx_skb_size + ETH_FCS_LEN,
+ prof->tx_pause, prof->tx_ppp,
+ prof->rx_pause, prof->rx_ppp);
if (err) {
en_err(priv, "Failed setting port general configurations "
"for port %d, with error %d\n", priv->port, err);
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH V1 2/3] net/mlx4: Use single completion vector after NOP failure
2012-06-25 10:24 [PATCH net V1 0/3] net/mlx4: Bug fixes for the mlx4_en driver Yevgeny Petrilin
2012-06-25 10:24 ` [PATCH V1 1/3] net/mlx4_en: Set correct port parameters during device initialization Yevgeny Petrilin
@ 2012-06-25 10:24 ` Yevgeny Petrilin
2012-06-25 10:24 ` [PATCH V1 3/3] net/mlx4_en: Release QP range in free_resources Yevgeny Petrilin
2012-06-25 23:30 ` [PATCH net V1 0/3] net/mlx4: Bug fixes for the mlx4_en driver David Miller
3 siblings, 0 replies; 5+ messages in thread
From: Yevgeny Petrilin @ 2012-06-25 10:24 UTC (permalink / raw)
To: davem; +Cc: netdev, Yevgeny Petrilin
Fix a crash at the error flow of NOP command which caused the driver to try and use
a completion vector which wasn't allocated.
Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
---
drivers/net/ethernet/mellanox/mlx4/main.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 18c8deb..c91a2b8 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -1978,6 +1978,8 @@ slave_start:
if (err == -EBUSY && (dev->flags & MLX4_FLAG_MSI_X) &&
!mlx4_is_mfunc(dev)) {
dev->flags &= ~MLX4_FLAG_MSI_X;
+ dev->caps.num_comp_vectors = 1;
+ dev->caps.comp_pool = 0;
pci_disable_msix(pdev);
err = mlx4_setup_hca(dev);
}
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH V1 3/3] net/mlx4_en: Release QP range in free_resources
2012-06-25 10:24 [PATCH net V1 0/3] net/mlx4: Bug fixes for the mlx4_en driver Yevgeny Petrilin
2012-06-25 10:24 ` [PATCH V1 1/3] net/mlx4_en: Set correct port parameters during device initialization Yevgeny Petrilin
2012-06-25 10:24 ` [PATCH V1 2/3] net/mlx4: Use single completion vector after NOP failure Yevgeny Petrilin
@ 2012-06-25 10:24 ` Yevgeny Petrilin
2012-06-25 23:30 ` [PATCH net V1 0/3] net/mlx4: Bug fixes for the mlx4_en driver David Miller
3 siblings, 0 replies; 5+ messages in thread
From: Yevgeny Petrilin @ 2012-06-25 10:24 UTC (permalink / raw)
To: davem; +Cc: netdev, Yevgeny Petrilin
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>
---
drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 12 ++++++++----
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 +
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index a80280e..073b85b 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -929,15 +929,20 @@ void mlx4_en_free_resources(struct mlx4_en_priv *priv)
if (priv->rx_cq[i].buf)
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)
{
struct mlx4_en_port_profile *prof = priv->prof;
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) {
en_err(priv, "failed reserving range for TX rings\n");
return err;
@@ -949,7 +954,7 @@ int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
prof->tx_ring_size, i, TX))
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))
goto err;
}
@@ -969,7 +974,6 @@ int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
err:
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;
}
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index 6ae3509..225c20d 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -495,6 +495,7 @@ struct mlx4_en_priv {
int vids[128];
bool wol;
struct device *ddev;
+ int base_tx_qpn;
#ifdef CONFIG_MLX4_EN_DCB
struct ieee_ets ets;
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH net V1 0/3] net/mlx4: Bug fixes for the mlx4_en driver
2012-06-25 10:24 [PATCH net V1 0/3] net/mlx4: Bug fixes for the mlx4_en driver Yevgeny Petrilin
` (2 preceding siblings ...)
2012-06-25 10:24 ` [PATCH V1 3/3] net/mlx4_en: Release QP range in free_resources Yevgeny Petrilin
@ 2012-06-25 23:30 ` David Miller
3 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2012-06-25 23:30 UTC (permalink / raw)
To: yevgenyp; +Cc: netdev
From: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
Date: Mon, 25 Jun 2012 13:24:10 +0300
> This is a set of 3 bug fixes generated agains net tree:
>
> ---
> Diff from V1:
> Removed atomic counter patch for rework.
>
> Yevgeny Petrilin (3):
> net/mlx4_en: Set correct port parameters during device initialization
> net/mlx4: Use single completion vector after NOP failure
> net/mlx4_en: Release QP range in free_resources
All applied, thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread