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

Reply via email to