> -----Original Message----- > From: Intel-wired-lan <[email protected]> On Behalf Of Jose > Ignacio Tornos Martinez > Sent: Wednesday, April 29, 2026 12:24 PM > To: [email protected] > Cc: [email protected]; Kitszel, Przemyslaw > <[email protected]>; Loktionov, Aleksandr > <[email protected]>; Keller, Jacob E <[email protected]>; > [email protected]; [email protected]; Nguyen, Anthony L > <[email protected]>; [email protected]; [email protected]; > [email protected]; [email protected]; Jose Ignacio Tornos Martinez > <[email protected]> > Subject: [Intel-wired-lan] [PATCH net v5 2/4] i40e: skip unnecessary VF reset > when setting trust > > The current implementation triggers a VF reset when changing the trust > setting, > causing a ~10 second delay during bonding setup. > > In all the cases, the reset causes a ~10 second delay during which: > - VF must reinitialize completely > - Any in-progress operations (like bonding enslave) fail with timeouts > - VF is unavailable > > When granting trust, no reset is needed - we can just set the capability flag > to > allow privileged operations. > > When revoking trust, we only need to reset (conservative approach) if the VF > has > actually configured advanced features that require cleanup (ADQ/cloud filters, > promiscuous mode). For VFs in a clean state, we can safely change the trust > setting without the disruptive reset. > > When we don't reset, we manually handle capability flag via helper function, > eliminating the delay. > > Signed-off-by: Jose Ignacio Tornos Martinez <[email protected]> > --- > v5: kdoc should end with '*/' not '**/' (new function) > Address AI review (sashiko.dev) from Simon Horman: > - Adopt a conservative approach checking multiple conditions before > skipping reset: ADQ, cloud filters, promiscuous mode > - Simplify helper function to only handle capability flag > v4: https://lore.kernel.org/all/20260423130405.139568-3- > [email protected]/ > > .../ethernet/intel/i40e/i40e_virtchnl_pf.c | 38 ++++++++++++++----- > 1 file changed, 28 insertions(+), 10 deletions(-) > > diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c > b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c > index a26c3d47ec15..0cc434b26eb8 100644 > --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c > +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c > @@ -4943,6 +4943,23 @@ int i40e_ndo_set_vf_spoofchk(struct net_device > *netdev, int vf_id, bool enable) > return ret; > } > > +/** > + * i40e_setup_vf_trust - Enable/disable VF trust mode without reset > + * @vf: VF to configure > + * @setting: trust setting > + * > + * Update VF flags when changing trust without performing a VF reset. > + * This is only called when it's safe to skip the reset (VF has no > +advanced > + * features configured that need cleanup). > + */ > +static void i40e_setup_vf_trust(struct i40e_vf *vf, bool setting) { > + if (setting) > + set_bit(I40E_VIRTCHNL_VF_CAP_PRIVILEGE, &vf->vf_caps); > + else > + clear_bit(I40E_VIRTCHNL_VF_CAP_PRIVILEGE, &vf->vf_caps); } > + > /** > * i40e_ndo_set_vf_trust > * @netdev: network interface device structure of the pf @@ -4987,19 +5004,20 > @@ int i40e_ndo_set_vf_trust(struct net_device *netdev, int vf_id, bool > setting) > set_bit(__I40E_MACVLAN_SYNC_PENDING, pf->state); > pf->vsi[vf->lan_vsi_idx]->flags |= I40E_VSI_FLAG_FILTER_CHANGED; > > - i40e_vc_reset_vf(vf, true); > + /* Reset only if revoking trust and VF has advanced features configured > */ > + if (!setting && > + (vf->adq_enabled || vf->num_cloud_filters > 0 || > + test_bit(I40E_VF_STATE_UC_PROMISC, &vf->vf_states) || > + test_bit(I40E_VF_STATE_MC_PROMISC, &vf->vf_states))) { > + i40e_vc_reset_vf(vf, true); > + i40e_del_all_cloud_filters(vf); > + } else { > + i40e_setup_vf_trust(vf, setting); > + } > + > dev_info(&pf->pdev->dev, "VF %u is now %strusted\n", > vf_id, setting ? "" : "un"); > > - if (vf->adq_enabled) { > - if (!vf->trusted) { > - dev_info(&pf->pdev->dev, > - "VF %u no longer Trusted, deleting all cloud > filters\n", > - vf_id); > - i40e_del_all_cloud_filters(vf); > - } > - } > - > out: > clear_bit(__I40E_VIRTCHNL_OP_PENDING, pf->state); > return ret; > -- > 2.53.0
Tested-by: Rafal Romanowski <[email protected]>
