>-----Original Message-----
>From: Intel-wired-lan <[email protected]> On Behalf Of
>Zaremba, Larysa
>Sent: Wednesday, May 15, 2024 9:32 PM
>To: [email protected]; Keller, Jacob E
><[email protected]>
>Cc: Fijalkowski, Maciej <[email protected]>; Jesper Dangaard Brouer
><[email protected]>; Daniel Borkmann <[email protected]>; Zaremba,
>Larysa <[email protected]>; Kitszel, Przemyslaw
><[email protected]>; John Fastabend
><[email protected]>; Alexei Starovoitov <[email protected]>; David S.
>Miller <[email protected]>; Eric Dumazet <[email protected]>;
>[email protected]; Jakub Kicinski <[email protected]>;
>[email protected]; Paolo Abeni <[email protected]>; Magnus Karlsson
><[email protected]>; Bagnucki, Igor <[email protected]>;
>[email protected]
>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 <[email protected]>
>Signed-off-by: Larysa Zaremba <[email protected]>
>---
> 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 <[email protected]> (A Contingent Worker at
Intel)