Seems that this is align with the fixing process of the other pmds(ixgbe/txgbe) and it is not bad. Thanks.
Acked-by: Jeff Guo <jia....@intel.com> > -----Original Message----- > From: Yu, DapengX <dapengx...@intel.com> > Sent: Friday, February 19, 2021 6:03 PM > To: Guo, Jia <jia....@intel.com>; Wang, Haiyue <haiyue.w...@intel.com> > Cc: dev@dpdk.org; Yu, DapengX <dapengx...@intel.com>; sta...@dpdk.org > Subject: [PATCH] net/e1000: remove MTU setting limitation > > From: Dapeng Yu <dapengx...@intel.com> > > Currently, if requested MTU is bigger than mbuf size and scattered receive is > not enabled, setting MTU to that value fails. > > This patch allows setting this special MTU when device is stopped, because > scattered_rx will be re-configured during next port start and driver may > enable scattered receive according new MTU value. > > After this patch, driver may select different receive function automatically > after MTU set, according MTU values selected. > > Fixes: 59d0ecdbf0e1 ("ethdev: MTU accessors") > Cc: sta...@dpdk.org > > Signed-off-by: Dapeng Yu <dapengx...@intel.com> > --- > drivers/net/e1000/em_ethdev.c | 12 ++++++++---- > drivers/net/e1000/igb_ethdev.c | 12 ++++++++---- > 2 files changed, 16 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/e1000/em_ethdev.c > b/drivers/net/e1000/em_ethdev.c index 9b8c4a7de..3c6f643c1 100644 > --- a/drivers/net/e1000/em_ethdev.c > +++ b/drivers/net/e1000/em_ethdev.c > @@ -1805,11 +1805,15 @@ eth_em_mtu_set(struct rte_eth_dev *dev, > uint16_t mtu) > if (mtu < RTE_ETHER_MIN_MTU || frame_size > > dev_info.max_rx_pktlen) > return -EINVAL; > > - /* refuse mtu that requires the support of scattered packets when > this > - * feature has not been enabled before. */ > - if (!dev->data->scattered_rx && > - frame_size > dev->data->min_rx_buf_size - > RTE_PKTMBUF_HEADROOM) > + /* > + * If device is started, refuse mtu that requires the support of > + * scattered packets when this feature has not been enabled before. > + */ > + if (dev->data->dev_started && !dev->data->scattered_rx && > + frame_size > dev->data->min_rx_buf_size - > RTE_PKTMBUF_HEADROOM) { > + PMD_INIT_LOG(ERR, "Stop port first."); > return -EINVAL; > + } > > hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); > rctl = E1000_READ_REG(hw, E1000_RCTL); diff --git > a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index > 5323504e9..1716d6b90 100644 > --- a/drivers/net/e1000/igb_ethdev.c > +++ b/drivers/net/e1000/igb_ethdev.c > @@ -4394,11 +4394,15 @@ eth_igb_mtu_set(struct rte_eth_dev *dev, > uint16_t mtu) > frame_size > dev_info.max_rx_pktlen) > return -EINVAL; > > - /* refuse mtu that requires the support of scattered packets when > this > - * feature has not been enabled before. */ > - if (!dev->data->scattered_rx && > - frame_size > dev->data->min_rx_buf_size - > RTE_PKTMBUF_HEADROOM) > + /* > + * If device is started, refuse mtu that requires the support of > + * scattered packets when this feature has not been enabled before. > + */ > + if (dev->data->dev_started && !dev->data->scattered_rx && > + frame_size > dev->data->min_rx_buf_size - > RTE_PKTMBUF_HEADROOM) { > + PMD_INIT_LOG(ERR, "Stop port first."); > return -EINVAL; > + } > > rctl = E1000_READ_REG(hw, E1000_RCTL); > > -- > 2.27.0