> -----Original Message-----
> From: Yang, SteveX <stevex.y...@intel.com>
> Sent: Tuesday, September 22, 2020 2:24 AM
> To: dev@dpdk.org
> Cc: Zhao1, Wei <wei.zh...@intel.com>; Guo, Jia <jia....@intel.com>; Yang,
> Qiming <qiming.y...@intel.com>; Zhang, Qi Z
> <qi.z.zh...@intel.com>; Wu, Jingjing <jingjing...@intel.com>; Xing, Beilei
> <beilei.x...@intel.com>; Ananyev, Konstantin
> <konstantin.anan...@intel.com>; Yang, SteveX <stevex.y...@intel.com>
> Subject: [PATCH v2 4/5] net/i40e: fix max mtu size packets with vlan tag
> cannot be received by default
>
> testpmd will initialize default max packet length to 1518 which doesn't
> include vlan tag size in ether overheader. Once, send the max mtu length
> packet with vlan tag, the max packet length will exceed 1518 that will
> cause packets dropped directly from NIC hw side. But for i40e/i40evf,
> they should support dual vlan tags that need more 8 bytes for max packet
> size, so, configure the correct max packet size in dev_config ops.
>
> Fixes: ff8282f4bbcd ("net/i40e: consider QinQ when setting MTU")
>
> Signed-off-by: SteveX Yang <stevex.y...@intel.com>
> ---
> drivers/net/i40e/i40e_ethdev.c | 5 +++++
> drivers/net/i40e/i40e_ethdev_vf.c | 11 +++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 563f21d9d..023c86d66 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -1930,6 +1930,11 @@ i40e_dev_configure(struct rte_eth_dev *dev)
> ad->tx_simple_allowed = true;
> ad->tx_vec_allowed = true;
>
> + /* Considering QinQ packet, max frame size should be MTU and
> + * corresponding ether overhead.
> + */
> + i40e_dev_mtu_set(dev, dev->data->mtu);
> +
> if (dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG)
> dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
>
> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c
> b/drivers/net/i40e/i40e_ethdev_vf.c
> index 8531cf6b1..b268b3d00 100644
> --- a/drivers/net/i40e/i40e_ethdev_vf.c
> +++ b/drivers/net/i40e/i40e_ethdev_vf.c
> @@ -1669,6 +1669,7 @@ i40evf_dev_configure(struct rte_eth_dev *dev)
> I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
> uint16_t num_queue_pairs = RTE_MAX(dev->data->nb_rx_queues,
> dev->data->nb_tx_queues);
> + struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
>
> /* Initialize to TRUE. If any of Rx queues doesn't meet the bulk
> * allocation or vector Rx preconditions we will reset it.
> @@ -1681,6 +1682,16 @@ i40evf_dev_configure(struct rte_eth_dev *dev)
> dev->data->dev_conf.intr_conf.lsc =
> !!(dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC);
>
> +
> + /* Considering QinQ packet, max frame size should be MTU and
> + * corresponding ether overhead.
> + */
> + if (dev->data->mtu == RTE_ETHER_MTU &&
> + rxmode->max_rx_pkt_len == RTE_ETHER_MAX_LEN) {
> + rxmode->max_rx_pkt_len = RTE_ETHER_MTU + I40E_ETH_OVERHEAD;
> + rxmode->offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> + }
Wonder why vf code-path is different here?
Can't we also do mtu_set() here?
> +
> if (num_queue_pairs > vf->vsi_res->num_queue_pairs) {
> struct i40e_hw *hw;
> int ret;
> --
> 2.17.1