Re: [Intel-wired-lan] [PATCH iwl-next 3/3] iavf: use cached page_pool ref in skb helpers

"Loktionov, Aleksandr" <[email protected]> Fri, 31 Jul 2026 13:38:54 +0000
Newsgroups org.osuosl.intel-wired-lan,org.kernel.vger.netdev
Message-ID <IA3PR11MB8986656385D04962DBF4BFA8E5C82@IA3PR11MB8986.namprd11.prod.outlook.com>

> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf
> Of Matt Vollrath
> Sent: Friday, July 31, 2026 2:41 PM
> To: [email protected]
> Cc: [email protected]; Lobakin, Aleksander
> <[email protected]>; Nguyen, Anthony L
> <[email protected]>; Kitszel, Przemyslaw
> <[email protected]>; Andrew Lunn <[email protected]>;
> David S . Miller <[email protected]>; Eric Dumazet
> <[email protected]>; Jakub Kicinski <[email protected]>; Paolo Abeni
> <[email protected]>; Simon Horman <[email protected]>; Matt Vollrath
> <[email protected]>
> Subject: [Intel-wired-lan] [PATCH iwl-next 3/3] iavf: use cached
> page_pool ref in skb helpers
>=20
> Deriving a reference to the page pool from netmem_desc requires
> loading the struct. We already have a cached reference to the pool, so
> use that instead.
>=20
> Signed-off-by: Matt Vollrath <[email protected]>
> Assisted-by: Claude:claude-5-fable
> ---
>  drivers/net/ethernet/intel/iavf/iavf_txrx.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
>=20
> diff --git a/drivers/net/ethernet/intel/iavf/iavf_txrx.c
> b/drivers/net/ethernet/intel/iavf/iavf_txrx.c
> index 3ae2f0a0ee4d..9dc5f0761d8b 100644
> --- a/drivers/net/ethernet/intel/iavf/iavf_txrx.c
> +++ b/drivers/net/ethernet/intel/iavf/iavf_txrx.c
> @@ -1184,6 +1184,7 @@ static bool iavf_cleanup_headers(struct
> iavf_ring *rx_ring, struct sk_buff *skb)
>=20
>  /**
>   * iavf_add_rx_frag - Add contents of Rx buffer to sk_buff
> + * @pp: page pool the buffer was allocated from
>   * @skb: sk_buff to place the data into
>   * @rx_buffer: buffer containing page to add
>   * @size: packet length from rx_desc
> @@ -1193,11 +1194,11 @@ static bool iavf_cleanup_headers(struct
> iavf_ring *rx_ring, struct sk_buff *skb)
>   *
>   * The function will then update the page offset.
>   **/
> -static void iavf_add_rx_frag(struct sk_buff *skb,
> +static void iavf_add_rx_frag(const struct page_pool *pp, struct
> sk_buff
> +*skb,
>  			     const struct libeth_fqe *rx_buffer,
>  			     unsigned int size)
>  {
> -	u32 hr =3D netmem_get_pp(rx_buffer->netmem)->p.offset;
> +	u32 hr =3D pp->p.offset;
>=20
>  	skb_add_rx_frag_netmem(skb, skb_shinfo(skb)->nr_frags,
>  			       rx_buffer->netmem, rx_buffer->offset + hr,
> @@ -1206,17 +1207,19 @@ static void iavf_add_rx_frag(struct sk_buff
> *skb,
>=20
>  /**
>   * iavf_build_skb - Build skb around an existing buffer
> + * @pp: page pool the buffer was allocated from
>   * @rx_buffer: Rx buffer to pull data from
>   * @size: size of buffer to add to skb
>   *
>   * This function builds an skb around an existing Rx buffer, taking
> care
>   * to set up the skb correctly and avoid any memcpy overhead.
>   */
> -static struct sk_buff *iavf_build_skb(const struct libeth_fqe
> *rx_buffer,
> +static struct sk_buff *iavf_build_skb(const struct page_pool *pp,
> +				      const struct libeth_fqe *rx_buffer,
>  				      unsigned int size)
>  {
>  	struct page *buf_page =3D __netmem_to_page(rx_buffer->netmem);
> -	u32 hr =3D pp_page_to_nmdesc(buf_page)->pp->p.offset;
> +	u32 hr =3D pp->p.offset;
>  	struct sk_buff *skb;
>  	void *va;
>=20
> @@ -1430,9 +1433,9 @@ static int iavf_clean_rx_irq(struct iavf_ring
> *rx_ring, int budget)
>=20
>  		/* retrieve a buffer from the ring */
>  		if (skb)
> -			iavf_add_rx_frag(skb, rx_buffer, fields.len);
> +			iavf_add_rx_frag(pp, skb, rx_buffer, fields.len);
>  		else
> -			skb =3D iavf_build_skb(rx_buffer, fields.len);
> +			skb =3D iavf_build_skb(pp, rx_buffer, fields.len);
>=20
>  		/* exit if we failed to retrieve a buffer */
>  		if (!skb) {
> --
> 2.43.0

Reviewed-by: Aleksandr Loktionov <[email protected]>