• A
    iavf: send VLAN offloading caps once after VFR · 7dcbdf29
    Ahmed Zaki 提交于
    When the user disables rxvlan offloading and then changes the number of
    channels, all VLAN ports are unable to receive traffic.
    
    Changing the number of channels triggers a VFR reset. During re-init, when
    VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS is received, we do:
    1 - set the IAVF_FLAG_SETUP_NETDEV_FEATURES flag
    2 - call
        iavf_set_vlan_offload_features(adapter, 0, netdev->features);
    
    The second step sends to the PF the __default__ features, in this case
    aq_required |= IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_STRIPPING
    
    While the first step forces the watchdog task to call
    netdev_update_features() ->  iavf_set_features() ->
    iavf_set_vlan_offload_features(adapter, netdev->features, features).
    Since the user disabled the "rxvlan", this sets:
    aq_required |= IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_STRIPPING
    
    When we start processing the AQ commands, both flags are enabled. Since we
    process DISABLE_XTAG first then ENABLE_XTAG, this results in the PF
    enabling the rxvlan offload. This breaks all communications on the VLAN
    net devices.
    
    Fix by removing the call to iavf_set_vlan_offload_features() (second
    step). Calling netdev_update_features() from watchdog task is enough for
    both init and reset paths.
    
    Fixes: 7598f4b4 ("iavf: Move netdev_update_features() into watchdog task")
    Signed-off-by: NAhmed Zaki <ahmed.zaki@intel.com>
    Tested-by: NRafal Romanowski <rafal.romanowski@intel.com>
    Reviewed-by: NLeon Romanovsky <leonro@nvidia.com>
    Signed-off-by: NTony Nguyen <anthony.l.nguyen@intel.com>
    7dcbdf29
iavf_virtchnl.c 69.1 KB