> -----Original Message----- > From: Petr Oros <[email protected]> > Sent: Friday, October 2, 2026 6:08 AM > To: [email protected] > Cc: Oros, Petr <[email protected]>; Nguyen, Anthony L > <[email protected]>; Kitszel, Przemyslaw > <[email protected]>; Andrew Lunn <[email protected]>; David S. > Miller <[email protected]>; Eric Dumazet <[email protected]>; Jakub > Kicinski <[email protected]>; Paolo Abeni <[email protected]>; Lobakin, > Aleksander <[email protected]>; Alexei Starovoitov > <[email protected]>; Daniel Borkmann <[email protected]>; Jesper Dangaard > Brouer <[email protected]>; John Fastabend <[email protected]>; > Stanislav Fomichev <[email protected]>; Henry Tieman > > <[email protected]>; Anirudh Venkataramanan > <[email protected]>; Michal Swiatkowski > <[email protected]>; Jesse Brandeburg <[email protected]>; > Preethi Banala <[email protected]>; Kiran Patil > <[email protected]>; Dan Nowlin <[email protected]>; Stephen Hemminger > <[email protected]>; [email protected]; > [email protected]; [email protected] > Subject: [PATCH iwl-net 07/10] ice: take the switch rule AQ error from the > response descriptor > > ice_aq_sw_rules() decides whether a rule removal failed with ENOENT by > reading hw->adminq.sq_last_status after ice_aq_send_cmd() returned. That > field is shared by every admin queue user and is only stable > while the send > queue lock is held. Another AQ command completing in between can overwrite > it, so a failed removal is reported as a generic error, and a successful one > can even be turned into -ENOENT, because the check is not limited to the > failure case. A caller that sees -ENOENT keeps its rule bookkeeping while the > rule is gone from the hardware. > > ice_vsi_sync_fltr() has the same problem with ENOSPC. It checks > sq_last_status only after it has freed the list of filters it tried to add. > Every entry is a separate devres allocation, so freeing a list of thousands > of entries takes seconds, and by then the value usually belongs to a > different command, so the MAC filter overflow handling is never entered. With > debug prints of the error and sq_last_status added to both places: > > ice_aq_sw_rules: opc 0x2a0 status -5 aq 16 > ice 0000:04:00.0 enp4s0f0np0: Failed to add MAC filters err -5 aq 0 > > Use the retval of the descriptor that ice_aq_send_cmd() copies back, only > when the command failed, translate ENOSPC on add to -ENOSPC and let > ice_vsi_sync_fltr() check the return code instead of sq_last_status. > > i40e fixed the same kind of race in commit 53a9e346e159 ("i40e: Fix race > condition while adding/deleting MAC/VLAN filters"). > > Fixes: ca1fdb885e5f ("ice: return correct error code from ice_aq_sw_rules") > Assisted-by: LLM > Signed-off-by: Petr Oros <[email protected]> > --- > drivers/net/ethernet/intel/ice/ice_main.c | 4 +--- > drivers/net/ethernet/intel/ice/ice_switch.c | 13 ++++++++++--- > 2 files changed, 11 insertions(+), 6 deletions(-)
Tested-by: Alexander Nowlin <[email protected]>
