[PATCH net 0/3] mlx4 fixes

STALE5103d

Revision v1 of 2 in this series.

5 messages, 2 authors, 2012-10-26 · open the first message on its own page

[PATCH net 0/3] mlx4 fixes

From: Or Gerlitz <hidden>
Date: 2012-10-25 11:12:56

Hi Dave,

Few mlx4 driver fixes for net.

thanks,

Or.


Dotan Barak (1):
  net/mlx4_core: Unmap UAR also in the case of error flow

Jack Morgenstein (1):
  net/mlx4_en: Fix double-release-range in tx-rings

Moni Shoua (1):
  net/mlx4_en: Don't use vlan tag value as an indication for vlan presence

 drivers/net/ethernet/mellanox/mlx4/en_tx.c |    3 +--
 drivers/net/ethernet/mellanox/mlx4/eq.c    |   18 ++++++++++++++----
 2 files changed, 15 insertions(+), 6 deletions(-)

[PATCH net 2/3] net/mlx4_en: Don't use vlan tag value as an indication for vlan presence

From: Or Gerlitz <hidden>
Date: 2012-10-25 11:12:57

From: Moni Shoua <redacted>

The vlan tag can be zero. This is why it can't serve as an indication
that packet requires VLAN header in the TX flow.

Signed-off-by: Moni Shoua <redacted>
Signed-off-by: Or Gerlitz <redacted>
---
 drivers/net/ethernet/mellanox/mlx4/en_tx.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
index 0a51095..b35094c 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
@@ -711,7 +711,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
 	if (bounce)
 		tx_desc = mlx4_en_bounce_to_desc(priv, ring, index, desc_size);
 
-	if (ring->bf_enabled && desc_size <= MAX_BF && !bounce && !vlan_tag) {
+	if (ring->bf_enabled && desc_size <= MAX_BF && !bounce && !vlan_tx_tag_present(skb)) {
 		*(__be32 *) (&tx_desc->ctrl.vlan_tag) |= cpu_to_be32(ring->doorbell_qpn);
 		op_own |= htonl((bf_index & 0xffff) << 8);
 		/* Ensure new descirptor hits memory
-- 
1.7.1

[PATCH net 1/3] net/mlx4_en: Fix double-release-range in tx-rings

From: Or Gerlitz <hidden>
Date: 2012-10-25 11:12:58

From: Jack Morgenstein <redacted>

The QP range is reserved as a single block. However, when freeing the
en resources, the tx-ring QPs are released both in mlx4_en_destroy_tx_ring
(one at a time) and in mlx4_en_free_resources (as a block release).

Fix by eliminating the one-at-a-time release in mlx4_en_destroy_tx_ring.

Signed-off-by: Jack Morgenstein <redacted>
Signed-off-by: Or Gerlitz <redacted>
---
 drivers/net/ethernet/mellanox/mlx4/en_tx.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
index c10e3a6..0a51095 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
@@ -143,7 +143,6 @@ void mlx4_en_destroy_tx_ring(struct mlx4_en_priv *priv,
 		mlx4_bf_free(mdev->dev, &ring->bf);
 	mlx4_qp_remove(mdev->dev, &ring->qp);
 	mlx4_qp_free(mdev->dev, &ring->qp);
-	mlx4_qp_release_range(mdev->dev, ring->qpn, 1);
 	mlx4_en_unmap_buffer(&ring->wqres.buf);
 	mlx4_free_hwq_res(mdev->dev, &ring->wqres, ring->buf_size);
 	kfree(ring->bounce_buf);
-- 
1.7.1

[PATCH net 3/3] net/mlx4_core: Unmap UAR also in the case of error flow

From: Or Gerlitz <hidden>
Date: 2012-10-25 11:12:59

From: Dotan Barak <redacted>

If a failure takes place during the EQ creation, we need to unmap the
UAR memory block too.

Signed-off-by: Dotan Barak <redacted>
Signed-off-by: Uri Habusha <redacted>
Signed-off-by: Or Gerlitz <redacted>
---
 drivers/net/ethernet/mellanox/mlx4/eq.c |   18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx4/eq.c b/drivers/net/ethernet/mellanox/mlx4/eq.c
index 51c7649..083767b 100644
--- a/drivers/net/ethernet/mellanox/mlx4/eq.c
+++ b/drivers/net/ethernet/mellanox/mlx4/eq.c
@@ -843,6 +843,18 @@ static void __iomem *mlx4_get_eq_uar(struct mlx4_dev *dev, struct mlx4_eq *eq)
 	return priv->eq_table.uar_map[index] + 0x800 + 8 * (eq->eqn % 4);
 }
 
+static void mlx4_unmap_uar(struct mlx4_dev *dev)
+{
+	struct mlx4_priv *priv = mlx4_priv(dev);
+	int i;
+
+	for (i = 0; i < mlx4_num_eq_uar(dev); ++i)
+		if (priv->eq_table.uar_map[i]) {
+			iounmap(priv->eq_table.uar_map[i]);
+			priv->eq_table.uar_map[i] = NULL;
+		}
+}
+
 static int mlx4_create_eq(struct mlx4_dev *dev, int nent,
 			  u8 intr, struct mlx4_eq *eq)
 {
@@ -1207,6 +1219,7 @@ err_out_unmap:
 	mlx4_free_irqs(dev);
 
 err_out_bitmap:
+	mlx4_unmap_uar(dev);
 	mlx4_bitmap_cleanup(&priv->eq_table.bitmap);
 
 err_out_free:
@@ -1231,10 +1244,7 @@ void mlx4_cleanup_eq_table(struct mlx4_dev *dev)
 	if (!mlx4_is_slave(dev))
 		mlx4_unmap_clr_int(dev);
 
-	for (i = 0; i < mlx4_num_eq_uar(dev); ++i)
-		if (priv->eq_table.uar_map[i])
-			iounmap(priv->eq_table.uar_map[i]);
-
+	mlx4_unmap_uar(dev);
 	mlx4_bitmap_cleanup(&priv->eq_table.bitmap);
 
 	kfree(priv->eq_table.uar_map);
-- 
1.7.1

Re: [PATCH net 0/3] mlx4 fixes

From: David Miller <davem@davemloft.net>
Date: 2012-10-26 07:35:03

From: Or Gerlitz <redacted>
Date: Thu, 25 Oct 2012 13:12:46 +0200
Dotan Barak (1):
  net/mlx4_core: Unmap UAR also in the case of error flow

Jack Morgenstein (1):
  net/mlx4_en: Fix double-release-range in tx-rings

Moni Shoua (1):
  net/mlx4_en: Don't use vlan tag value as an indication for vlan presence
All applied, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help