>-----Original Message-----
>From: Intel-wired-lan <[email protected]> On Behalf Of
>Fijalkowski, Maciej
>Sent: Thursday, January 23, 2025 8:31 PM
>To: [email protected]
>Cc: Fijalkowski, Maciej <[email protected]>;
>[email protected]; [email protected]; Nguyen, Anthony L
><[email protected]>; Simon Horman <[email protected]>; Kitszel,
>Przemyslaw <[email protected]>; Keller, Jacob E
><[email protected]>; Maxwell, Jon <[email protected]>; Karlsson,
>Magnus <[email protected]>
>Subject: [Intel-wired-lan] [PATCH v5 iwl-net 2/3] ice: gather page_count()'s of
>each frag right before XDP prog call
>
>If we store the pgcnt on few fragments while being in the middle of gathering
>the whole frame and we stumbled upon DD bit not being set, we terminate the
>NAPI Rx processing loop and come back later on. Then on next NAPI execution
>we work on previously stored pgcnt.
>
>Imagine that second half of page was used actively by networking stack and by
>the time we came back, stack is not busy with this page anymore and
>decremented the refcnt. The page reuse algorithm in this case should be good
>to reuse the page but given the old refcnt it will not do so and attempt to
>release the page via page_frag_cache_drain() with pagecnt_bias used as an arg.
>This in turn will result in negative refcnt on struct page, which was initially
>observed by Xu Du.
>
>Therefore, move the page count storage from ice_get_rx_buf() to a place where
>we are sure that whole frame has been collected, but before calling XDP
>program as it internally can also change the page count of fragments belonging
>to xdp_buff.
>
>Fixes: ac0753391195 ("ice: Store page count inside ice_rx_buf")
>Reported-and-tested-by: Xu Du <[email protected]>
>Reviewed-by: Przemek Kitszel <[email protected]>
>Reviewed-by: Simon Horman <[email protected]>
>Co-developed-by: Jacob Keller <[email protected]>
>Signed-off-by: Jacob Keller <[email protected]>
>Signed-off-by: Maciej Fijalkowski <[email protected]>
>---
> drivers/net/ethernet/intel/ice/ice_txrx.c | 27 ++++++++++++++++++++++-
> 1 file changed, 26 insertions(+), 1 deletion(-)
>

Tested-by: Chandan Kumar Rout <[email protected]> (A Contingent Worker at 
Intel)

Reply via email to