> @@ -3830,12 +3844,22 @@ i40e_vsi_release(struct i40e_vsi *vsi) > i40e_veb_release(vsi->veb); > } > > + if (vsi->floating_veb) { > + TAILQ_FOREACH(vsi_list, &vsi->floating_veb->head, list) { > + if (i40e_vsi_release(vsi_list->vsi) != I40E_SUCCESS) > + return -1; It will be better to continue but not return error.
> + TAILQ_REMOVE(&vsi->floating_veb->head, vsi_list, > list); > + } > + i40e_veb_release(vsi->floating_veb); > + } > + > diff --git a/drivers/net/i40e/i40e_ethdev.h > b/drivers/net/i40e/i40e_ethdev.h index 7dc6936..09fb6e2 100644 > --- a/drivers/net/i40e/i40e_ethdev.h > +++ b/drivers/net/i40e/i40e_ethdev.h > @@ -224,6 +224,7 @@ struct i40e_bw_info { struct i40e_veb { > struct i40e_vsi_list_head head; > struct i40e_vsi *associate_vsi; /* Associate VSI who owns the VEB */ > + struct i40e_pf *associate_pf; /* Associate PF who owns the VEB */ > uint16_t seid; /* The seid of VEB itself */ > uint16_t uplink_seid; /* The uplink seid of this VEB */ > uint16_t stats_idx; > @@ -264,6 +265,7 @@ struct i40e_vsi { > struct i40e_vsi_list sib_vsi_list; /* sibling vsi list */ > struct i40e_vsi *parent_vsi; > struct i40e_veb *veb; /* Associated veb, could be null */ > + struct i40e_veb *floating_veb; /* Associated floating veb */ For vsi->veb, the VEB associated with uplink vsi, but as I know, floating_veb Has no uplink vsis. Can I understand the floating_veb in vsi indicates floating veb Of the device/pf, and only main vsi will have it? If so, why not put in in the pf structure?