* [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).