• Brett Creeley's avatar
    ice: Wait for VF to be reset/ready before configuration · c54d209c
    Brett Creeley authored
    The configuration/command below is failing when the VF in the xml
    file is already bound to the host iavf driver.
    
    pci_0000_af_0_0.xml:
    
    <interface type='hostdev' managed='yes'>
    <source>
    <address type='pci' domain='0x0000' bus='0xaf' slot='0x0' function='0x0'/>
    </source>
    <mac address='00:de:ad:00:11:01'/>
    </interface>
    
    > virsh attach-device domain_name pci_0000_af_0_0.xml
    error: Failed to attach device from pci_0000_af_0_0.xml
    error: Cannot set interface MAC/vlanid to 00:de:ad:00:11:01/0 for
    	ifname ens1f1 vf 0: Device or resource busy
    
    This is failing because the VF has not been completely removed/reset
    after being unbound (via the virsh command above) from the host iavf
    driver and ice_set_vf_mac() checks if the VF is disabled before waiting
    for the reset to finish.
    
    Fix this by waiting for the VF remove/reset process to happen before
    checking if the VF is disabled. Also, since many functions for VF
    administration on the PF were more or less calling the same 3 functions
    (ice_wait_on_vf_reset(), ice_is_vf_disabled(), and ice_check_vf_init())
    move these into the helper function ice_check_vf_ready_for_cfg(). Then
    call this function in any flow that attempts to configure/query a VF
    from the PF.
    
    Lastly, increase the maximum wait time in ice_wait_on_vf_reset() to
    800ms, and modify/add the #define(s) that determine the wait time.
    This was done for robustness because in rare/stress cases VF removal can
    take a max of ~800ms and previously the wait was a max of ~300ms.
    Signed-off-by: default avatarBrett Creeley <brett.creeley@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    c54d209c
ice_virtchnl_pf.c 91.7 KB