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