Message ID | 1520363573.109662.29.camel@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net/mlx4_en: try to use high order pages for RX rings | expand |
On 06/03/2018 9:12 PM, Eric Dumazet wrote: > From: Eric Dumazet <edumazet@google.com> > > RX rings can fit most of the time in a contiguous piece of memory, > so lets use kvzalloc_node/kvfree instead of vzalloc_node/vfree > > Note that kvzalloc_node() automatically falls back to another node, > there is no need to do the fallback ourselves. > > Signed-off-by: Eric Dumazet <edumazet@google.com> > --- > drivers/net/ethernet/mellanox/mlx4/en_rx.c | 13 +++++-------- > 1 file changed, 5 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > index c2c6bd7578fdeeee42ded9b10c3993742a244b8f..05787efef492b1c0c6ce540ef73647fad91ce282 100644 > --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c > +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > @@ -291,13 +291,10 @@ int mlx4_en_create_rx_ring(struct mlx4_en_priv *priv, > > tmp = size * roundup_pow_of_two(MLX4_EN_MAX_RX_FRAGS * > sizeof(struct mlx4_en_rx_alloc)); > - ring->rx_info = vzalloc_node(tmp, node); > + ring->rx_info = kvzalloc_node(tmp, GFP_KERNEL, node); > if (!ring->rx_info) { > - ring->rx_info = vzalloc(tmp); > - if (!ring->rx_info) { > - err = -ENOMEM; > - goto err_xdp_info; > - } > + err = -ENOMEM; > + goto err_xdp_info; > } > > en_dbg(DRV, priv, "Allocated rx_info ring at addr:%p size:%d\n", > @@ -318,7 +315,7 @@ int mlx4_en_create_rx_ring(struct mlx4_en_priv *priv, > return 0; > > err_info: > - vfree(ring->rx_info); > + kvfree(ring->rx_info); > ring->rx_info = NULL; > err_xdp_info: > xdp_rxq_info_unreg(&ring->xdp_rxq); > @@ -447,7 +444,7 @@ void mlx4_en_destroy_rx_ring(struct mlx4_en_priv *priv, > bpf_prog_put(old_prog); > xdp_rxq_info_unreg(&ring->xdp_rxq); > mlx4_free_hwq_res(mdev->dev, &ring->wqres, size * stride + TXBB_SIZE); > - vfree(ring->rx_info); > + kvfree(ring->rx_info); > ring->rx_info = NULL; > kfree(ring); > *pring = NULL; > Reviewed-by: Tariq Toukan <tariqt@mellanox.com> Thanks Eric.
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Tue, 06 Mar 2018 11:12:53 -0800 > From: Eric Dumazet <edumazet@google.com> > > RX rings can fit most of the time in a contiguous piece of memory, > so lets use kvzalloc_node/kvfree instead of vzalloc_node/vfree > > Note that kvzalloc_node() automatically falls back to another node, > there is no need to do the fallback ourselves. > > Signed-off-by: Eric Dumazet <edumazet@google.com> Applied.
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index c2c6bd7578fdeeee42ded9b10c3993742a244b8f..05787efef492b1c0c6ce540ef73647fad91ce282 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c @@ -291,13 +291,10 @@ int mlx4_en_create_rx_ring(struct mlx4_en_priv *priv, tmp = size * roundup_pow_of_two(MLX4_EN_MAX_RX_FRAGS * sizeof(struct mlx4_en_rx_alloc)); - ring->rx_info = vzalloc_node(tmp, node); + ring->rx_info = kvzalloc_node(tmp, GFP_KERNEL, node); if (!ring->rx_info) { - ring->rx_info = vzalloc(tmp); - if (!ring->rx_info) { - err = -ENOMEM; - goto err_xdp_info; - } + err = -ENOMEM; + goto err_xdp_info; } en_dbg(DRV, priv, "Allocated rx_info ring at addr:%p size:%d\n", @@ -318,7 +315,7 @@ int mlx4_en_create_rx_ring(struct mlx4_en_priv *priv, return 0; err_info: - vfree(ring->rx_info); + kvfree(ring->rx_info); ring->rx_info = NULL; err_xdp_info: xdp_rxq_info_unreg(&ring->xdp_rxq); @@ -447,7 +444,7 @@ void mlx4_en_destroy_rx_ring(struct mlx4_en_priv *priv, bpf_prog_put(old_prog); xdp_rxq_info_unreg(&ring->xdp_rxq); mlx4_free_hwq_res(mdev->dev, &ring->wqres, size * stride + TXBB_SIZE); - vfree(ring->rx_info); + kvfree(ring->rx_info); ring->rx_info = NULL; kfree(ring); *pring = NULL;