Similar to the i40e fix, ice_set_vf_trust() unconditionally calls ice_reset_vf() when the trust setting changes. The ice driver already has logic to clean up MAC LLDP filters when removing trust, which is the only operation that requires filter synchronization. After this cleanup, the VF reset is only necessary if there were actually filters to remove. For all other trust state changes (setting trust, or removing trust when no filters exist), the reset is unnecessary as filter synchronization happens naturally through normal VF operations. Fix by only triggering the VF reset when removing trust AND filters were actually cleaned up (num_mac_lldp was non-zero). This saves some time and eliminates unnecessary service disruption when changing VF trust settings if not necessary. Signed-off-by: Jose Ignacio Tornos Martinez --- drivers/net/ethernet/intel/ice/ice_sriov.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/intel/ice/ice_sriov.c b/drivers/net/ethernet/intel/ice/ice_sriov.c index 7e00e091756d..23f692b1e86c 100644 --- a/drivers/net/ethernet/intel/ice/ice_sriov.c +++ b/drivers/net/ethernet/intel/ice/ice_sriov.c @@ -1399,14 +1399,19 @@ int ice_set_vf_trust(struct net_device *netdev, int vf_id, bool trusted) mutex_lock(&vf->cfg_lock); - while (!trusted && vf->num_mac_lldp) - ice_vf_update_mac_lldp_num(vf, ice_get_vf_vsi(vf), false); - vf->trusted = trusted; - ice_reset_vf(vf, ICE_VF_RESET_NOTIFY); dev_info(ice_pf_to_dev(pf), "VF %u is now %strusted\n", vf_id, trusted ? "" : "un"); + /* Only reset VF if removing trust and there are MAC LLDP filters + * to clean up. Reset is needed to ensure filter removal completes. + */ + if (!trusted && vf->num_mac_lldp) { + while (vf->num_mac_lldp) + ice_vf_update_mac_lldp_num(vf, ice_get_vf_vsi(vf), false); + ice_reset_vf(vf, ICE_VF_RESET_NOTIFY); + } + mutex_unlock(&vf->cfg_lock); out_put_vf: -- 2.53.0