• Ivan Vecera's avatar
    i40e: Wait for pending VF reset in VF set callbacks · efb6f4a3
    Ivan Vecera authored
    Commit 028daf80 ("i40e: Fix attach VF to VM issue") fixed
    a race between i40e_ndo_set_vf_mac() and i40e_reset_vf() during
    an attachment of VF device to VM. This issue is not related to
    setting MAC address only but also VLAN assignment to particular
    VF because the newer libvirt sets configured MAC address as well
    as an optional VLAN. The same behavior is also for i40e's
    .ndo_set_vf_rate and .ndo_set_vf_spoofchk where the callbacks
    just check if the VF was initialized but not wait for the finish
    of pending reset.
    
    Reproducer:
    [root@host ~]# virsh attach-interface guest hostdev --managed 0000:02:02.0 --mac 52:54:00:b4:aa:bb
    error: Failed to attach interface
    error: Cannot set interface MAC/vlanid to 52:54:00:b4:aa:bb/0 for ifname enp2s0f0 vf 0: Resource temporarily unavailable
    
    Fix this issue by using i40e_check_vf_init_timeout() helper to check
    whether a reset of particular VF was finished in i40e's
    .ndo_set_vf_vlan, .ndo_set_vf_rate and .ndo_set_vf_spoofchk callbacks.
    Tested-by: default avatarMa Yuying <yuma@redhat.com>
    Signed-off-by: default avatarIvan Vecera <ivecera@redhat.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    efb6f4a3
i40e_virtchnl_pf.c 128 KB