netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues
@ 2017-02-01  6:35 Martin KaFai Lau
  2017-02-01  6:35 ` [PATCH net v2 1/2] mlx4: Fix memory leak after mlx4_en_update_priv() Martin KaFai Lau
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Martin KaFai Lau @ 2017-02-01  6:35 UTC (permalink / raw)
  To: netdev; +Cc: Saeed Mahameed, Tariq Toukan, Kernel Team

This patchset fixes misc bugs after reinitializing
queues (e.g. by ethtool -L).

v2:
* Add another fix to mem leak in tx_ring[t] and tx_cq[t]
* In mlx4_en_try_alloc_resources(),
  move all xdp_prog logic after calling mlx4_en_alloc_resources()

Martin KaFai Lau (2):
  mlx4: Fix memory leak after mlx4_en_update_priv()
  mlx4: xdp_prog becomes inactive after mlx4_en_try_alloc_resources()

 drivers/net/ethernet/mellanox/mlx4/en_ethtool.c |  4 +--
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c  | 35 ++++++++++++++++++-------
 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h    |  3 ++-
 3 files changed, 29 insertions(+), 13 deletions(-)

-- 
2.5.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net v2 1/2] mlx4: Fix memory leak after mlx4_en_update_priv()
  2017-02-01  6:35 [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues Martin KaFai Lau
@ 2017-02-01  6:35 ` Martin KaFai Lau
  2017-02-02 17:10   ` Tariq Toukan
  2017-02-01  6:35 ` [PATCH net v2 2/2] mlx4: xdp_prog becomes inactive after ethtool '-L' or '-G' Martin KaFai Lau
  2017-02-03  2:27 ` [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues David Miller
  2 siblings, 1 reply; 6+ messages in thread
From: Martin KaFai Lau @ 2017-02-01  6:35 UTC (permalink / raw)
  To: netdev; +Cc: Saeed Mahameed, Tariq Toukan, Kernel Team, Eugenia Emantayev

In mlx4_en_update_priv(), dst->tx_ring[t] and dst->tx_cq[t]
are over-written by src->tx_ring[t] and src->tx_cq[t] without
first calling kfree.

One of the reproducible code paths is by doing 'ethtool -L'.

The fix is to do the kfree in mlx4_en_free_resources().

Here is the kmemleak report:
unreferenced object 0xffff880841211800 (size 2048):
  comm "ethtool", pid 3096, jiffies 4294716940 (age 528.353s)
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<ffffffff81930718>] kmemleak_alloc+0x28/0x50
    [<ffffffff8120b213>] kmem_cache_alloc_trace+0x103/0x260
    [<ffffffff8170e0a8>] mlx4_en_try_alloc_resources+0x118/0x1a0
    [<ffffffff817065a9>] mlx4_en_set_ringparam+0x169/0x210
    [<ffffffff818040c5>] dev_ethtool+0xae5/0x2190
    [<ffffffff8181b898>] dev_ioctl+0x168/0x6f0
    [<ffffffff817d7a72>] sock_do_ioctl+0x42/0x50
    [<ffffffff817d819b>] sock_ioctl+0x21b/0x2d0
    [<ffffffff81247a73>] do_vfs_ioctl+0x93/0x6a0
    [<ffffffff812480f9>] SyS_ioctl+0x79/0x90
    [<ffffffff8193d7ea>] entry_SYSCALL_64_fastpath+0x18/0xad
    [<ffffffffffffffff>] 0xffffffffffffffff
unreferenced object 0xffff880841213000 (size 2048):
  comm "ethtool", pid 3096, jiffies 4294716940 (age 528.353s)
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<ffffffff81930718>] kmemleak_alloc+0x28/0x50
    [<ffffffff8120b213>] kmem_cache_alloc_trace+0x103/0x260
    [<ffffffff8170e0cb>] mlx4_en_try_alloc_resources+0x13b/0x1a0
    [<ffffffff817065a9>] mlx4_en_set_ringparam+0x169/0x210
    [<ffffffff818040c5>] dev_ethtool+0xae5/0x2190
    [<ffffffff8181b898>] dev_ioctl+0x168/0x6f0
    [<ffffffff817d7a72>] sock_do_ioctl+0x42/0x50
    [<ffffffff817d819b>] sock_ioctl+0x21b/0x2d0
    [<ffffffff81247a73>] do_vfs_ioctl+0x93/0x6a0
    [<ffffffff812480f9>] SyS_ioctl+0x79/0x90
    [<ffffffff8193d7ea>] entry_SYSCALL_64_fastpath+0x18/0xad
    [<ffffffffffffffff>] 0xffffffffffffffff

(gdb) list *mlx4_en_try_alloc_resources+0x118
0xffffffff8170e0a8 is in mlx4_en_try_alloc_resources (drivers/net/ethernet/mellanox/mlx4/en_netdev.c:2145).
2140                    if (!dst->tx_ring_num[t])
2141                            continue;
2142
2143                    dst->tx_ring[t] = kzalloc(sizeof(struct mlx4_en_tx_ring *) *
2144                                              MAX_TX_RINGS, GFP_KERNEL);
2145                    if (!dst->tx_ring[t])
2146                            goto err_free_tx;
2147
2148                    dst->tx_cq[t] = kzalloc(sizeof(struct mlx4_en_cq *) *
2149                                            MAX_TX_RINGS, GFP_KERNEL);
(gdb) list *mlx4_en_try_alloc_resources+0x13b
0xffffffff8170e0cb is in mlx4_en_try_alloc_resources (drivers/net/ethernet/mellanox/mlx4/en_netdev.c:2150).
2145                    if (!dst->tx_ring[t])
2146                            goto err_free_tx;
2147
2148                    dst->tx_cq[t] = kzalloc(sizeof(struct mlx4_en_cq *) *
2149                                            MAX_TX_RINGS, GFP_KERNEL);
2150                    if (!dst->tx_cq[t]) {
2151                            kfree(dst->tx_ring[t]);
2152                            goto err_free_tx;
2153                    }
2154            }

Fixes: ec25bc04ed8e ("net/mlx4_en: Add resilience in low memory systems")
Cc: Eugenia Emantayev <eugenia@mellanox.com>
Cc: Saeed Mahameed <saeedm@mellanox.com>
Cc: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
---
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 761f8b12399c..3abcead208d2 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -2042,6 +2042,8 @@ static void mlx4_en_free_resources(struct mlx4_en_priv *priv)
 			if (priv->tx_cq[t] && priv->tx_cq[t][i])
 				mlx4_en_destroy_cq(priv, &priv->tx_cq[t][i]);
 		}
+		kfree(priv->tx_ring[t]);
+		kfree(priv->tx_cq[t]);
 	}
 
 	for (i = 0; i < priv->rx_ring_num; i++) {
@@ -2214,7 +2216,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;
-	int t;
 
 	en_dbg(DRV, priv, "Destroying netdev on port:%d\n", priv->port);
 
@@ -2248,11 +2249,6 @@ void mlx4_en_destroy_netdev(struct net_device *dev)
 	mlx4_en_free_resources(priv);
 	mutex_unlock(&mdev->state_lock);
 
-	for (t = 0; t < MLX4_EN_NUM_TX_TYPES; t++) {
-		kfree(priv->tx_ring[t]);
-		kfree(priv->tx_cq[t]);
-	}
-
 	free_netdev(dev);
 }
 
-- 
2.5.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net v2 2/2] mlx4: xdp_prog becomes inactive after ethtool '-L' or '-G'
  2017-02-01  6:35 [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues Martin KaFai Lau
  2017-02-01  6:35 ` [PATCH net v2 1/2] mlx4: Fix memory leak after mlx4_en_update_priv() Martin KaFai Lau
@ 2017-02-01  6:35 ` Martin KaFai Lau
  2017-02-02 17:13   ` Tariq Toukan
  2017-02-03  2:27 ` [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues David Miller
  2 siblings, 1 reply; 6+ messages in thread
From: Martin KaFai Lau @ 2017-02-01  6:35 UTC (permalink / raw)
  To: netdev; +Cc: Saeed Mahameed, Tariq Toukan, Kernel Team, Brenden Blanco

After calling mlx4_en_try_alloc_resources (e.g. by changing the
number of rx-queues with ethtool -L), the existing xdp_prog becomes
inactive.

The bug is that the xdp_prog ptr has not been carried over from
the old rx-queues to the new rx-queues

Fixes: 47a38e155037 ("net/mlx4_en: add support for fast rx drop bpf program")
Cc: Brenden Blanco <bblanco@plumgrid.com>
Cc: Saeed Mahameed <saeedm@mellanox.com>
Cc: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
---
 drivers/net/ethernet/mellanox/mlx4/en_ethtool.c |  4 ++--
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c  | 27 +++++++++++++++++++++----
 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h    |  3 ++-
 3 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index d5a9372ed84d..9aa422691954 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -1099,7 +1099,7 @@ static int mlx4_en_set_ringparam(struct net_device *dev,
 	memcpy(&new_prof, priv->prof, sizeof(struct mlx4_en_port_profile));
 	new_prof.tx_ring_size = tx_size;
 	new_prof.rx_ring_size = rx_size;
-	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof);
+	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, true);
 	if (err)
 		goto out;
 
@@ -1774,7 +1774,7 @@ static int mlx4_en_set_channels(struct net_device *dev,
 	new_prof.tx_ring_num[TX_XDP] = xdp_count;
 	new_prof.rx_ring_num = channel->rx_count;
 
-	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof);
+	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, true);
 	if (err)
 		goto out;
 
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 3abcead208d2..3b4961a8e8e4 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -2186,9 +2186,11 @@ static void mlx4_en_update_priv(struct mlx4_en_priv *dst,
 
 int mlx4_en_try_alloc_resources(struct mlx4_en_priv *priv,
 				struct mlx4_en_priv *tmp,
-				struct mlx4_en_port_profile *prof)
+				struct mlx4_en_port_profile *prof,
+				bool carry_xdp_prog)
 {
-	int t;
+	struct bpf_prog *xdp_prog;
+	int i, t;
 
 	mlx4_en_copy_priv(tmp, priv, prof);
 
@@ -2202,6 +2204,23 @@ int mlx4_en_try_alloc_resources(struct mlx4_en_priv *priv,
 		}
 		return -ENOMEM;
 	}
+
+	/* All rx_rings has the same xdp_prog.  Pick the first one. */
+	xdp_prog = rcu_dereference_protected(
+		priv->rx_ring[0]->xdp_prog,
+		lockdep_is_held(&priv->mdev->state_lock));
+
+	if (xdp_prog && carry_xdp_prog) {
+		xdp_prog = bpf_prog_add(xdp_prog, tmp->rx_ring_num);
+		if (IS_ERR(xdp_prog)) {
+			mlx4_en_free_resources(tmp);
+			return PTR_ERR(xdp_prog);
+		}
+		for (i = 0; i < tmp->rx_ring_num; i++)
+			rcu_assign_pointer(tmp->rx_ring[i]->xdp_prog,
+					   xdp_prog);
+	}
+
 	return 0;
 }
 
@@ -2751,7 +2770,7 @@ static int mlx4_xdp_set(struct net_device *dev, struct bpf_prog *prog)
 		en_warn(priv, "Reducing the number of TX rings, to not exceed the max total rings number.\n");
 	}
 
-	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof);
+	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, false);
 	if (err) {
 		if (prog)
 			bpf_prog_sub(prog, priv->rx_ring_num - 1);
@@ -3495,7 +3514,7 @@ int mlx4_en_reset_config(struct net_device *dev,
 	memcpy(&new_prof, priv->prof, sizeof(struct mlx4_en_port_profile));
 	memcpy(&new_prof.hwtstamp_config, &ts_config, sizeof(ts_config));
 
-	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof);
+	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, true);
 	if (err)
 		goto out;
 
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index ba1c6cd0cc79..cec59bc264c9 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -679,7 +679,8 @@ void mlx4_en_set_stats_bitmap(struct mlx4_dev *dev,
 
 int mlx4_en_try_alloc_resources(struct mlx4_en_priv *priv,
 				struct mlx4_en_priv *tmp,
-				struct mlx4_en_port_profile *prof);
+				struct mlx4_en_port_profile *prof,
+				bool carry_xdp_prog);
 void mlx4_en_safe_replace_resources(struct mlx4_en_priv *priv,
 				    struct mlx4_en_priv *tmp);
 
-- 
2.5.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net v2 1/2] mlx4: Fix memory leak after mlx4_en_update_priv()
  2017-02-01  6:35 ` [PATCH net v2 1/2] mlx4: Fix memory leak after mlx4_en_update_priv() Martin KaFai Lau
@ 2017-02-02 17:10   ` Tariq Toukan
  0 siblings, 0 replies; 6+ messages in thread
From: Tariq Toukan @ 2017-02-02 17:10 UTC (permalink / raw)
  To: Martin KaFai Lau, netdev
  Cc: Saeed Mahameed, Tariq Toukan, Kernel Team, Eugenia Emantayev

Hi Martin,

Thanks for your fix!

On 01/02/2017 8:35 AM, Martin KaFai Lau wrote:
> In mlx4_en_update_priv(), dst->tx_ring[t] and dst->tx_cq[t]
> are over-written by src->tx_ring[t] and src->tx_cq[t] without
> first calling kfree.
>
> One of the reproducible code paths is by doing 'ethtool -L'.
>
> The fix is to do the kfree in mlx4_en_free_resources().
>
...
> Fixes: ec25bc04ed8e ("net/mlx4_en: Add resilience in low memory systems")
> Cc: Eugenia Emantayev <eugenia@mellanox.com>
> Cc: Saeed Mahameed <saeedm@mellanox.com>
> Cc: Tariq Toukan <tariqt@mellanox.com>
> Signed-off-by: Martin KaFai Lau <kafai@fb.com>
> ---
>   drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 8 ++------
>   1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> index 761f8b12399c..3abcead208d2 100644
> --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> @@ -2042,6 +2042,8 @@ static void mlx4_en_free_resources(struct mlx4_en_priv *priv)
>   			if (priv->tx_cq[t] && priv->tx_cq[t][i])
>   				mlx4_en_destroy_cq(priv, &priv->tx_cq[t][i]);
>   		}
> +		kfree(priv->tx_ring[t]);
> +		kfree(priv->tx_cq[t]);
>   	}
>   
>   	for (i = 0; i < priv->rx_ring_num; i++) {
> @@ -2214,7 +2216,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;
> -	int t;
>   
>   	en_dbg(DRV, priv, "Destroying netdev on port:%d\n", priv->port);
>   
> @@ -2248,11 +2249,6 @@ void mlx4_en_destroy_netdev(struct net_device *dev)
>   	mlx4_en_free_resources(priv);
>   	mutex_unlock(&mdev->state_lock);
>   
> -	for (t = 0; t < MLX4_EN_NUM_TX_TYPES; t++) {
> -		kfree(priv->tx_ring[t]);
> -		kfree(priv->tx_cq[t]);
> -	}
> -
>   	free_netdev(dev);
>   }
>   
Reviewed-by: Tariq Toukan <tariqt@mellanox.com>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net v2 2/2] mlx4: xdp_prog becomes inactive after ethtool '-L' or '-G'
  2017-02-01  6:35 ` [PATCH net v2 2/2] mlx4: xdp_prog becomes inactive after ethtool '-L' or '-G' Martin KaFai Lau
@ 2017-02-02 17:13   ` Tariq Toukan
  0 siblings, 0 replies; 6+ messages in thread
From: Tariq Toukan @ 2017-02-02 17:13 UTC (permalink / raw)
  To: Martin KaFai Lau, netdev
  Cc: Saeed Mahameed, Tariq Toukan, Kernel Team, Brenden Blanco


On 01/02/2017 8:35 AM, Martin KaFai Lau wrote:
> After calling mlx4_en_try_alloc_resources (e.g. by changing the
> number of rx-queues with ethtool -L), the existing xdp_prog becomes
> inactive.
>
> The bug is that the xdp_prog ptr has not been carried over from
> the old rx-queues to the new rx-queues
>
> Fixes: 47a38e155037 ("net/mlx4_en: add support for fast rx drop bpf program")
> Cc: Brenden Blanco <bblanco@plumgrid.com>
> Cc: Saeed Mahameed <saeedm@mellanox.com>
> Cc: Tariq Toukan <tariqt@mellanox.com>
> Signed-off-by: Martin KaFai Lau <kafai@fb.com>
> ---
>   drivers/net/ethernet/mellanox/mlx4/en_ethtool.c |  4 ++--
>   drivers/net/ethernet/mellanox/mlx4/en_netdev.c  | 27 +++++++++++++++++++++----
>   drivers/net/ethernet/mellanox/mlx4/mlx4_en.h    |  3 ++-
>   3 files changed, 27 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
> index d5a9372ed84d..9aa422691954 100644
> --- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
> +++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
> @@ -1099,7 +1099,7 @@ static int mlx4_en_set_ringparam(struct net_device *dev,
>   	memcpy(&new_prof, priv->prof, sizeof(struct mlx4_en_port_profile));
>   	new_prof.tx_ring_size = tx_size;
>   	new_prof.rx_ring_size = rx_size;
> -	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof);
> +	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, true);
>   	if (err)
>   		goto out;
>   
> @@ -1774,7 +1774,7 @@ static int mlx4_en_set_channels(struct net_device *dev,
>   	new_prof.tx_ring_num[TX_XDP] = xdp_count;
>   	new_prof.rx_ring_num = channel->rx_count;
>   
> -	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof);
> +	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, true);
>   	if (err)
>   		goto out;
>   
> diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> index 3abcead208d2..3b4961a8e8e4 100644
> --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> @@ -2186,9 +2186,11 @@ static void mlx4_en_update_priv(struct mlx4_en_priv *dst,
>   
>   int mlx4_en_try_alloc_resources(struct mlx4_en_priv *priv,
>   				struct mlx4_en_priv *tmp,
> -				struct mlx4_en_port_profile *prof)
> +				struct mlx4_en_port_profile *prof,
> +				bool carry_xdp_prog)
>   {
> -	int t;
> +	struct bpf_prog *xdp_prog;
> +	int i, t;
>   
>   	mlx4_en_copy_priv(tmp, priv, prof);
>   
> @@ -2202,6 +2204,23 @@ int mlx4_en_try_alloc_resources(struct mlx4_en_priv *priv,
>   		}
>   		return -ENOMEM;
>   	}
> +
> +	/* All rx_rings has the same xdp_prog.  Pick the first one. */
> +	xdp_prog = rcu_dereference_protected(
> +		priv->rx_ring[0]->xdp_prog,
> +		lockdep_is_held(&priv->mdev->state_lock));
> +
> +	if (xdp_prog && carry_xdp_prog) {
> +		xdp_prog = bpf_prog_add(xdp_prog, tmp->rx_ring_num);
> +		if (IS_ERR(xdp_prog)) {
> +			mlx4_en_free_resources(tmp);
> +			return PTR_ERR(xdp_prog);
> +		}
> +		for (i = 0; i < tmp->rx_ring_num; i++)
> +			rcu_assign_pointer(tmp->rx_ring[i]->xdp_prog,
> +					   xdp_prog);
> +	}
> +
>   	return 0;
>   }
>   
> @@ -2751,7 +2770,7 @@ static int mlx4_xdp_set(struct net_device *dev, struct bpf_prog *prog)
>   		en_warn(priv, "Reducing the number of TX rings, to not exceed the max total rings number.\n");
>   	}
>   
> -	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof);
> +	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, false);
>   	if (err) {
>   		if (prog)
>   			bpf_prog_sub(prog, priv->rx_ring_num - 1);
> @@ -3495,7 +3514,7 @@ int mlx4_en_reset_config(struct net_device *dev,
>   	memcpy(&new_prof, priv->prof, sizeof(struct mlx4_en_port_profile));
>   	memcpy(&new_prof.hwtstamp_config, &ts_config, sizeof(ts_config));
>   
> -	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof);
> +	err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, true);
>   	if (err)
>   		goto out;
>   
> diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
> index ba1c6cd0cc79..cec59bc264c9 100644
> --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
> +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
> @@ -679,7 +679,8 @@ void mlx4_en_set_stats_bitmap(struct mlx4_dev *dev,
>   
>   int mlx4_en_try_alloc_resources(struct mlx4_en_priv *priv,
>   				struct mlx4_en_priv *tmp,
> -				struct mlx4_en_port_profile *prof);
> +				struct mlx4_en_port_profile *prof,
> +				bool carry_xdp_prog);
>   void mlx4_en_safe_replace_resources(struct mlx4_en_priv *priv,
>   				    struct mlx4_en_priv *tmp);
>   
Reviewed-by: Tariq Toukan <tariqt@mellanox.com>

Thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues
  2017-02-01  6:35 [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues Martin KaFai Lau
  2017-02-01  6:35 ` [PATCH net v2 1/2] mlx4: Fix memory leak after mlx4_en_update_priv() Martin KaFai Lau
  2017-02-01  6:35 ` [PATCH net v2 2/2] mlx4: xdp_prog becomes inactive after ethtool '-L' or '-G' Martin KaFai Lau
@ 2017-02-03  2:27 ` David Miller
  2 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2017-02-03  2:27 UTC (permalink / raw)
  To: kafai; +Cc: netdev, saeedm, tariqt, kernel-team

From: Martin KaFai Lau <kafai@fb.com>
Date: Tue, 31 Jan 2017 22:35:31 -0800

> This patchset fixes misc bugs after reinitializing
> queues (e.g. by ethtool -L).
> 
> v2:
> * Add another fix to mem leak in tx_ring[t] and tx_cq[t]
> * In mlx4_en_try_alloc_resources(),
>   move all xdp_prog logic after calling mlx4_en_alloc_resources()

Series applied, thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-02-03  2:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-01  6:35 [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues Martin KaFai Lau
2017-02-01  6:35 ` [PATCH net v2 1/2] mlx4: Fix memory leak after mlx4_en_update_priv() Martin KaFai Lau
2017-02-02 17:10   ` Tariq Toukan
2017-02-01  6:35 ` [PATCH net v2 2/2] mlx4: xdp_prog becomes inactive after ethtool '-L' or '-G' Martin KaFai Lau
2017-02-02 17:13   ` Tariq Toukan
2017-02-03  2:27 ` [PATCH net v2 0/2] mlx4: Misc bug fixes after reinitializing queues David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).