[dpdk-dev] [PATCH 3/4] ethdev: move check to library for MTU set
Xu, Rosen
rosen.xu at intel.com
Sun Jul 18 09:52:02 CEST 2021
Hi,
> -----Original Message-----
> From: Yigit, Ferruh <ferruh.yigit at intel.com>
> Sent: Saturday, July 10, 2021 1:29
> To: Somalapuram Amaranath <asomalap at amd.com>; Ajit Khaparde
> <ajit.khaparde at broadcom.com>; Somnath Kotur
> <somnath.kotur at broadcom.com>; Rahul Lakkireddy
> <rahul.lakkireddy at chelsio.com>; Hemant Agrawal
> <hemant.agrawal at nxp.com>; Sachin Saxena <sachin.saxena at oss.nxp.com>;
> Wang, Haiyue <haiyue.wang at intel.com>; Gagandeep Singh
> <g.singh at nxp.com>; Ziyang Xuan <xuanziyang2 at huawei.com>; Xiaoyun
> Wang <cloud.wangxiaoyun at huawei.com>; Guoyang Zhou
> <zhouguoyang at huawei.com>; Xing, Beilei <beilei.xing at intel.com>; Wu,
> Jingjing <jingjing.wu at intel.com>; Yang, Qiming <qiming.yang at intel.com>;
> Zhang, Qi Z <qi.z.zhang at intel.com>; Xu, Rosen <rosen.xu at intel.com>;
> Shijith Thotton <sthotton at marvell.com>; Srisivasubramanian Srinivasan
> <srinivasan at marvell.com>; Heinrich Kuhn
> <heinrich.kuhn at netronome.com>; Harman Kalra <hkalra at marvell.com>;
> Jerin Jacob <jerinj at marvell.com>; Nithin Dabilpuram
> <ndabilpuram at marvell.com>; Kiran Kumar K <kirankumark at marvell.com>;
> Rasesh Mody <rmody at marvell.com>; Devendra Singh Rawat
> <dsinghrawat at marvell.com>; Igor Russkikh <irusskikh at marvell.com>;
> Maciej Czekaj <mczekaj at marvell.com>; Jiawen Wu
> <jiawenwu at trustnetic.com>; Jian Wang <jianwang at trustnetic.com>;
> Thomas Monjalon <thomas at monjalon.net>; Andrew Rybchenko
> <andrew.rybchenko at oktetlabs.ru>
> Cc: Yigit, Ferruh <ferruh.yigit at intel.com>; dev at 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 at 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 at intel.com>
More information about the dev
mailing list