diff options
Diffstat (limited to 'drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c')
| -rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 20 | 
1 files changed, 20 insertions, 0 deletions
| diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c index 4f184c50f6e8..7e9f6a69eb10 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c @@ -2039,6 +2039,25 @@ static void i40e_del_qch(struct i40e_vf *vf)  }  /** + * i40e_vc_get_max_frame_size + * @vf: pointer to the VF + * + * Max frame size is determined based on the current port's max frame size and + * whether a port VLAN is configured on this VF. The VF is not aware whether + * it's in a port VLAN so the PF needs to account for this in max frame size + * checks and sending the max frame size to the VF. + **/ +static u16 i40e_vc_get_max_frame_size(struct i40e_vf *vf) +{ +	u16 max_frame_size = vf->pf->hw.phy.link_info.max_frame_size; + +	if (vf->port_vlan_id) +		max_frame_size -= VLAN_HLEN; + +	return max_frame_size; +} + +/**   * i40e_vc_get_vf_resources_msg   * @vf: pointer to the VF info   * @msg: pointer to the msg buffer @@ -2139,6 +2158,7 @@ static int i40e_vc_get_vf_resources_msg(struct i40e_vf *vf, u8 *msg)  	vfres->max_vectors = pf->hw.func_caps.num_msix_vectors_vf;  	vfres->rss_key_size = I40E_HKEY_ARRAY_SIZE;  	vfres->rss_lut_size = I40E_VF_HLUT_ARRAY_SIZE; +	vfres->max_mtu = i40e_vc_get_max_frame_size(vf);  	if (vf->lan_vsi_idx) {  		vfres->vsi_res[0].vsi_id = vf->lan_vsi_id; | 
