RE: [Intel-wired-lan] [PATCH iwl-net 2/3] ice: add flag to distinguish reset from .ndo_bpf in XDP rings config

From: Rout, ChandanX
Date: Thu May 30 2024 - 01:55:44 EST




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