• Ivan Vecera's avatar
    ice: Clear default forwarding VSI during VSI release · bd8c624c
    Ivan Vecera authored
    VSI is set as default forwarding one when promisc mode is set for
    PF interface, when PF is switched to switchdev mode or when VF
    driver asks to enable allmulticast or promisc mode for the VF
    interface (when vf-true-promisc-support priv flag is off).
    The third case is buggy because in that case VSI associated with
    VF remains as default one after VF removal.
    
    Reproducer:
    1. Create VF
       echo 1 > sys/class/net/ens7f0/device/sriov_numvfs
    2. Enable allmulticast or promisc mode on VF
       ip link set ens7f0v0 allmulticast on
       ip link set ens7f0v0 promisc on
    3. Delete VF
       echo 0 > sys/class/net/ens7f0/device/sriov_numvfs
    4. Try to enable promisc mode on PF
       ip link set ens7f0 promisc on
    
    Although it looks that promisc mode on PF is enabled the opposite
    is true because ice_vsi_sync_fltr() responsible for IFF_PROMISC
    handling first checks if any other VSI is set as default forwarding
    one and if so the function does not do anything. At this point
    it is not possible to enable promisc mode on PF without re-probe
    device.
    
    To resolve the issue this patch clear default forwarding VSI
    during ice_vsi_release() when the VSI to be released is the default
    one.
    
    Fixes: 01b5e89a ("ice: Add VF promiscuous support")
    Signed-off-by: default avatarIvan Vecera <ivecera@redhat.com>
    Reviewed-by: default avatarMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Reviewed-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: default avatarAlice Michael <alice.michael@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    bd8c624c
ice_lib.c 109 KB