From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 91D46A0C41;
	Sat,  9 Oct 2021 12:58:34 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 2A85140040;
	Sat,  9 Oct 2021 12:58:34 +0200 (CEST)
Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189])
 by mails.dpdk.org (Postfix) with ESMTP id C67DA4003C
 for <dev@dpdk.org>; Sat,  9 Oct 2021 12:58:32 +0200 (CEST)
Received: from dggemv703-chm.china.huawei.com (unknown [172.30.72.56])
 by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4HRMTM3k14zQj5R;
 Sat,  9 Oct 2021 18:57:27 +0800 (CST)
Received: from dggema767-chm.china.huawei.com (10.1.198.209) by
 dggemv703-chm.china.huawei.com (10.3.19.46) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id
 15.1.2308.8; Sat, 9 Oct 2021 18:58:30 +0800
Received: from [10.67.103.231] (10.67.103.231) by
 dggema767-chm.china.huawei.com (10.1.198.209) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id
 15.1.2308.8; Sat, 9 Oct 2021 18:58:29 +0800
Message-ID: <c19067d4-443a-e31b-3a7a-16c9825dcb80@huawei.com>
Date: Sat, 9 Oct 2021 18:58:29 +0800
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
 Thunderbird/91.2.0
To: Ferruh Yigit <ferruh.yigit@intel.com>, Somalapuram Amaranath
 <asomalap@amd.com>, Ajit Khaparde <ajit.khaparde@broadcom.com>, Somnath Kotur
 <somnath.kotur@broadcom.com>, Nithin Dabilpuram <ndabilpuram@marvell.com>,
 Kiran Kumar K <kirankumark@marvell.com>, Sunil Kumar Kori
 <skori@marvell.com>, Satha Rao <skoteshwar@marvell.com>, Rahul Lakkireddy
 <rahul.lakkireddy@chelsio.com>, Hemant Agrawal <hemant.agrawal@nxp.com>,
 Sachin Saxena <sachin.saxena@oss.nxp.com>, Haiyue Wang
 <haiyue.wang@intel.com>, Gagandeep Singh <g.singh@nxp.com>, Ziyang Xuan
 <xuanziyang2@huawei.com>, Xiaoyun Wang <cloud.wangxiaoyun@huawei.com>,
 Guoyang Zhou <zhouguoyang@huawei.com>, "Min Hu (Connor)"
 <humin29@huawei.com>, Yisen Zhuang <yisen.zhuang@huawei.com>, Lijun Ou
 <oulijun@huawei.com>, Beilei Xing <beilei.xing@intel.com>, Jingjing Wu
 <jingjing.wu@intel.com>, Qiming Yang <qiming.yang@intel.com>, Qi Zhang
 <qi.z.zhang@intel.com>, Rosen Xu <rosen.xu@intel.com>, Shijith Thotton
 <sthotton@marvell.com>, Srisivasubramanian Srinivasan
 <srinivasan@marvell.com>, Heinrich Kuhn <heinrich.kuhn@corigine.com>, "Harman
 Kalra" <hkalra@marvell.com>, Jerin Jacob <jerinj@marvell.com>, Rasesh Mody
 <rmody@marvell.com>, Devendra Singh Rawat <dsinghrawat@marvell.com>, "Andrew
 Rybchenko" <andrew.rybchenko@oktetlabs.ru>, Maciej Czekaj
 <mczekaj@marvell.com>, Jiawen Wu <jiawenwu@trustnetic.com>, Jian Wang
 <jianwang@trustnetic.com>, Thomas Monjalon <thomas@monjalon.net>
CC: <dev@dpdk.org>
References: <20211001143624.3744505-1-ferruh.yigit@intel.com>
 <20211007165626.2941995-1-ferruh.yigit@intel.com>
 <20211007165626.2941995-2-ferruh.yigit@intel.com>
From: "lihuisong (C)" <lihuisong@huawei.com>
In-Reply-To: <20211007165626.2941995-2-ferruh.yigit@intel.com>
Content-Type: text/plain; charset="UTF-8"; format=flowed
Content-Transfer-Encoding: 8bit
X-Originating-IP: [10.67.103.231]
X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To
 dggema767-chm.china.huawei.com (10.1.198.209)
X-CFilter-Loop: Reflected
Subject: Re: [dpdk-dev] [PATCH v5 2/6] ethdev: move jumbo frame offload
 check to library
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>


在 2021/10/8 0:56, Ferruh Yigit 写道:
> Setting MTU bigger than RTE_ETHER_MTU requires the jumbo frame support,
> and application should enable the jumbo frame offload support for it.
>
> When jumbo frame offload is not enabled by application, but MTU bigger
> than RTE_ETHER_MTU is requested there are two options, either fail or
> enable jumbo frame offload implicitly.
>
> Enabling jumbo frame offload implicitly is selected by many drivers
> since setting a big MTU value already implies it, and this increases
> usability.
>
> This patch moves this logic from drivers to the library, both to reduce
> the duplicated code in the drivers and to make behaviour more visible.
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> Reviewed-by: Rosen Xu <rosen.xu@intel.com>
> Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
> Acked-by: Somnath Kotur <somnath.kotur@broadcom.com>
> ---
>   drivers/net/axgbe/axgbe_ethdev.c        |  9 ++-------
>   drivers/net/bnxt/bnxt_ethdev.c          |  9 ++-------
>   drivers/net/cnxk/cnxk_ethdev_ops.c      |  5 -----
>   drivers/net/cxgbe/cxgbe_ethdev.c        |  8 --------
>   drivers/net/dpaa/dpaa_ethdev.c          |  7 -------
>   drivers/net/dpaa2/dpaa2_ethdev.c        |  7 -------
>   drivers/net/e1000/em_ethdev.c           |  9 ++-------
>   drivers/net/e1000/igb_ethdev.c          |  9 ++-------
>   drivers/net/enetc/enetc_ethdev.c        |  7 -------
>   drivers/net/hinic/hinic_pmd_ethdev.c    |  7 -------
>   drivers/net/hns3/hns3_ethdev.c          |  8 --------
>   drivers/net/hns3/hns3_ethdev_vf.c       |  6 ------
>   drivers/net/i40e/i40e_ethdev.c          |  5 -----
>   drivers/net/iavf/iavf_ethdev.c          |  7 -------
>   drivers/net/ice/ice_ethdev.c            |  5 -----
>   drivers/net/igc/igc_ethdev.c            |  9 ++-------
>   drivers/net/ipn3ke/ipn3ke_representor.c |  5 -----
>   drivers/net/ixgbe/ixgbe_ethdev.c        |  7 ++-----
>   drivers/net/liquidio/lio_ethdev.c       |  7 -------
>   drivers/net/nfp/nfp_common.c            |  6 ------
>   drivers/net/octeontx/octeontx_ethdev.c  |  5 -----
>   drivers/net/octeontx2/otx2_ethdev_ops.c |  5 -----
>   drivers/net/qede/qede_ethdev.c          |  4 ----
>   drivers/net/sfc/sfc_ethdev.c            |  9 ---------
>   drivers/net/thunderx/nicvf_ethdev.c     |  6 ------
>   drivers/net/txgbe/txgbe_ethdev.c        |  6 ------
>   lib/ethdev/rte_ethdev.c                 | 18 +++++++++++++++++-
>   27 files changed, 29 insertions(+), 166 deletions(-)
>
> diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
> index 76aeec077f2b..2960834b4539 100644
> --- a/drivers/net/axgbe/axgbe_ethdev.c
> +++ b/drivers/net/axgbe/axgbe_ethdev.c
> @@ -1492,15 +1492,10 @@ static int axgb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   				dev->data->port_id);
>   		return -EBUSY;
>   	}
> -	if (mtu > RTE_ETHER_MTU) {
> -		dev->data->dev_conf.rxmode.offloads |=
> -			DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	if (mtu > RTE_ETHER_MTU)
>   		val = 1;
> -	} else {
> -		dev->data->dev_conf.rxmode.offloads &=
> -			~DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	else
>   		val = 0;
> -	}
>   	AXGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
>   	return 0;
>   }
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
> index 8c6f20b75aed..07ee19938930 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -3052,15 +3052,10 @@ int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu)
>   		return -EINVAL;
>   	}
>   
> -	if (new_mtu > RTE_ETHER_MTU) {
> +	if (new_mtu > RTE_ETHER_MTU)
>   		bp->flags |= BNXT_FLAG_JUMBO;
> -		bp->eth_dev->data->dev_conf.rxmode.offloads |=
> -			DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	} else {
> -		bp->eth_dev->data->dev_conf.rxmode.offloads &=
> -			~DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	else
>   		bp->flags &= ~BNXT_FLAG_JUMBO;
> -	}
>   
>   	/* Is there a change in mtu setting? */
>   	if (eth_dev->data->mtu == new_mtu)
> diff --git a/drivers/net/cnxk/cnxk_ethdev_ops.c b/drivers/net/cnxk/cnxk_ethdev_ops.c
> index 695d0d6fd3e2..349896f6a1bf 100644
> --- a/drivers/net/cnxk/cnxk_ethdev_ops.c
> +++ b/drivers/net/cnxk/cnxk_ethdev_ops.c
> @@ -439,11 +439,6 @@ cnxk_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
>   		plt_err("Failed to max Rx frame length, rc=%d", rc);
>   		goto exit;
>   	}
> -
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->rx_offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
>   exit:
>   	return rc;
>   }
> diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c
> index 8cf61f12a8d6..0c9cc2f5bb3f 100644
> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
> @@ -313,14 +313,6 @@ int cxgbe_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
>   	if (mtu < RTE_ETHER_MIN_MTU || new_mtu > dev_info.max_rx_pktlen)
>   		return -EINVAL;
>   
> -	/* set to jumbo mode if needed */
> -	if (mtu > RTE_ETHER_MTU)
> -		eth_dev->data->dev_conf.rxmode.offloads |=
> -			DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		eth_dev->data->dev_conf.rxmode.offloads &=
> -			~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	err = t4_set_rxmode(adapter, adapter->mbox, pi->viid, new_mtu, -1, -1,
>   			    -1, -1, true);
>   	return err;
> diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
> index adbdb87baab9..57b09f16ba44 100644
> --- a/drivers/net/dpaa/dpaa_ethdev.c
> +++ b/drivers/net/dpaa/dpaa_ethdev.c
> @@ -187,13 +187,6 @@ dpaa_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		return -EINVAL;
>   	}
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads |=
> -						DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &=
> -						~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	fman_if_set_maxfrm(dev->process_private, frame_size);
>   
>   	return 0;
> diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
> index 97dd8e079a73..737b474dd814 100644
> --- a/drivers/net/dpaa2/dpaa2_ethdev.c
> +++ b/drivers/net/dpaa2/dpaa2_ethdev.c
> @@ -1472,13 +1472,6 @@ dpaa2_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   	if (mtu < RTE_ETHER_MIN_MTU || frame_size > DPAA2_MAX_RX_PKT_LEN)
>   		return -EINVAL;
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads |=
> -						DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &=
> -						~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	/* Set the Max Rx frame length as 'mtu' +
>   	 * Maximum Ethernet header length
>   	 */
> diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
> index 6f418a36aa04..1b41dd04df5a 100644
> --- a/drivers/net/e1000/em_ethdev.c
> +++ b/drivers/net/e1000/em_ethdev.c
> @@ -1818,15 +1818,10 @@ eth_em_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   	rctl = E1000_READ_REG(hw, E1000_RCTL);
>   
>   	/* switch to jumbo mode if needed */
> -	if (mtu > RTE_ETHER_MTU) {
> -		dev->data->dev_conf.rxmode.offloads |=
> -			DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	if (mtu > RTE_ETHER_MTU)
>   		rctl |= E1000_RCTL_LPE;
> -	} else {
> -		dev->data->dev_conf.rxmode.offloads &=
> -			~DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	else
>   		rctl &= ~E1000_RCTL_LPE;
> -	}
>   	E1000_WRITE_REG(hw, E1000_RCTL, rctl);
>   
>   	return 0;
> diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
> index 4c114bf90fc7..a061d0529dd1 100644
> --- a/drivers/net/e1000/igb_ethdev.c
> +++ b/drivers/net/e1000/igb_ethdev.c
> @@ -4396,15 +4396,10 @@ eth_igb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   	rctl = E1000_READ_REG(hw, E1000_RCTL);
>   
>   	/* switch to jumbo mode if needed */
> -	if (mtu > RTE_ETHER_MTU) {
> -		dev->data->dev_conf.rxmode.offloads |=
> -			DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	if (mtu > RTE_ETHER_MTU)
>   		rctl |= E1000_RCTL_LPE;
> -	} else {
> -		dev->data->dev_conf.rxmode.offloads &=
> -			~DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	else
>   		rctl &= ~E1000_RCTL_LPE;
> -	}
>   	E1000_WRITE_REG(hw, E1000_RCTL, rctl);
>   
>   	E1000_WRITE_REG(hw, E1000_RLPML, frame_size);
> diff --git a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c
> index cdb9783b5372..fbcbbb6c0533 100644
> --- a/drivers/net/enetc/enetc_ethdev.c
> +++ b/drivers/net/enetc/enetc_ethdev.c
> @@ -677,13 +677,6 @@ enetc_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		return -EINVAL;
>   	}
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads &=
> -						DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &=
> -						~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	enetc_port_wr(enetc_hw, ENETC_PTCMSDUR(0), ENETC_MAC_MAXFRM_SIZE);
>   	enetc_port_wr(enetc_hw, ENETC_PTXMBAR, 2 * ENETC_MAC_MAXFRM_SIZE);
>   
> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
> index 2d8271cb6095..4b30dfa222a8 100644
> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
> @@ -1547,13 +1547,6 @@ static int hinic_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
>   		return ret;
>   	}
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads |=
> -			DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &=
> -			~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	nic_dev->mtu_size = mtu;
>   
>   	return ret;
> diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
> index 4ead227f9122..e1d465de8234 100644
> --- a/drivers/net/hns3/hns3_ethdev.c
> +++ b/drivers/net/hns3/hns3_ethdev.c
> @@ -2571,7 +2571,6 @@ hns3_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   	struct hns3_adapter *hns = dev->data->dev_private;
>   	uint32_t frame_size = mtu + HNS3_ETH_OVERHEAD;
>   	struct hns3_hw *hw = &hns->hw;
> -	bool is_jumbo_frame;
>   	int ret;
>   
>   	if (dev->data->dev_started) {
> @@ -2581,7 +2580,6 @@ hns3_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   	}
>   
>   	rte_spinlock_lock(&hw->lock);
> -	is_jumbo_frame = mtu > RTE_ETHER_MTU ? true : false;
>   	frame_size = RTE_MAX(frame_size, HNS3_DEFAULT_FRAME_LEN);
>   
>   	/*
> @@ -2596,12 +2594,6 @@ hns3_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		return ret;
>   	}
>   
> -	if (is_jumbo_frame)
> -		dev->data->dev_conf.rxmode.offloads |=
> -						DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &=
> -						~DEV_RX_OFFLOAD_JUMBO_FRAME;
>   	rte_spinlock_unlock(&hw->lock);
>   
>   	return 0;
> diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
> index 0b5db486f8d6..3438b3650de6 100644
> --- a/drivers/net/hns3/hns3_ethdev_vf.c
> +++ b/drivers/net/hns3/hns3_ethdev_vf.c
> @@ -908,12 +908,6 @@ hns3vf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		rte_spinlock_unlock(&hw->lock);
>   		return ret;
>   	}
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads |=
> -						DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &=
> -						~DEV_RX_OFFLOAD_JUMBO_FRAME;
>   	rte_spinlock_unlock(&hw->lock);
>   
>   	return 0;
Acked-by: Huisong Li <lihuisong@huawei.com>
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index ab571a921f9e..9283adb19304 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -11775,11 +11775,6 @@ i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		return -EBUSY;
>   	}
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev_data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev_data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	return ret;
>   }
>   
> diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
> index 0eabce275d92..844d26d87ba6 100644
> --- a/drivers/net/iavf/iavf_ethdev.c
> +++ b/drivers/net/iavf/iavf_ethdev.c
> @@ -1473,13 +1473,6 @@ iavf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		return -EBUSY;
>   	}
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads |=
> -				DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &=
> -				~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	return ret;
>   }
>   
> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
> index 8ee1335ac6cf..3038a9714517 100644
> --- a/drivers/net/ice/ice_ethdev.c
> +++ b/drivers/net/ice/ice_ethdev.c
> @@ -3992,11 +3992,6 @@ ice_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		return -EBUSY;
>   	}
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev_data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev_data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	return 0;
>   }
>   
> diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
> index b26723064b07..dcbc26b8186e 100644
> --- a/drivers/net/igc/igc_ethdev.c
> +++ b/drivers/net/igc/igc_ethdev.c
> @@ -1592,15 +1592,10 @@ eth_igc_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   	}
>   
>   	rctl = IGC_READ_REG(hw, IGC_RCTL);
> -
> -	/* switch to jumbo mode if needed */
> -	if (mtu > RTE_ETHER_MTU) {
> -		dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	if (mtu > RTE_ETHER_MTU)
>   		rctl |= IGC_RCTL_LPE;
> -	} else {
> -		dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	else
>   		rctl &= ~IGC_RCTL_LPE;
> -	}
>   	IGC_WRITE_REG(hw, IGC_RCTL, rctl);
>   
>   	IGC_WRITE_REG(hw, IGC_RLPML, frame_size);
> diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c
> index 3634c0c8c5f0..e8a33f04bd69 100644
> --- a/drivers/net/ipn3ke/ipn3ke_representor.c
> +++ b/drivers/net/ipn3ke/ipn3ke_representor.c
> @@ -2801,11 +2801,6 @@ ipn3ke_rpst_mtu_set(struct rte_eth_dev *ethdev, uint16_t mtu)
>   		return -EBUSY;
>   	}
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev_data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev_data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	if (rpst->i40e_pf_eth) {
>   		ret = rpst->i40e_pf_eth->dev_ops->mtu_set(rpst->i40e_pf_eth,
>   							mtu);
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> index e5ddae219182..c337430f2df8 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -5198,13 +5198,10 @@ ixgbe_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   	hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
>   
>   	/* switch to jumbo mode if needed */
> -	if (mtu > RTE_ETHER_MTU) {
> -		dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	if (mtu > RTE_ETHER_MTU)
>   		hlreg0 |= IXGBE_HLREG0_JUMBOEN;
> -	} else {
> -		dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	else
>   		hlreg0 &= ~IXGBE_HLREG0_JUMBOEN;
> -	}
>   	IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
>   
>   	maxfrs = IXGBE_READ_REG(hw, IXGBE_MAXFRS);
> diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c
> index 976916f870a5..3a516c52d199 100644
> --- a/drivers/net/liquidio/lio_ethdev.c
> +++ b/drivers/net/liquidio/lio_ethdev.c
> @@ -480,13 +480,6 @@ lio_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
>   		return -1;
>   	}
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		eth_dev->data->dev_conf.rxmode.offloads |=
> -			DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		eth_dev->data->dev_conf.rxmode.offloads &=
> -			~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	return 0;
>   }
>   
> diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c
> index a2031a7a82cc..850ec7655f82 100644
> --- a/drivers/net/nfp/nfp_common.c
> +++ b/drivers/net/nfp/nfp_common.c
> @@ -962,12 +962,6 @@ nfp_net_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		return -EBUSY;
>   	}
>   
> -	/* switch to jumbo mode if needed */
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	/* writing to configuration space */
>   	nn_cfg_writel(hw, NFP_NET_CFG_MTU, mtu);
>   
> diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c
> index 69c3bda12df8..fb65be2c2dc3 100644
> --- a/drivers/net/octeontx/octeontx_ethdev.c
> +++ b/drivers/net/octeontx/octeontx_ethdev.c
> @@ -552,11 +552,6 @@ octeontx_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
>   	if (rc)
>   		return rc;
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		nic->rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		nic->rx_offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	octeontx_log_info("Received pkt beyond  maxlen %d will be dropped",
>   			  frame_size);
>   
> diff --git a/drivers/net/octeontx2/otx2_ethdev_ops.c b/drivers/net/octeontx2/otx2_ethdev_ops.c
> index cf7804157198..293306c7be2a 100644
> --- a/drivers/net/octeontx2/otx2_ethdev_ops.c
> +++ b/drivers/net/octeontx2/otx2_ethdev_ops.c
> @@ -59,11 +59,6 @@ otx2_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
>   	if (rc)
>   		return rc;
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->rx_offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	return rc;
>   }
>   
> diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
> index 4b971fd1fe3c..6886a4e5efb4 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
> @@ -2361,10 +2361,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
>   			fp->rxq->rx_buf_size = rc;
>   		}
>   	}
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
>   
>   	if (!dev->data->dev_started && restart) {
>   		qede_dev_start(dev);
> diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
> index 1f55c90b419d..2ee80e2dc41f 100644
> --- a/drivers/net/sfc/sfc_ethdev.c
> +++ b/drivers/net/sfc/sfc_ethdev.c
> @@ -1064,15 +1064,6 @@ sfc_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
>   		}
>   	}
>   
> -	/*
> -	 * The driver does not use it, but other PMDs update jumbo frame
> -	 * flag when MTU is set.
> -	 */
> -	if (mtu > RTE_ETHER_MTU) {
> -		struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
> -		rxmode->offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	}
> -
>   	sfc_adapter_unlock(sa);
>   
>   	sfc_log_init(sa, "done");
> diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c
> index c8ae95a61306..b501fee5332c 100644
> --- a/drivers/net/thunderx/nicvf_ethdev.c
> +++ b/drivers/net/thunderx/nicvf_ethdev.c
> @@ -151,7 +151,6 @@ nicvf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
>   	struct nicvf *nic = nicvf_pmd_priv(dev);
>   	uint32_t buffsz, frame_size = mtu + NIC_HW_L2_OVERHEAD;
>   	size_t i;
> -	struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> @@ -176,11 +175,6 @@ nicvf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
>   		(frame_size + 2 * VLAN_TAG_SIZE > buffsz * NIC_HW_MAX_SEGS))
>   		return -EINVAL;
>   
> -	if (mtu > RTE_ETHER_MTU)
> -		rxmode->offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		rxmode->offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	if (nicvf_mbox_update_hw_max_frs(nic, mtu))
>   		return -EINVAL;
>   
> diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
> index 269de9f848dd..35b98097c3a4 100644
> --- a/drivers/net/txgbe/txgbe_ethdev.c
> +++ b/drivers/net/txgbe/txgbe_ethdev.c
> @@ -3486,12 +3486,6 @@ txgbe_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>   		return -EINVAL;
>   	}
>   
> -	/* switch to jumbo mode if needed */
> -	if (mtu > RTE_ETHER_MTU)
> -		dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> -	else
> -		dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> -
>   	if (hw->mode)
>   		wr32m(hw, TXGBE_FRMSZ, TXGBE_FRMSZ_MAX_MASK,
>   			TXGBE_FRAME_SIZE_MAX);
> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
> index 4d0584af52e3..1740bab98a83 100644
> --- a/lib/ethdev/rte_ethdev.c
> +++ b/lib/ethdev/rte_ethdev.c
> @@ -3639,6 +3639,7 @@ rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)
>   	int ret;
>   	struct rte_eth_dev_info dev_info;
>   	struct rte_eth_dev *dev;
> +	int is_jumbo_frame_capable = 0;
>   
>   	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
>   	dev = &rte_eth_devices[port_id];
> @@ -3657,12 +3658,27 @@ rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)
>   
>   		if (mtu < dev_info.min_mtu || mtu > dev_info.max_mtu)
>   			return -EINVAL;
> +
> +		if ((dev_info.rx_offload_capa & DEV_RX_OFFLOAD_JUMBO_FRAME) != 0)
> +			is_jumbo_frame_capable = 1;
>   	}
>   
> +	if (mtu > RTE_ETHER_MTU && is_jumbo_frame_capable == 0)
> +		return -EINVAL;
> +
>   	ret = (*dev->dev_ops->mtu_set)(dev, mtu);
> -	if (!ret)
> +	if (ret == 0) {
>   		dev->data->mtu = mtu;
>   
> +		/* switch to jumbo mode if needed */
> +		if (mtu > RTE_ETHER_MTU)
> +			dev->data->dev_conf.rxmode.offloads |=
> +				DEV_RX_OFFLOAD_JUMBO_FRAME;
> +		else
> +			dev->data->dev_conf.rxmode.offloads &=
> +				~DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	}
> +
>   	return eth_err(port_id, ret);
>   }
>