> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-boun...@osuosl.org> On Behalf Of Jacob > Keller > Sent: Wednesday, July 31, 2024 6:56 PM > To: Intel Wired LAN <intel-wired-...@lists.osuosl.org>; Nguyen, Anthony L > <anthony.l.ngu...@intel.com> > Cc: Keller, Jacob E <jacob.e.kel...@intel.com> > Subject: [Intel-wired-lan] [PATCH iwl-net] ice: fix accounting for filters > shared by > multiple VSIs > > When adding a switch filter (such as a MAC or VLAN filter), it is expected > that the > driver will detect the case where the filter already exists, and return > -EEXIST. This > is used by calling code such as ice_vc_add_mac_addr, and ice_vsi_add_vlan to > avoid incrementing the accounting fields such as > vsi->num_vlan or vf->num_mac. > > This logic works correctly for the case where only a single VSI has added a > given > switch filter. > > When a second VSI adds the same switch filter, the driver converts the > existing > filter from an ICE_FWD_TO_VSI filter into an ICE_FWD_TO_VSI_LIST filter. This > saves switch resources, by ensuring that multiple VSIs can re-use the same > filter. > > The ice_add_update_vsi_list() function is responsible for doing this > conversion. > When first converting a filter from the FWD_TO_VSI into FWD_TO_VSI_LIST, it > checks if the VSI being added is the same as the existing rule's VSI. In such > a case > it returns -EEXIST. > > However, when the switch rule has already been converted to a > FWD_TO_VSI_LIST, the logic is different. Adding a new VSI in this case just > requires extending the VSI list entry. The logic for checking if the rule > already > exists in this case returns 0 instead of -EEXIST. > > This breaks the accounting logic mentioned above, so the counters for how many > MAC and VLAN filters exist for a given VF or VSI no longer accurately reflect > the > actual count. This breaks other code which relies on these counts. > > In typical usage this primarily affects such filters generally shared by > multiple VSIs > such as VLAN 0, or broadcast and multicast MAC addresses. > > Fix this by correctly reporting -EEXIST in the case of adding the same VSI to > a > switch rule already converted to ICE_FWD_TO_VSI_LIST. > > Fixes: 9daf8208dd4d ("ice: Add support for switch filter programming") > Signed-off-by: Jacob Keller <jacob.e.kel...@intel.com> > --- > --- > drivers/net/ethernet/intel/ice/ice_switch.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c > b/drivers/net/ethernet/intel/ice/ice_switch.c > index fe8847184cb1..0160f0bae8d6 100644 > --- a/drivers/net/ethernet/intel/ice/ice_switch.c > +++ b/drivers/net/ethernet/intel/ice/ice_switch.c > @@ -3194,7 +3194,7 @@ ice_add_update_vsi_list(struct ice_hw *hw,
Tested-by: Rafal Romanowski <rafal.romanow...@intel.com>