net/mlx4_en: try to use high order pages for RX rings
Subsystems (4)
PATCH 1/1 net/mlx4_en: try to use high order pages for RX rings
From: Eric Dumazet <[email protected]>
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.
---
drivers/net/ethernet/mellanox/mlx4/en_rx.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
drivers/net/ethernet/mellanox/mlx4/en_rx.c +5 -8
@@ -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 ;
Quoted 45 lines · Eric Dumazet
From: Eric Dumazet <[email protected]>
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 <[email protected]>--- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-)drivers/net/ethernet/mellanox/mlx4/en_rx.c +4
-7@@ -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);
drivers/net/ethernet/mellanox/mlx4/en_rx.c void mlx4_en_destroy_rx_ring(struct mlx4_en_priv *priv, · line 450
Quoted 8 lines
drivers/net/ethernet/mellanox/mlx4/en_rx.c +1
-1@@ -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 ;
Thanks Eric.
From: Eric Dumazet <[email protected]>
Date: Tue, 06 Mar 2018 11:12:53 -0800
Quoted 9 lines
From: Eric Dumazet <[email protected]>
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 <[email protected]>
Applied.