-----Original Message-----
From: oulijun <ouli...@huawei.com>
Sent: Wednesday, December 30, 2020 6:20 PM
To: Yang, SteveX <stevex.y...@intel.com>; dev@dpdk.org
Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Xing, Beilei
<beilei.x...@intel.com>; Iremonger, Bernard
<bernard.iremon...@intel.com>; asoma...@amd.com;
rahul.lakkire...@chelsio.com; hemant.agra...@nxp.com;
sachin.sax...@oss.nxp.com; Guo, Jia <jia....@intel.com>; Wang, Haiyue
<haiyue.w...@intel.com>; g.si...@nxp.com; xuanziya...@huawei.com;
cloud.wangxiao...@huawei.com; zhouguoy...@huawei.com;
xavier.hu...@huawei.com; humi...@huawei.com;
yisen.zhu...@huawei.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>; sthot...@marvell.com;
sriniva...@marvell.com; heinrich.k...@netronome.com;
hka...@marvell.com; jer...@marvell.com; ndabilpu...@marvell.com;
kirankum...@marvell.com; rm...@marvell.com; shsha...@marvell.com;
andrew.rybche...@oktetlabs.ru; mcze...@marvell.com;
tho...@monjalon.net; Yigit, Ferruh <ferruh.yi...@intel.com>;
ivan.bo...@6wind.com; Ananyev, Konstantin
<konstantin.anan...@intel.com>; samuel.gauth...@6wind.com;
david.march...@6wind.com; shah...@mellanox.com;
step...@networkplumber.org; maxime.coque...@redhat.com;
olivier.m...@6wind.com; lihuis...@huawei.com; shreyansh.j...@nxp.com;
wei....@intel.com; fengchuns...@huawei.com; chenhao...@huawei.com;
tangchengch...@hisilicon.com; Zhang, Helin <helin.zh...@intel.com>;
yanglong...@intel.com; xiaolong...@intel.com; Xu, Ting
<ting...@intel.com>; Li, Xiaoyun <xiaoyun...@intel.com>; Wei, Dan
<dan....@intel.com>; Pei, Andy <andy....@intel.com>;
vattun...@marvell.com; sk...@marvell.com; sony.cha...@qlogic.com;
Richardson, Bruce <bruce.richard...@intel.com>; ivan.ma...@oktetlabs.ru;
r...@semihalf.com; slawomir.ro...@semihalf.com;
kamil.rytarow...@caviumnetworks.com; Zhao1, Wei <wei.zh...@intel.com>;
Jiang, JunyuX <junyux.ji...@intel.com>; kuma...@chelsio.com;
girish.nandibasa...@amd.com; rolf.neugeba...@netronome.com;
alejandro.luc...@netronome.com
Subject: Re: [PATCH v2 01/22] ethdev: fix MTU size exceeds max rx packet
length
在 2020/12/17 17:22, Steve Yang 写道:
If max rx packet length is smaller then MTU + Ether overhead, that
will drop all MTU size packets.
Update the MTU size according to the max rx packet and Ether overhead.
Fixes: 59d0ecdbf0e1 ("ethdev: MTU accessors")
Signed-off-by: Steve Yang <stevex.y...@intel.com>
---
lib/librte_ethdev/rte_ethdev.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/lib/librte_ethdev/rte_ethdev.c
b/lib/librte_ethdev/rte_ethdev.c index 17ddacc78d..ff6a1e675f 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -1292,6 +1292,7 @@ rte_eth_dev_configure(uint16_t port_id,
uint16_t nb_rx_q, uint16_t nb_tx_q,
struct rte_eth_dev *dev;
struct rte_eth_dev_info dev_info;
struct rte_eth_conf orig_conf;
+uint16_t overhead_len;
int diag;
int ret;
@@ -1323,6 +1324,15 @@ rte_eth_dev_configure(uint16_t port_id,
uint16_t nb_rx_q, uint16_t nb_tx_q,
if (ret != 0)
goto rollback;
+/* Get the real Ethernet overhead length */
+if (dev_info.max_mtu &&
+ dev_info.max_mtu != UINT16_MAX &&
+ dev_info.max_rx_pktlen &&
+ dev_info.max_rx_pktlen > dev_info.max_mtu)
+overhead_len = dev_info.max_rx_pktlen -
dev_info.max_mtu;
+else
+overhead_len = RTE_ETHER_HDR_LEN +
RTE_ETHER_CRC_LEN;
+
/* If number of queues specified by application for both Rx and Tx is
* zero, use driver preferred values. This cannot be done individually
* as it is valid for either Tx or Rx (but not both) to be zero.
@@ -1410,13 +1420,18 @@ rte_eth_dev_configure(uint16_t port_id,
uint16_t nb_rx_q, uint16_t nb_tx_q,
goto rollback;
}
} else {
-if (dev_conf->rxmode.max_rx_pkt_len <
RTE_ETHER_MIN_LEN ||
-dev_conf->rxmode.max_rx_pkt_len >
RTE_ETHER_MAX_LEN)
+uint16_t pktlen = dev_conf->rxmode.max_rx_pkt_len;
+if (pktlen < RTE_ETHER_MIN_MTU + overhead_len ||
+pktlen > RTE_ETHER_MTU + overhead_len)
/* Use default value */
dev->data->dev_conf.rxmode.max_rx_pkt_len =
-
RTE_ETHER_MAX_LEN;
+RTE_ETHER_MTU +
overhead_len;
}
+/* Scale the MTU size to adapt max_rx_pkt_len */
+dev->data->mtu = dev->data->dev_conf.rxmode.max_rx_pkt_len -
+overhead_len;
+
Hi
I think the dev->data->mtu should be updated after configured success. So
the update in this position seems unreasonable.