• Daniel Pieczko's avatar
    sfc: leak vports if a VF is assigned during PF unload · 6598dad2
    Daniel Pieczko authored
    If any VF is assigned as the PF is unloaded, do not attempt to
    remove its vport or the vswitch.  These will be removed if the
    driver binds to the PF again, as an entity reset occurs during
    probe.
    
    A 'force' flag is added to efx_ef10_pci_sriov_disable() to
    distinguish between disabling SR-IOV and driver unload.
    SR-IOV cannot be disabled if VFs are assigned to guests.
    
    If the PF driver is unloaded while VFs are assigned, the driver
    may try to bind to the VF again at a later point if the driver
    has been reloaded and the VF returns to the same domain as the PF.
    In this case, the PF will not have a VF data structure, so the VF
    can check this and drop out of probe early.
    
    In this case, efx->vf_count will be zero but VFs will be present.
    The user is advised to remove the VF and re-create it. The check
    at the beginning of efx_ef10_pci_sriov_disable() that
    efx->vf_count is non-zero is removed to allow SR-IOV to be
    disabled in this case. Also, if the PF driver is unloaded, it
    will disable SR-IOV to remove these unknown VFs.
    
    By not disabling bus-mastering if VFs are still assigned, the VF
    will continue to pass traffic after the PF has been removed.
    
    When using the max_vfs module parameter, if VFs are already
    present do not try to initialise any more.
    Signed-off-by: default avatarShradha Shah <sshah@solarflare.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6598dad2
efx.c 88.5 KB