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]>