• Jacob Keller's avatar
    i40e: When searching all MAC/VLAN filters, ignore removed filters · 57b341d6
    Jacob Keller authored
    When adding new MAC address filters, the driver determines if it should
    behave in VLAN mode (where all MAC addresses get assigned to every
    existing VLAN) or in non-VLAN mode where MAC addresses get assigned the
    VLAN_ANY identifier. Under some circumstances it is possible that a VLAN
    has been marked for removal (such that all filters of that VLAN are set
    to I40E_FILTER_REMOVE), and a subsequent call to i40e_put_mac_in_vlan
    may occur prior to the driver subtask that syncs filters to the
    hardware.
    
    In this case, we may add filters to the new removed VLAN, even though it
    should have been removed. This is most obvious when first adding a new
    VLAN. We will delete all filters which are in I40E_VLAN_ANY (-1) and
    then re-add them as in VLAN 0 (untagged). Then before we sync filters,
    we will add new MAC address filter, which will be added to every VLAN
    that exists. Unfortunately, this will include I40E_VLAN_ANY, so we will
    end up incorrectly adding filters to the -1 VLAN. This can be fixed by
    simply skipping all filters which are marked for removal.
    
    A similar check is not necessary in i40e_del_mac_all_vlan, since we are
    deleting, and any filter which we find already marked for removal would
    simply be deleted again, which doesn't cause any issues.
    
    Change-Id: I7962154013ce02fe950584690aeeb3ed853d0086
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    57b341d6
i40e_main.c 316 KB