• Ivan Vecera's avatar
    i40e: Fix VF VLAN offloading when port VLAN is configured · d0d362ff
    Ivan Vecera authored
    If port VLAN is configured on a VF then any other VLANs on top of this VF
    are broken.
    
    During i40e_ndo_set_vf_port_vlan() call the i40e driver reset the VF and
    iavf driver asks PF (using VIRTCHNL_OP_GET_VF_RESOURCES) for VF capabilities
    but this reset occurs too early, prior setting of vf->info.pvid field
    and because this field can be zero during i40e_vc_get_vf_resources_msg()
    then VIRTCHNL_VF_OFFLOAD_VLAN capability is reported to iavf driver.
    
    This is wrong because iavf driver should not report VLAN offloading
    capability when port VLAN is configured as i40e does not support QinQ
    offloading.
    
    Fix the issue by moving VF reset after setting of vf->port_vlan_id
    field.
    
    Without this patch:
    $ echo 1 > /sys/class/net/enp2s0f0/device/sriov_numvfs
    $ ip link set enp2s0f0 vf 0 vlan 3
    $ ip link set enp2s0f0v0 up
    $ ip link add link enp2s0f0v0 name vlan4 type vlan id 4
    $ ip link set vlan4 up
    ...
    $ ethtool -k enp2s0f0v0 | grep vlan-offload
    rx-vlan-offload: on
    tx-vlan-offload: on
    $ dmesg -l err | grep iavf
    [1292500b.742914] iavf 0000:02:02.0: Failed to add VLAN filter, error IAVF_ERR_INVALID_QP_ID
    
    With this patch:
    $ echo 1 > /sys/class/net/enp2s0f0/device/sriov_numvfs
    $ ip link set enp2s0f0 vf 0 vlan 3
    $ ip link set enp2s0f0v0 up
    $ ip link add link enp2s0f0v0 name vlan4 type vlan id 4
    $ ip link set vlan4 up
    ...
    $ ethtool -k enp2s0f0v0 | grep vlan-offload
    rx-vlan-offload: off [requested on]
    tx-vlan-offload: off [requested on]
    $ dmesg -l err | grep iavf
    
    Fixes: f9b4b627 ("i40e: Reset the VF upon conflicting VLAN configuration")
    Signed-off-by: default avatarIvan Vecera <ivecera@redhat.com>
    Reviewed-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
    Tested-by: default avatarRafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    d0d362ff
i40e_virtchnl_pf.c 127 KB