Hi, > -----Original Message----- > From: Yigit, Ferruh <ferruh.yi...@intel.com> > Sent: Saturday, July 10, 2021 1:29 > To: Somalapuram Amaranath <asoma...@amd.com>; Ajit Khaparde > <ajit.khapa...@broadcom.com>; Somnath Kotur > <somnath.ko...@broadcom.com>; Nithin Dabilpuram > <ndabilpu...@marvell.com>; Kiran Kumar K <kirankum...@marvell.com>; > Sunil Kumar Kori <sk...@marvell.com>; Satha Rao > <skotesh...@marvell.com>; Rahul Lakkireddy > <rahul.lakkire...@chelsio.com>; Hemant Agrawal > <hemant.agra...@nxp.com>; Sachin Saxena <sachin.sax...@oss.nxp.com>; > Wang, Haiyue <haiyue.w...@intel.com>; Gagandeep Singh > <g.si...@nxp.com>; Ziyang Xuan <xuanziya...@huawei.com>; Xiaoyun > Wang <cloud.wangxiao...@huawei.com>; Guoyang Zhou > <zhouguoy...@huawei.com>; Min Hu (Connor) <humi...@huawei.com>; > Yisen Zhuang <yisen.zhu...@huawei.com>; Lijun Ou > <ouli...@huawei.com>; Xing, Beilei <beilei.x...@intel.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>; Shijith Thotton > <sthot...@marvell.com>; Srisivasubramanian Srinivasan > <sriniva...@marvell.com>; Heinrich Kuhn > <heinrich.k...@netronome.com>; Harman Kalra <hka...@marvell.com>; > Jerin Jacob <jer...@marvell.com>; Rasesh Mody <rm...@marvell.com>; > Devendra Singh Rawat <dsinghra...@marvell.com>; Igor Russkikh > <irussk...@marvell.com>; Andrew Rybchenko > <andrew.rybche...@oktetlabs.ru>; Maciej Czekaj <mcze...@marvell.com>; > Jiawen Wu <jiawe...@trustnetic.com>; Jian Wang > <jianw...@trustnetic.com>; Thomas Monjalon <tho...@monjalon.net> > Cc: Yigit, Ferruh <ferruh.yi...@intel.com>; dev@dpdk.org > Subject: [PATCH 2/4] ethdev: move jumbo frame offload check to library > > 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.yi...@intel.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/i40e/i40e_ethdev_vf.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_net.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 +++++++++++++++++- > 28 files changed, 29 insertions(+), 171 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 335505a106d5..4344a012f06e > 100644 > --- a/drivers/net/bnxt/bnxt_ethdev.c > +++ b/drivers/net/bnxt/bnxt_ethdev.c > @@ -3018,15 +3018,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 56703e3a39e8..a444f749bb96 > 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 6213bcbf3a43..be2858b3adac 100644 > --- a/drivers/net/dpaa2/dpaa2_ethdev.c > +++ b/drivers/net/dpaa2/dpaa2_ethdev.c > @@ -1470,13 +1470,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 35b517891d67..f15774eae20d > 100644 > --- a/drivers/net/e1000/igb_ethdev.c > +++ b/drivers/net/e1000/igb_ethdev.c > @@ -4401,15 +4401,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 c737ef8d06d8..c1cde811a252 100644 > --- a/drivers/net/hinic/hinic_pmd_ethdev.c > +++ b/drivers/net/hinic/hinic_pmd_ethdev.c > @@ -1556,13 +1556,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 8bccdeddb2f7..868d381a4772 > 100644 > --- a/drivers/net/hns3/hns3_ethdev.c > +++ b/drivers/net/hns3/hns3_ethdev.c > @@ -2597,7 +2597,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) { > @@ -2607,7 +2606,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); > > /* > @@ -2622,12 +2620,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 ca839fa55fa0..ff28cad53a03 100644 > --- a/drivers/net/hns3/hns3_ethdev_vf.c > +++ b/drivers/net/hns3/hns3_ethdev_vf.c > @@ -920,12 +920,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; > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c > index 1161f301b9ae..c5058f26dff2 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -11772,11 +11772,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/i40e/i40e_ethdev_vf.c > b/drivers/net/i40e/i40e_ethdev_vf.c > index 086a167ca672..2015a86ba5ca 100644 > --- a/drivers/net/i40e/i40e_ethdev_vf.c > +++ b/drivers/net/i40e/i40e_ethdev_vf.c > @@ -2884,11 +2884,6 @@ i40evf_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 13c2329d85a7..ba5be45e8c5e 100644 > --- a/drivers/net/iavf/iavf_ethdev.c > +++ b/drivers/net/iavf/iavf_ethdev.c > @@ -1446,13 +1446,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 bdda6fee3f8e..502e410b5641 100644 > --- a/drivers/net/ice/ice_ethdev.c > +++ b/drivers/net/ice/ice_ethdev.c > @@ -3806,11 +3806,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);
Reviewed-by: Rosen Xu <rosen...@intel.com>