>-----Original Message-----
>From: Intel-wired-lan <intel-wired-lan-boun...@osuosl.org> On Behalf Of
>Zaremba, Larysa
>Sent: Wednesday, May 15, 2024 9:32 PM
>To: intel-wired-...@lists.osuosl.org; Keller, Jacob E
><jacob.e.kel...@intel.com>
>Cc: Fijalkowski, Maciej <maciej.fijalkow...@intel.com>; Jesper Dangaard Brouer
><h...@kernel.org>; Daniel Borkmann <dan...@iogearbox.net>; Zaremba,
>Larysa <larysa.zare...@intel.com>; Kitszel, Przemyslaw
><przemyslaw.kits...@intel.com>; John Fastabend
><john.fastab...@gmail.com>; Alexei Starovoitov <a...@kernel.org>; David S.
>Miller <da...@davemloft.net>; Eric Dumazet <eduma...@google.com>;
>net...@vger.kernel.org; Jakub Kicinski <k...@kernel.org>;
>b...@vger.kernel.org; Paolo Abeni <pab...@redhat.com>; Magnus Karlsson
><magnus.karls...@gmail.com>; Bagnucki, Igor <igor.bagnu...@intel.com>;
>linux-ker...@vger.kernel.org
>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.bagnu...@intel.com>
>Signed-off-by: Larysa Zaremba <larysa.zare...@intel.com>
>---
> 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.r...@intel.com> (A Contingent Worker at
Intel)