• Jacob Keller's avatar
    i40e: fix CONFIG_BUSY checks in i40e_set_settings function · e8d2f4c6
    Jacob Keller authored
    The check for I40E_CONFIG_BUSY state bit in the i40e_set_link_ksettings
    function is fishy. First we can notice a few things about the check here.
    
    First a similar check was introduced by commit
    'c7d05ca8 ("i40e: driver ethtool core")'
    
    Later a commit introducing the link settings was added by commit
    'bf9c7141 ("i40e: Implement set_settings for ethtool")'
    
    However, this second check was against vsi->state instead of pf->state,
    and also failed to set the bit, it only checks. That indicates the locking
    was not quite correct. The only other place that the state bit
    in vsi->state gets used is to protect the filter list.
    
    Since this code does not care about the mac filter list,  and seems
    clear the original code should have set the pf->state bit. Fix these
    issues by using pf->state correctly, and by actually setting the bit
    so that we properly lock as expected.
    
    Since these checks occur while holding the rtnl_lock(), lets also add a
    timeout so that we don't potentially softlock the system.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    e8d2f4c6
i40e_ethtool.c 123 KB