>-----Original Message----- >From: Intel-wired-lan <intel-wired-lan-bounces@xxxxxxxxxx> On Behalf Of >Zaremba, Larysa >Sent: Wednesday, May 15, 2024 9:32 PM >To: intel-wired-lan@xxxxxxxxxxxxxxxx; Keller, Jacob E <jacob.e.keller@xxxxxxxxx> >Cc: Fijalkowski, Maciej <maciej.fijalkowski@xxxxxxxxx>; Jesper Dangaard Brouer ><hawk@xxxxxxxxxx>; Daniel Borkmann <daniel@xxxxxxxxxxxxx>; Zaremba, >Larysa <larysa.zaremba@xxxxxxxxx>; Kitszel, Przemyslaw ><przemyslaw.kitszel@xxxxxxxxx>; John Fastabend ><john.fastabend@xxxxxxxxx>; Alexei Starovoitov <ast@xxxxxxxxxx>; David S. >Miller <davem@xxxxxxxxxxxxx>; Eric Dumazet <edumazet@xxxxxxxxxx>; >netdev@xxxxxxxxxxxxxxx; Jakub Kicinski <kuba@xxxxxxxxxx>; >bpf@xxxxxxxxxxxxxxx; Paolo Abeni <pabeni@xxxxxxxxxx>; Magnus Karlsson ><magnus.karlsson@xxxxxxxxx>; Bagnucki, Igor <igor.bagnucki@xxxxxxxxx>; >linux-kernel@xxxxxxxxxxxxxxx >Subject: [Intel-wired-lan] [PATCH iwl-net 2/3] ice: add flag to distinguish reset >from .ndo_bpf in XDP rings config > >Commit 6624e780a577 ("ice: split ice_vsi_setup into smaller functions") has >placed ice_vsi_free_q_vectors() after ice_destroy_xdp_rings() in the rebuild >process. The behaviour of the XDP rings config functions is context-dependent, >so the change of order has led to >ice_destroy_xdp_rings() doing additional work and removing XDP prog, when it >was supposed to be preserved. > >Also, dependency on the PF state reset flags creates an additional, fortunately >less common problem: > >* PFR is requested e.g. by tx_timeout handler >* .ndo_bpf() is asked to delete the program, calls ice_destroy_xdp_rings(), > but reset flag is set, so rings are destroyed without deleting the > program >* ice_vsi_rebuild tries to delete non-existent XDP rings, because the > program is still on the VSI >* system crashes > >With a similar race, when requested to attach a program, >ice_prepare_xdp_rings() can actually skip setting the program in the VSI and >nevertheless report success. > >Instead of reverting to the old order of function calls, add an enum argument >to both ice_prepare_xdp_rings() and ice_destroy_xdp_rings() in order to >distinguish between calls from rebuild and .ndo_bpf(). > >Fixes: efc2214b6047 ("ice: Add support for XDP") >Reviewed-by: Igor Bagnucki <igor.bagnucki@xxxxxxxxx> >Signed-off-by: Larysa Zaremba <larysa.zaremba@xxxxxxxxx> >--- > drivers/net/ethernet/intel/ice/ice.h | 11 +++++++++-- > drivers/net/ethernet/intel/ice/ice_lib.c | 5 +++-- >drivers/net/ethernet/intel/ice/ice_main.c | 22 ++++++++++++---------- > 3 files changed, 24 insertions(+), 14 deletions(-) > Tested-by: Chandan Kumar Rout <chandanx.rout@xxxxxxxxx> (A Contingent Worker at Intel)