• Jacob Keller's avatar
    ice: use ice_for_each_vf for iteration during removal · 19281e86
    Jacob Keller authored
    When removing VFs, the driver takes a weird approach of assigning
    pf->num_alloc_vfs to 0 before iterating over the VFs using a temporary
    variable.
    
    This logic has been in the driver for a long time, and seems to have
    been carried forward from i40e.
    
    We want to refactor the way VFs are stored, and iterating over the data
    structure without the ice_for_each_vf interface impedes this work.
    
    The logic relies on implicitly using the num_alloc_vfs as a sort of
    "safe guard" for accessing VF data.
    
    While this sort of guard makes sense for Single Root IOV where all VFs
    are added at once, the data structures don't work for VFs which can be
    added and removed dynamically. We also have a separate state flag,
    ICE_VF_DEINIT_IN_PROGRESS which is a stronger protection against
    concurrent removal and access.
    
    Avoid the custom tmp iteration and replace it with the standard
    ice_for_each_vf iterator. Delay the assignment of num_alloc_vfs until
    after this loop finishes.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    19281e86
ice_virtchnl_pf.c 175 KB