[3/4] ethdev: move check to library for MTU set

Message ID 20210709172923.3369846-3-ferruh.yigit@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Andrew Rybchenko
Headers
Series [1/4] ethdev: fix max Rx packet length |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Ferruh Yigit July 9, 2021, 5:29 p.m. UTC
  Move requested MTU value check to the API to prevent the duplicated
code.

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 drivers/net/axgbe/axgbe_ethdev.c        | 15 ++++-----------
 drivers/net/bnxt/bnxt_ethdev.c          |  2 +-
 drivers/net/cxgbe/cxgbe_ethdev.c        | 13 +------------
 drivers/net/dpaa/dpaa_ethdev.c          |  2 --
 drivers/net/dpaa2/dpaa2_ethdev.c        |  4 ----
 drivers/net/e1000/em_ethdev.c           | 10 ----------
 drivers/net/e1000/igb_ethdev.c          | 11 -----------
 drivers/net/enetc/enetc_ethdev.c        |  4 ----
 drivers/net/hinic/hinic_pmd_ethdev.c    |  8 +-------
 drivers/net/i40e/i40e_ethdev.c          | 17 ++++-------------
 drivers/net/i40e/i40e_ethdev_vf.c       | 17 ++++-------------
 drivers/net/iavf/iavf_ethdev.c          | 10 ++--------
 drivers/net/ice/ice_ethdev.c            | 14 +++-----------
 drivers/net/igc/igc_ethdev.c            |  5 -----
 drivers/net/ipn3ke/ipn3ke_representor.c |  6 ------
 drivers/net/liquidio/lio_ethdev.c       | 10 ----------
 drivers/net/nfp/nfp_net.c               |  4 ----
 drivers/net/octeontx/octeontx_ethdev.c  |  4 ----
 drivers/net/octeontx2/otx2_ethdev_ops.c |  5 -----
 drivers/net/qede/qede_ethdev.c          | 12 ------------
 drivers/net/thunderx/nicvf_ethdev.c     |  6 ------
 drivers/net/txgbe/txgbe_ethdev.c        | 10 ----------
 lib/ethdev/rte_ethdev.c                 |  9 +++++++++
 23 files changed, 29 insertions(+), 169 deletions(-)
  

Comments

Andrew Rybchenko July 13, 2021, 1:56 p.m. UTC | #1
On 7/9/21 8:29 PM, Ferruh Yigit wrote:
> Move requested MTU value check to the API to prevent the duplicated
> code.
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>

Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
  
Xu, Rosen July 18, 2021, 7:52 a.m. UTC | #2
Hi,

> -----Original Message-----
> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> Sent: Saturday, July 10, 2021 1:29
> To: Somalapuram Amaranath <asomalap@amd.com>; Ajit Khaparde
> <ajit.khaparde@broadcom.com>; Somnath Kotur
> <somnath.kotur@broadcom.com>; Rahul Lakkireddy
> <rahul.lakkireddy@chelsio.com>; Hemant Agrawal
> <hemant.agrawal@nxp.com>; Sachin Saxena <sachin.saxena@oss.nxp.com>;
> Wang, Haiyue <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>; Xing, Beilei <beilei.xing@intel.com>; Wu,
> Jingjing <jingjing.wu@intel.com>; Yang, Qiming <qiming.yang@intel.com>;
> Zhang, Qi Z <qi.z.zhang@intel.com>; Xu, Rosen <rosen.xu@intel.com>;
> Shijith Thotton <sthotton@marvell.com>; Srisivasubramanian Srinivasan
> <srinivasan@marvell.com>; Heinrich Kuhn
> <heinrich.kuhn@netronome.com>; Harman Kalra <hkalra@marvell.com>;
> Jerin Jacob <jerinj@marvell.com>; Nithin Dabilpuram
> <ndabilpuram@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>;
> Rasesh Mody <rmody@marvell.com>; Devendra Singh Rawat
> <dsinghrawat@marvell.com>; Igor Russkikh <irusskikh@marvell.com>;
> Maciej Czekaj <mczekaj@marvell.com>; Jiawen Wu
> <jiawenwu@trustnetic.com>; Jian Wang <jianwang@trustnetic.com>;
> Thomas Monjalon <thomas@monjalon.net>; Andrew Rybchenko
> <andrew.rybchenko@oktetlabs.ru>
> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org
> Subject: [PATCH 3/4] ethdev: move check to library for MTU set
> 
> Move requested MTU value check to the API to prevent the duplicated code.
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
>  drivers/net/axgbe/axgbe_ethdev.c        | 15 ++++-----------
>  drivers/net/bnxt/bnxt_ethdev.c          |  2 +-
>  drivers/net/cxgbe/cxgbe_ethdev.c        | 13 +------------
>  drivers/net/dpaa/dpaa_ethdev.c          |  2 --
>  drivers/net/dpaa2/dpaa2_ethdev.c        |  4 ----
>  drivers/net/e1000/em_ethdev.c           | 10 ----------
>  drivers/net/e1000/igb_ethdev.c          | 11 -----------
>  drivers/net/enetc/enetc_ethdev.c        |  4 ----
>  drivers/net/hinic/hinic_pmd_ethdev.c    |  8 +-------
>  drivers/net/i40e/i40e_ethdev.c          | 17 ++++-------------
>  drivers/net/i40e/i40e_ethdev_vf.c       | 17 ++++-------------
>  drivers/net/iavf/iavf_ethdev.c          | 10 ++--------
>  drivers/net/ice/ice_ethdev.c            | 14 +++-----------
>  drivers/net/igc/igc_ethdev.c            |  5 -----
>  drivers/net/ipn3ke/ipn3ke_representor.c |  6 ------
>  drivers/net/liquidio/lio_ethdev.c       | 10 ----------
>  drivers/net/nfp/nfp_net.c               |  4 ----
>  drivers/net/octeontx/octeontx_ethdev.c  |  4 ----
> drivers/net/octeontx2/otx2_ethdev_ops.c |  5 -----
>  drivers/net/qede/qede_ethdev.c          | 12 ------------
>  drivers/net/thunderx/nicvf_ethdev.c     |  6 ------
>  drivers/net/txgbe/txgbe_ethdev.c        | 10 ----------
>  lib/ethdev/rte_ethdev.c                 |  9 +++++++++
>  23 files changed, 29 insertions(+), 169 deletions(-)
> 
> diff --git a/drivers/net/axgbe/axgbe_ethdev.c
> b/drivers/net/axgbe/axgbe_ethdev.c
> index 2960834b4539..c36cd7b1d2f0 100644
> --- a/drivers/net/axgbe/axgbe_ethdev.c
> +++ b/drivers/net/axgbe/axgbe_ethdev.c
> @@ -1478,25 +1478,18 @@ axgbe_dev_supported_ptypes_get(struct
> rte_eth_dev *dev)
> 
>  static int axgb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)  {
> -	struct rte_eth_dev_info dev_info;
>  	struct axgbe_port *pdata = dev->data->dev_private;
> -	uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> -	unsigned int val = 0;
> -	axgbe_dev_info_get(dev, &dev_info);
> -	/* check that mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> dev_info.max_rx_pktlen)
> -		return -EINVAL;
> +	unsigned int val;
> +
>  	/* mtu setting is forbidden if port is start */
>  	if (dev->data->dev_started) {
>  		PMD_DRV_LOG(ERR, "port %d must be stopped before
> configuration",
>  				dev->data->port_id);
>  		return -EBUSY;
>  	}
> -	if (mtu > RTE_ETHER_MTU)
> -		val = 1;
> -	else
> -		val = 0;
> +	val = mtu > RTE_ETHER_MTU ? 1 : 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 4344a012f06e..1e7da8ba61a6
> 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -2991,7 +2991,7 @@ int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev,
> uint16_t new_mtu)
>  	uint32_t overhead = BNXT_MAX_PKT_LEN - BNXT_MAX_MTU;
>  	struct bnxt *bp = eth_dev->data->dev_private;
>  	uint32_t new_pkt_size;
> -	uint32_t rc = 0;
> +	uint32_t rc;
>  	uint32_t i;
> 
>  	rc = is_bnxt_in_error(bp);
> diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c
> b/drivers/net/cxgbe/cxgbe_ethdev.c
> index 0c9cc2f5bb3f..70b879fed100 100644
> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
> @@ -301,21 +301,10 @@ int cxgbe_dev_mtu_set(struct rte_eth_dev
> *eth_dev, uint16_t mtu)  {
>  	struct port_info *pi = eth_dev->data->dev_private;
>  	struct adapter *adapter = pi->adapter;
> -	struct rte_eth_dev_info dev_info;
> -	int err;
>  	uint16_t new_mtu = mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> 
> -	err = cxgbe_dev_info_get(eth_dev, &dev_info);
> -	if (err != 0)
> -		return err;
> -
> -	/* Must accommodate at least RTE_ETHER_MIN_MTU */
> -	if (mtu < RTE_ETHER_MIN_MTU || new_mtu >
> dev_info.max_rx_pktlen)
> -		return -EINVAL;
> -
> -	err = t4_set_rxmode(adapter, adapter->mbox, pi->viid, new_mtu, -1,
> -1,
> +	return 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 a444f749bb96..60dd4f67fc26
> 100644
> --- a/drivers/net/dpaa/dpaa_ethdev.c
> +++ b/drivers/net/dpaa/dpaa_ethdev.c
> @@ -167,8 +167,6 @@ dpaa_mtu_set(struct rte_eth_dev *dev, uint16_t
> mtu)
> 
>  	PMD_INIT_FUNC_TRACE();
> 
> -	if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> DPAA_MAX_RX_PKT_LEN)
> -		return -EINVAL;
>  	/*
>  	 * Refuse mtu that requires the support of scattered packets
>  	 * when this feature has not been enabled before.
> diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c
> b/drivers/net/dpaa2/dpaa2_ethdev.c
> index be2858b3adac..6b44b0557e6a 100644
> --- a/drivers/net/dpaa2/dpaa2_ethdev.c
> +++ b/drivers/net/dpaa2/dpaa2_ethdev.c
> @@ -1466,10 +1466,6 @@ dpaa2_dev_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)
>  		return -EINVAL;
>  	}
> 
> -	/* check that mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> DPAA2_MAX_RX_PKT_LEN)
> -		return -EINVAL;
> -
>  	/* 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 1b41dd04df5a..6ebef55588bc
> 100644
> --- a/drivers/net/e1000/em_ethdev.c
> +++ b/drivers/net/e1000/em_ethdev.c
> @@ -1788,22 +1788,12 @@ eth_em_default_mac_addr_set(struct
> rte_eth_dev *dev,  static int  eth_em_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)  {
> -	struct rte_eth_dev_info dev_info;
>  	struct e1000_hw *hw;
>  	uint32_t frame_size;
>  	uint32_t rctl;
> -	int ret;
> -
> -	ret = eth_em_infos_get(dev, &dev_info);
> -	if (ret != 0)
> -		return ret;
> 
>  	frame_size = mtu + E1000_ETH_OVERHEAD;
> 
> -	/* check that mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> dev_info.max_rx_pktlen)
> -		return -EINVAL;
> -
>  	/*
>  	 * If device is started, refuse mtu that requires the support of
>  	 * scattered packets when this feature has not been enabled before.
> diff --git a/drivers/net/e1000/igb_ethdev.c
> b/drivers/net/e1000/igb_ethdev.c index f15774eae20d..fb69210ba9f4
> 100644
> --- a/drivers/net/e1000/igb_ethdev.c
> +++ b/drivers/net/e1000/igb_ethdev.c
> @@ -4368,9 +4368,7 @@ eth_igb_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)  {
>  	uint32_t rctl;
>  	struct e1000_hw *hw;
> -	struct rte_eth_dev_info dev_info;
>  	uint32_t frame_size = mtu + E1000_ETH_OVERHEAD;
> -	int ret;
> 
>  	hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
> 
> @@ -4379,15 +4377,6 @@ eth_igb_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)
>  	if (hw->mac.type == e1000_82571)
>  		return -ENOTSUP;
>  #endif
> -	ret = eth_igb_infos_get(dev, &dev_info);
> -	if (ret != 0)
> -		return ret;
> -
> -	/* check that mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU ||
> -			frame_size > dev_info.max_rx_pktlen)
> -		return -EINVAL;
> -
>  	/*
>  	 * If device is started, refuse mtu that requires the support of
>  	 * scattered packets when this feature has not been enabled before.
> diff --git a/drivers/net/enetc/enetc_ethdev.c
> b/drivers/net/enetc/enetc_ethdev.c
> index fbcbbb6c0533..a7372c1787c7 100644
> --- a/drivers/net/enetc/enetc_ethdev.c
> +++ b/drivers/net/enetc/enetc_ethdev.c
> @@ -662,10 +662,6 @@ enetc_mtu_set(struct rte_eth_dev *dev, uint16_t
> mtu)
>  	struct enetc_hw *enetc_hw = &hw->hw;
>  	uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> 
> -	/* check that mtu is within the allowed range */
> -	if (mtu < ENETC_MAC_MINFRM_SIZE || frame_size >
> ENETC_MAC_MAXFRM_SIZE)
> -		return -EINVAL;
> -
>  	/*
>  	 * Refuse mtu that requires the support of scattered packets
>  	 * when this feature has not been enabled before.
> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c
> b/drivers/net/hinic/hinic_pmd_ethdev.c
> index c1cde811a252..ce0b52c718ab 100644
> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
> @@ -1539,17 +1539,11 @@ static void hinic_deinit_mac_addr(struct
> rte_eth_dev *eth_dev)  static int hinic_dev_set_mtu(struct rte_eth_dev
> *dev, uint16_t mtu)  {
>  	struct hinic_nic_dev *nic_dev =
> HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
> -	int ret = 0;
> +	int ret;
> 
>  	PMD_DRV_LOG(INFO, "Set port mtu, port_id: %d, mtu: %d,
> max_pkt_len: %d",
>  			dev->data->port_id, mtu,
> HINIC_MTU_TO_PKTLEN(mtu));
> 
> -	if (mtu < HINIC_MIN_MTU_SIZE || mtu > HINIC_MAX_MTU_SIZE) {
> -		PMD_DRV_LOG(ERR, "Invalid mtu: %d, must between %d
> and %d",
> -				mtu, HINIC_MIN_MTU_SIZE,
> HINIC_MAX_MTU_SIZE);
> -		return -EINVAL;
> -	}
> -
>  	ret = hinic_set_port_mtu(nic_dev->hwdev, mtu);
>  	if (ret) {
>  		PMD_DRV_LOG(ERR, "Set port mtu failed, ret: %d", ret); diff
> --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index c5058f26dff2..dad151eac5f1 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -11754,25 +11754,16 @@ static int i40e_set_default_mac_addr(struct
> rte_eth_dev *dev,  }
> 
>  static int
> -i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
> +i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu __rte_unused)
>  {
> -	struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
> -	struct rte_eth_dev_data *dev_data = pf->dev_data;
> -	uint32_t frame_size = mtu + I40E_ETH_OVERHEAD;
> -	int ret = 0;
> -
> -	/* check if mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> I40E_FRAME_SIZE_MAX)
> -		return -EINVAL;
> -
>  	/* mtu setting is forbidden if port is start */
> -	if (dev_data->dev_started) {
> +	if (dev->data->dev_started) {
>  		PMD_DRV_LOG(ERR, "port %d must be stopped before
> configuration",
> -			    dev_data->port_id);
> +			    dev->data->port_id);
>  		return -EBUSY;
>  	}
> 
> -	return ret;
> +	return 0;
>  }
> 
>  /* Restore ethertype filter */
> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c
> b/drivers/net/i40e/i40e_ethdev_vf.c
> index 2015a86ba5ca..f7f9d44ef181 100644
> --- a/drivers/net/i40e/i40e_ethdev_vf.c
> +++ b/drivers/net/i40e/i40e_ethdev_vf.c
> @@ -2866,25 +2866,16 @@ i40evf_dev_rss_hash_conf_get(struct
> rte_eth_dev *dev,  }
> 
>  static int
> -i40evf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
> +i40evf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu __rte_unused)
>  {
> -	struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data-
> >dev_private);
> -	struct rte_eth_dev_data *dev_data = vf->dev_data;
> -	uint32_t frame_size = mtu + I40E_ETH_OVERHEAD;
> -	int ret = 0;
> -
> -	/* check if mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> I40E_FRAME_SIZE_MAX)
> -		return -EINVAL;
> -
>  	/* mtu setting is forbidden if port is start */
> -	if (dev_data->dev_started) {
> +	if (dev->data->dev_started) {
>  		PMD_DRV_LOG(ERR, "port %d must be stopped before
> configuration",
> -			    dev_data->port_id);
> +			    dev->data->port_id);
>  		return -EBUSY;
>  	}
> 
> -	return ret;
> +	return 0;
>  }
> 
>  static int
> diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
> index ba5be45e8c5e..049671ef3da9 100644
> --- a/drivers/net/iavf/iavf_ethdev.c
> +++ b/drivers/net/iavf/iavf_ethdev.c
> @@ -1432,21 +1432,15 @@ iavf_dev_rss_hash_conf_get(struct rte_eth_dev
> *dev,  }
> 
>  static int
> -iavf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
> +iavf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu __rte_unused)
>  {
> -	uint32_t frame_size = mtu + IAVF_ETH_OVERHEAD;
> -	int ret = 0;
> -
> -	if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> IAVF_FRAME_SIZE_MAX)
> -		return -EINVAL;
> -
>  	/* mtu setting is forbidden if port is start */
>  	if (dev->data->dev_started) {
>  		PMD_DRV_LOG(ERR, "port must be stopped before
> configuration");
>  		return -EBUSY;
>  	}
> 
> -	return ret;
> +	return 0;
>  }
> 
>  static int
> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
> index 502e410b5641..c1a96d3de183 100644
> --- a/drivers/net/ice/ice_ethdev.c
> +++ b/drivers/net/ice/ice_ethdev.c
> @@ -3788,21 +3788,13 @@ ice_dev_set_link_down(struct rte_eth_dev
> *dev)  }
> 
>  static int
> -ice_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
> +ice_mtu_set(struct rte_eth_dev *dev, uint16_t mtu __rte_unused)
>  {
> -	struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
> -	struct rte_eth_dev_data *dev_data = pf->dev_data;
> -	uint32_t frame_size = mtu + ICE_ETH_OVERHEAD;
> -
> -	/* check if mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> ICE_FRAME_SIZE_MAX)
> -		return -EINVAL;
> -
>  	/* mtu setting is forbidden if port is start */
> -	if (dev_data->dev_started) {
> +	if (dev->data->dev_started) {
>  		PMD_DRV_LOG(ERR,
>  			    "port %d must be stopped before configuration",
> -			    dev_data->port_id);
> +			    dev->data->port_id);
>  		return -EBUSY;
>  	}
> 
> diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c index
> dcbc26b8186e..e279ae1fff1d 100644
> --- a/drivers/net/igc/igc_ethdev.c
> +++ b/drivers/net/igc/igc_ethdev.c
> @@ -1576,11 +1576,6 @@ eth_igc_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)
>  	if (IGC_READ_REG(hw, IGC_CTRL_EXT) & IGC_CTRL_EXT_EXT_VLAN)
>  		frame_size += VLAN_TAG_SIZE;
> 
> -	/* check that mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU ||
> -		frame_size > MAX_RX_JUMBO_FRAME_SIZE)
> -		return -EINVAL;
> -
>  	/*
>  	 * If device is started, refuse mtu that requires the support of
>  	 * scattered packets when this feature has not been enabled before.
> diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c
> b/drivers/net/ipn3ke/ipn3ke_representor.c
> index e8a33f04bd69..377b96c0236a 100644
> --- a/drivers/net/ipn3ke/ipn3ke_representor.c
> +++ b/drivers/net/ipn3ke/ipn3ke_representor.c
> @@ -2778,12 +2778,6 @@ ipn3ke_rpst_mtu_set(struct rte_eth_dev
> *ethdev, uint16_t mtu)
>  	int ret = 0;
>  	struct ipn3ke_rpst *rpst = IPN3KE_DEV_PRIVATE_TO_RPST(ethdev);
>  	struct rte_eth_dev_data *dev_data = ethdev->data;
> -	uint32_t frame_size = mtu  + IPN3KE_ETH_OVERHEAD;
> -
> -	/* check if mtu is within the allowed range */
> -	if (mtu < RTE_ETHER_MIN_MTU ||
> -		frame_size > IPN3KE_MAC_FRAME_SIZE_MAX)
> -		return -EINVAL;
> 
>  	/* mtu setting is forbidden if port is start */
>  	/* make sure NIC port is stopped */

Reviewed-by: Rosen Xu <rosen.xu@intel.com>
  

Patch

diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index 2960834b4539..c36cd7b1d2f0 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -1478,25 +1478,18 @@  axgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev)
 
 static int axgb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 {
-	struct rte_eth_dev_info dev_info;
 	struct axgbe_port *pdata = dev->data->dev_private;
-	uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
-	unsigned int val = 0;
-	axgbe_dev_info_get(dev, &dev_info);
-	/* check that mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > dev_info.max_rx_pktlen)
-		return -EINVAL;
+	unsigned int val;
+
 	/* mtu setting is forbidden if port is start */
 	if (dev->data->dev_started) {
 		PMD_DRV_LOG(ERR, "port %d must be stopped before configuration",
 				dev->data->port_id);
 		return -EBUSY;
 	}
-	if (mtu > RTE_ETHER_MTU)
-		val = 1;
-	else
-		val = 0;
+	val = mtu > RTE_ETHER_MTU ? 1 : 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 4344a012f06e..1e7da8ba61a6 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -2991,7 +2991,7 @@  int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu)
 	uint32_t overhead = BNXT_MAX_PKT_LEN - BNXT_MAX_MTU;
 	struct bnxt *bp = eth_dev->data->dev_private;
 	uint32_t new_pkt_size;
-	uint32_t rc = 0;
+	uint32_t rc;
 	uint32_t i;
 
 	rc = is_bnxt_in_error(bp);
diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c
index 0c9cc2f5bb3f..70b879fed100 100644
--- a/drivers/net/cxgbe/cxgbe_ethdev.c
+++ b/drivers/net/cxgbe/cxgbe_ethdev.c
@@ -301,21 +301,10 @@  int cxgbe_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
 {
 	struct port_info *pi = eth_dev->data->dev_private;
 	struct adapter *adapter = pi->adapter;
-	struct rte_eth_dev_info dev_info;
-	int err;
 	uint16_t new_mtu = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
-	err = cxgbe_dev_info_get(eth_dev, &dev_info);
-	if (err != 0)
-		return err;
-
-	/* Must accommodate at least RTE_ETHER_MIN_MTU */
-	if (mtu < RTE_ETHER_MIN_MTU || new_mtu > dev_info.max_rx_pktlen)
-		return -EINVAL;
-
-	err = t4_set_rxmode(adapter, adapter->mbox, pi->viid, new_mtu, -1, -1,
+	return 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 a444f749bb96..60dd4f67fc26 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -167,8 +167,6 @@  dpaa_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > DPAA_MAX_RX_PKT_LEN)
-		return -EINVAL;
 	/*
 	 * Refuse mtu that requires the support of scattered packets
 	 * when this feature has not been enabled before.
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index be2858b3adac..6b44b0557e6a 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -1466,10 +1466,6 @@  dpaa2_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 		return -EINVAL;
 	}
 
-	/* check that mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > DPAA2_MAX_RX_PKT_LEN)
-		return -EINVAL;
-
 	/* 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 1b41dd04df5a..6ebef55588bc 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -1788,22 +1788,12 @@  eth_em_default_mac_addr_set(struct rte_eth_dev *dev,
 static int
 eth_em_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 {
-	struct rte_eth_dev_info dev_info;
 	struct e1000_hw *hw;
 	uint32_t frame_size;
 	uint32_t rctl;
-	int ret;
-
-	ret = eth_em_infos_get(dev, &dev_info);
-	if (ret != 0)
-		return ret;
 
 	frame_size = mtu + E1000_ETH_OVERHEAD;
 
-	/* check that mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > dev_info.max_rx_pktlen)
-		return -EINVAL;
-
 	/*
 	 * If device is started, refuse mtu that requires the support of
 	 * scattered packets when this feature has not been enabled before.
diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index f15774eae20d..fb69210ba9f4 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -4368,9 +4368,7 @@  eth_igb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 {
 	uint32_t rctl;
 	struct e1000_hw *hw;
-	struct rte_eth_dev_info dev_info;
 	uint32_t frame_size = mtu + E1000_ETH_OVERHEAD;
-	int ret;
 
 	hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
@@ -4379,15 +4377,6 @@  eth_igb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 	if (hw->mac.type == e1000_82571)
 		return -ENOTSUP;
 #endif
-	ret = eth_igb_infos_get(dev, &dev_info);
-	if (ret != 0)
-		return ret;
-
-	/* check that mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU ||
-			frame_size > dev_info.max_rx_pktlen)
-		return -EINVAL;
-
 	/*
 	 * If device is started, refuse mtu that requires the support of
 	 * scattered packets when this feature has not been enabled before.
diff --git a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c
index fbcbbb6c0533..a7372c1787c7 100644
--- a/drivers/net/enetc/enetc_ethdev.c
+++ b/drivers/net/enetc/enetc_ethdev.c
@@ -662,10 +662,6 @@  enetc_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 	struct enetc_hw *enetc_hw = &hw->hw;
 	uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 
-	/* check that mtu is within the allowed range */
-	if (mtu < ENETC_MAC_MINFRM_SIZE || frame_size > ENETC_MAC_MAXFRM_SIZE)
-		return -EINVAL;
-
 	/*
 	 * Refuse mtu that requires the support of scattered packets
 	 * when this feature has not been enabled before.
diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
index c1cde811a252..ce0b52c718ab 100644
--- a/drivers/net/hinic/hinic_pmd_ethdev.c
+++ b/drivers/net/hinic/hinic_pmd_ethdev.c
@@ -1539,17 +1539,11 @@  static void hinic_deinit_mac_addr(struct rte_eth_dev *eth_dev)
 static int hinic_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 {
 	struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
-	int ret = 0;
+	int ret;
 
 	PMD_DRV_LOG(INFO, "Set port mtu, port_id: %d, mtu: %d, max_pkt_len: %d",
 			dev->data->port_id, mtu, HINIC_MTU_TO_PKTLEN(mtu));
 
-	if (mtu < HINIC_MIN_MTU_SIZE || mtu > HINIC_MAX_MTU_SIZE) {
-		PMD_DRV_LOG(ERR, "Invalid mtu: %d, must between %d and %d",
-				mtu, HINIC_MIN_MTU_SIZE, HINIC_MAX_MTU_SIZE);
-		return -EINVAL;
-	}
-
 	ret = hinic_set_port_mtu(nic_dev->hwdev, mtu);
 	if (ret) {
 		PMD_DRV_LOG(ERR, "Set port mtu failed, ret: %d", ret);
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index c5058f26dff2..dad151eac5f1 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -11754,25 +11754,16 @@  static int i40e_set_default_mac_addr(struct rte_eth_dev *dev,
 }
 
 static int
-i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
+i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu __rte_unused)
 {
-	struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
-	struct rte_eth_dev_data *dev_data = pf->dev_data;
-	uint32_t frame_size = mtu + I40E_ETH_OVERHEAD;
-	int ret = 0;
-
-	/* check if mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > I40E_FRAME_SIZE_MAX)
-		return -EINVAL;
-
 	/* mtu setting is forbidden if port is start */
-	if (dev_data->dev_started) {
+	if (dev->data->dev_started) {
 		PMD_DRV_LOG(ERR, "port %d must be stopped before configuration",
-			    dev_data->port_id);
+			    dev->data->port_id);
 		return -EBUSY;
 	}
 
-	return ret;
+	return 0;
 }
 
 /* Restore ethertype filter */
diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index 2015a86ba5ca..f7f9d44ef181 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -2866,25 +2866,16 @@  i40evf_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
 }
 
 static int
-i40evf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
+i40evf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu __rte_unused)
 {
-	struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
-	struct rte_eth_dev_data *dev_data = vf->dev_data;
-	uint32_t frame_size = mtu + I40E_ETH_OVERHEAD;
-	int ret = 0;
-
-	/* check if mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > I40E_FRAME_SIZE_MAX)
-		return -EINVAL;
-
 	/* mtu setting is forbidden if port is start */
-	if (dev_data->dev_started) {
+	if (dev->data->dev_started) {
 		PMD_DRV_LOG(ERR, "port %d must be stopped before configuration",
-			    dev_data->port_id);
+			    dev->data->port_id);
 		return -EBUSY;
 	}
 
-	return ret;
+	return 0;
 }
 
 static int
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index ba5be45e8c5e..049671ef3da9 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -1432,21 +1432,15 @@  iavf_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
 }
 
 static int
-iavf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
+iavf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu __rte_unused)
 {
-	uint32_t frame_size = mtu + IAVF_ETH_OVERHEAD;
-	int ret = 0;
-
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > IAVF_FRAME_SIZE_MAX)
-		return -EINVAL;
-
 	/* mtu setting is forbidden if port is start */
 	if (dev->data->dev_started) {
 		PMD_DRV_LOG(ERR, "port must be stopped before configuration");
 		return -EBUSY;
 	}
 
-	return ret;
+	return 0;
 }
 
 static int
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index 502e410b5641..c1a96d3de183 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -3788,21 +3788,13 @@  ice_dev_set_link_down(struct rte_eth_dev *dev)
 }
 
 static int
-ice_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
+ice_mtu_set(struct rte_eth_dev *dev, uint16_t mtu __rte_unused)
 {
-	struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
-	struct rte_eth_dev_data *dev_data = pf->dev_data;
-	uint32_t frame_size = mtu + ICE_ETH_OVERHEAD;
-
-	/* check if mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > ICE_FRAME_SIZE_MAX)
-		return -EINVAL;
-
 	/* mtu setting is forbidden if port is start */
-	if (dev_data->dev_started) {
+	if (dev->data->dev_started) {
 		PMD_DRV_LOG(ERR,
 			    "port %d must be stopped before configuration",
-			    dev_data->port_id);
+			    dev->data->port_id);
 		return -EBUSY;
 	}
 
diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
index dcbc26b8186e..e279ae1fff1d 100644
--- a/drivers/net/igc/igc_ethdev.c
+++ b/drivers/net/igc/igc_ethdev.c
@@ -1576,11 +1576,6 @@  eth_igc_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 	if (IGC_READ_REG(hw, IGC_CTRL_EXT) & IGC_CTRL_EXT_EXT_VLAN)
 		frame_size += VLAN_TAG_SIZE;
 
-	/* check that mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU ||
-		frame_size > MAX_RX_JUMBO_FRAME_SIZE)
-		return -EINVAL;
-
 	/*
 	 * If device is started, refuse mtu that requires the support of
 	 * scattered packets when this feature has not been enabled before.
diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c
index e8a33f04bd69..377b96c0236a 100644
--- a/drivers/net/ipn3ke/ipn3ke_representor.c
+++ b/drivers/net/ipn3ke/ipn3ke_representor.c
@@ -2778,12 +2778,6 @@  ipn3ke_rpst_mtu_set(struct rte_eth_dev *ethdev, uint16_t mtu)
 	int ret = 0;
 	struct ipn3ke_rpst *rpst = IPN3KE_DEV_PRIVATE_TO_RPST(ethdev);
 	struct rte_eth_dev_data *dev_data = ethdev->data;
-	uint32_t frame_size = mtu  + IPN3KE_ETH_OVERHEAD;
-
-	/* check if mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU ||
-		frame_size > IPN3KE_MAC_FRAME_SIZE_MAX)
-		return -EINVAL;
 
 	/* mtu setting is forbidden if port is start */
 	/* make sure NIC port is stopped */
diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c
index 5c40f16bfa24..0fd8b247aabf 100644
--- a/drivers/net/liquidio/lio_ethdev.c
+++ b/drivers/net/liquidio/lio_ethdev.c
@@ -434,7 +434,6 @@  static int
 lio_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
 {
 	struct lio_device *lio_dev = LIO_DEV(eth_dev);
-	uint16_t pf_mtu = lio_dev->linfo.link.s.mtu;
 	struct lio_dev_ctrl_cmd ctrl_cmd;
 	struct lio_ctrl_pkt ctrl_pkt;
 
@@ -446,15 +445,6 @@  lio_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
 		return -EINVAL;
 	}
 
-	/* check if VF MTU is within allowed range.
-	 * New value should not exceed PF MTU.
-	 */
-	if (mtu < RTE_ETHER_MIN_MTU || mtu > pf_mtu) {
-		lio_dev_err(lio_dev, "VF MTU should be >= %d and <= %d\n",
-			    RTE_ETHER_MIN_MTU, pf_mtu);
-		return -EINVAL;
-	}
-
 	/* flush added to prevent cmd failure
 	 * incase the queue is full
 	 */
diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
index 5cea035e1465..8efeacc03943 100644
--- a/drivers/net/nfp/nfp_net.c
+++ b/drivers/net/nfp/nfp_net.c
@@ -1539,10 +1539,6 @@  nfp_net_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 
 	hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
-	/* check that mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU || (uint32_t)mtu > hw->max_mtu)
-		return -EINVAL;
-
 	/* mtu setting is forbidden if port is started */
 	if (dev->data->dev_started) {
 		PMD_DRV_LOG(ERR, "port %d must be stopped before configuration",
diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c
index fb65be2c2dc3..b2355fa695bc 100644
--- a/drivers/net/octeontx/octeontx_ethdev.c
+++ b/drivers/net/octeontx/octeontx_ethdev.c
@@ -524,10 +524,6 @@  octeontx_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
 	struct rte_eth_dev_data *data = eth_dev->data;
 	int rc = 0;
 
-	/* Check if MTU is within the allowed range */
-	if (frame_size < OCCTX_MIN_FRS || frame_size > OCCTX_MAX_FRS)
-		return -EINVAL;
-
 	buffsz = data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM;
 
 	/* Refuse MTU that requires the support of scattered packets
diff --git a/drivers/net/octeontx2/otx2_ethdev_ops.c b/drivers/net/octeontx2/otx2_ethdev_ops.c
index 0c97ef7584a0..cba03b4bb9b8 100644
--- a/drivers/net/octeontx2/otx2_ethdev_ops.c
+++ b/drivers/net/octeontx2/otx2_ethdev_ops.c
@@ -18,11 +18,6 @@  otx2_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
 	int rc;
 
 	frame_size += NIX_TIMESYNC_RX_OFFSET * otx2_ethdev_is_ptp_en(dev);
-
-	/* Check if MTU is within the allowed range */
-	if (frame_size < NIX_MIN_FRS || frame_size > NIX_MAX_FRS)
-		return -EINVAL;
-
 	buffsz = data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM;
 
 	/* Refuse MTU that requires the support of scattered packets
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 71065f8072ac..098e56e9822f 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -2307,7 +2307,6 @@  static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 {
 	struct qede_dev *qdev = QEDE_INIT_QDEV(dev);
 	struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
-	struct rte_eth_dev_info dev_info = {0};
 	struct qede_fastpath *fp;
 	uint32_t frame_size;
 	uint16_t bufsz;
@@ -2315,19 +2314,8 @@  static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 	int i, rc;
 
 	PMD_INIT_FUNC_TRACE(edev);
-	rc = qede_dev_info_get(dev, &dev_info);
-	if (rc != 0) {
-		DP_ERR(edev, "Error during getting ethernet device info\n");
-		return rc;
-	}
 
 	frame_size = mtu + QEDE_MAX_ETHER_HDR_LEN;
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > dev_info.max_rx_pktlen) {
-		DP_ERR(edev, "MTU %u out of range, %u is maximum allowable\n",
-		       mtu, dev_info.max_rx_pktlen - RTE_ETHER_HDR_LEN -
-		       QEDE_ETH_OVERHEAD);
-		return -EINVAL;
-	}
 	if (!dev->data->scattered_rx &&
 	    frame_size > dev->data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM) {
 		DP_INFO(edev, "MTU greater than minimum RX buffer size of %u\n",
diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c
index 0639889b2144..ac8477cbd7f4 100644
--- a/drivers/net/thunderx/nicvf_ethdev.c
+++ b/drivers/net/thunderx/nicvf_ethdev.c
@@ -154,12 +154,6 @@  nicvf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (frame_size > NIC_HW_MAX_FRS)
-		return -EINVAL;
-
-	if (frame_size < NIC_HW_MIN_FRS)
-		return -EINVAL;
-
 	buffsz = dev->data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM;
 
 	/*
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index b1a3f9fbb84d..41b0e63cd79e 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -3459,18 +3459,8 @@  static int
 txgbe_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 {
 	struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
-	struct rte_eth_dev_info dev_info;
 	uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
 	struct rte_eth_dev_data *dev_data = dev->data;
-	int ret;
-
-	ret = txgbe_dev_info_get(dev, &dev_info);
-	if (ret != 0)
-		return ret;
-
-	/* check that mtu is within the allowed range */
-	if (mtu < RTE_ETHER_MIN_MTU || frame_size > dev_info.max_rx_pktlen)
-		return -EINVAL;
 
 	/* If device is started, refuse mtu that requires the support of
 	 * scattered packets when this feature has not been enabled before.
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index d649a5dd69a9..41c9e630e4d4 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -3638,6 +3638,9 @@  rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)
 	 * which relies on dev->dev_ops->dev_infos_get.
 	 */
 	if (*dev->dev_ops->dev_infos_get != NULL) {
+		uint16_t overhead_len;
+		uint32_t frame_size;
+
 		ret = rte_eth_dev_info_get(port_id, &dev_info);
 		if (ret != 0)
 			return ret;
@@ -3645,6 +3648,12 @@  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;
 
+		overhead_len = eth_dev_get_overhead_len(dev_info.max_rx_pktlen,
+				dev_info.max_mtu);
+		frame_size = mtu + overhead_len;
+		if (mtu < RTE_ETHER_MIN_MTU || frame_size > dev_info.max_rx_pktlen)
+			return -EINVAL;
+
 		if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_JUMBO_FRAME)
 			is_jumbo_frame_capable = 1;
 	}