Acked-by: Jeff Guo <jia....@intel.com>
> -----Original Message-----
> From: Steve Yang <stevex.y...@intel.com>
> Sent: Thursday, December 17, 2020 5:23 PM
> To: dev@dpdk.org
> Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Xing, Beilei
> <beilei.x...@intel.com>; Iremonger, Bernard
> <bernard.iremon...@intel.com>; asoma...@amd.com;
> rahul.lakkire...@chelsio.com; hemant.agra...@nxp.com;
> sachin.sax...@oss.nxp.com; Guo, Jia <jia....@intel.com>; Wang, Haiyue
> <haiyue.w...@intel.com>; g.si...@nxp.com; xuanziya...@huawei.com;
> cloud.wangxiao...@huawei.com; zhouguoy...@huawei.com;
> xavier.hu...@huawei.com; humi...@huawei.com;
> yisen.zhu...@huawei.com; ouli...@huawei.com; Wu, Jingjing
> <jingjing...@intel.com>; Yang, Qiming <qiming.y...@intel.com>; Zhang, Qi
> Z <qi.z.zh...@intel.com>; Xu, Rosen <rosen...@intel.com>;
> sthot...@marvell.com; sriniva...@marvell.com;
> heinrich.k...@netronome.com; hka...@marvell.com; jer...@marvell.com;
> ndabilpu...@marvell.com; kirankum...@marvell.com;
> rm...@marvell.com; shsha...@marvell.com;
> andrew.rybche...@oktetlabs.ru; mcze...@marvell.com;
> tho...@monjalon.net; Yigit, Ferruh <ferruh.yi...@intel.com>;
> ivan.bo...@6wind.com; Ananyev, Konstantin
> <konstantin.anan...@intel.com>; samuel.gauth...@6wind.com;
> david.march...@6wind.com; shah...@mellanox.com;
> step...@networkplumber.org; maxime.coque...@redhat.com;
> olivier.m...@6wind.com; lihuis...@huawei.com; shreyansh.j...@nxp.com;
> wei....@intel.com; fengchuns...@huawei.com; chenhao...@huawei.com;
> tangchengch...@hisilicon.com; Zhang, Helin <helin.zh...@intel.com>;
> yanglong...@intel.com; xiaolong...@intel.com; Xu, Ting
> <ting...@intel.com>; Li, Xiaoyun <xiaoyun...@intel.com>; Wei, Dan
> <dan....@intel.com>; Pei, Andy <andy....@intel.com>;
> vattun...@marvell.com; sk...@marvell.com; sony.cha...@qlogic.com;
> Richardson, Bruce <bruce.richard...@intel.com>; ivan.ma...@oktetlabs.ru;
> r...@semihalf.com; slawomir.ro...@semihalf.com;
> kamil.rytarow...@caviumnetworks.com; Zhao1, Wei <wei.zh...@intel.com>;
> Jiang, JunyuX <junyux.ji...@intel.com>; kuma...@chelsio.com;
> girish.nandibasa...@amd.com; rolf.neugeba...@netronome.com;
> alejandro.luc...@netronome.com; Yang, SteveX <stevex.y...@intel.com>
> Subject: [PATCH v2 07/22] net/i40e: fix the jumbo frame flag condition
>
> The jumbo frame uses the 'RTE_ETHER_MAX_LEN' as boundary condition,
> but the Ether overhead is larger than 18 when it supports dual VLAN tags.
> That will cause the jumbo flag rx offload is wrong when MTU size is
> 'RTE_ETHER_MTU'.
>
> This fix will change the boundary condition with 'RTE_ETHER_MTU' and
> overhead.
>
> Fixes: c1715402df8f ("i40evf: fix jumbo frame support")
> Fixes: 43e5488c0ac6 ("net/i40e: support MTU configuration")
> Fixes: a778a1fa2e4e ("i40e: set up and initialize flow director")
> Fixes: c3ac7c5b0b8a ("net/i40e: convert to new Rx offloads API")
>
> Signed-off-by: Steve Yang <stevex.y...@intel.com>
> ---
> drivers/net/i40e/i40e_ethdev.c | 2 +-
> drivers/net/i40e/i40e_ethdev.h | 1 +
> drivers/net/i40e/i40e_ethdev_vf.c | 10 +++++-----
> drivers/net/i40e/i40e_fdir.c | 2 +-
> drivers/net/i40e/i40e_rxtx.c | 8 ++++----
> 5 files changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 2cb18ecc03..d4fcc6c853 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -11770,7 +11770,7 @@ i40e_dev_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)
> return -EBUSY;
> }
>
> - if (frame_size > RTE_ETHER_MAX_LEN)
> + if (frame_size > I40E_ETH_MAX_LEN)
> dev_data->dev_conf.rxmode.offloads |=
> DEV_RX_OFFLOAD_JUMBO_FRAME;
> else
> diff --git a/drivers/net/i40e/i40e_ethdev.h
> b/drivers/net/i40e/i40e_ethdev.h index 696c5aaf7e..1f31a532a1 100644
> --- a/drivers/net/i40e/i40e_ethdev.h
> +++ b/drivers/net/i40e/i40e_ethdev.h
> @@ -281,6 +281,7 @@ struct rte_flow {
> */
> #define I40E_ETH_OVERHEAD \
> (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN +
> I40E_VLAN_TAG_SIZE * 2)
> +#define I40E_ETH_MAX_LEN (RTE_ETHER_MTU + I40E_ETH_OVERHEAD)
>
> #define I40E_RXTX_BYTES_H_16_BIT(bytes) ((bytes) & ~I40E_48_BIT_MASK)
> #define I40E_RXTX_BYTES_L_48_BIT(bytes) ((bytes) & I40E_48_BIT_MASK)
> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c
> b/drivers/net/i40e/i40e_ethdev_vf.c
> index c26b036b85..85c65c09ee 100644
> --- a/drivers/net/i40e/i40e_ethdev_vf.c
> +++ b/drivers/net/i40e/i40e_ethdev_vf.c
> @@ -1889,22 +1889,22 @@ i40evf_rxq_init(struct rte_eth_dev *dev, struct
> i40e_rx_queue *rxq)
> * Check if the jumbo frame and maximum packet length are set
> correctly
> */
> if (dev_data->dev_conf.rxmode.offloads &
> DEV_RX_OFFLOAD_JUMBO_FRAME) {
> - if (rxq->max_pkt_len <= RTE_ETHER_MAX_LEN ||
> + if (rxq->max_pkt_len <= I40E_ETH_MAX_LEN ||
> rxq->max_pkt_len > I40E_FRAME_SIZE_MAX) {
> PMD_DRV_LOG(ERR, "maximum packet length must
> be "
> "larger than %u and smaller than %u, as
> jumbo "
> - "frame is enabled",
> (uint32_t)RTE_ETHER_MAX_LEN,
> + "frame is enabled",
> (uint32_t)I40E_ETH_MAX_LEN,
> (uint32_t)I40E_FRAME_SIZE_MAX);
> return I40E_ERR_CONFIG;
> }
> } else {
> if (rxq->max_pkt_len < RTE_ETHER_MIN_LEN ||
> - rxq->max_pkt_len > RTE_ETHER_MAX_LEN) {
> + rxq->max_pkt_len > I40E_ETH_MAX_LEN) {
> PMD_DRV_LOG(ERR, "maximum packet length must
> be "
> "larger than %u and smaller than %u, as
> jumbo "
> "frame is disabled",
> (uint32_t)RTE_ETHER_MIN_LEN,
> - (uint32_t)RTE_ETHER_MAX_LEN);
> + (uint32_t)I40E_ETH_MAX_LEN);
> return I40E_ERR_CONFIG;
> }
> }
> @@ -2825,7 +2825,7 @@ i40evf_dev_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)
> return -EBUSY;
> }
>
> - if (frame_size > RTE_ETHER_MAX_LEN)
> + if (frame_size > I40E_ETH_MAX_LEN)
> dev_data->dev_conf.rxmode.offloads |=
> DEV_RX_OFFLOAD_JUMBO_FRAME;
> else
> diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index
> 50c0eee9f2..449b67b2a9 100644
> --- a/drivers/net/i40e/i40e_fdir.c
> +++ b/drivers/net/i40e/i40e_fdir.c
> @@ -116,7 +116,7 @@ i40e_fdir_rx_queue_init(struct i40e_rx_queue *rxq)
> #endif
> rx_ctx.dtype = i40e_header_split_none;
> rx_ctx.hsplit_0 = I40E_HEADER_SPLIT_NONE;
> - rx_ctx.rxmax = RTE_ETHER_MAX_LEN;
> + rx_ctx.rxmax = I40E_ETH_MAX_LEN;
> rx_ctx.tphrdesc_ena = 1;
> rx_ctx.tphwdesc_ena = 1;
> rx_ctx.tphdata_ena = 1;
> diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index
> 5df9a9df56..b8859bbff2 100644
> --- a/drivers/net/i40e/i40e_rxtx.c
> +++ b/drivers/net/i40e/i40e_rxtx.c
> @@ -2797,23 +2797,23 @@ i40e_rx_queue_config(struct i40e_rx_queue
> *rxq)
> RTE_MIN((uint32_t)(hw->func_caps.rx_buf_chain_len *
> rxq->rx_buf_len), data-
> >dev_conf.rxmode.max_rx_pkt_len);
> if (data->dev_conf.rxmode.offloads &
> DEV_RX_OFFLOAD_JUMBO_FRAME) {
> - if (rxq->max_pkt_len <= RTE_ETHER_MAX_LEN ||
> + if (rxq->max_pkt_len <= I40E_ETH_MAX_LEN ||
> rxq->max_pkt_len > I40E_FRAME_SIZE_MAX) {
> PMD_DRV_LOG(ERR, "maximum packet length must
> "
> "be larger than %u and smaller than %u,"
> "as jumbo frame is enabled",
> - (uint32_t)RTE_ETHER_MAX_LEN,
> + (uint32_t)I40E_ETH_MAX_LEN,
> (uint32_t)I40E_FRAME_SIZE_MAX);
> return I40E_ERR_CONFIG;
> }
> } else {
> if (rxq->max_pkt_len < RTE_ETHER_MIN_LEN ||
> - rxq->max_pkt_len > RTE_ETHER_MAX_LEN) {
> + rxq->max_pkt_len > I40E_ETH_MAX_LEN) {
> PMD_DRV_LOG(ERR, "maximum packet length must
> be "
> "larger than %u and smaller than %u, "
> "as jumbo frame is disabled",
> (uint32_t)RTE_ETHER_MIN_LEN,
> - (uint32_t)RTE_ETHER_MAX_LEN);
> + (uint32_t)I40E_ETH_MAX_LEN);
> return I40E_ERR_CONFIG;
> }
> }
> --
> 2.17.1