when application presets the max rx packet length and expected mtu at
the same time, driver need identify if the preset max frame size can
hold mtu data and Ether overhead completely.

if not, adjust the max frame size via mtu_set ops within dev_configure.

Fixes: 35b2d13fd6fd ("net: add rte prefix to ether defines")

Signed-off-by: SteveX Yang <stevex.y...@intel.com>
---
 drivers/net/e1000/em_ethdev.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index d050eb478..d2cf318f8 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -432,10 +432,22 @@ eth_em_configure(struct rte_eth_dev *dev)
 {
        struct e1000_interrupt *intr =
                E1000_DEV_PRIVATE_TO_INTR(dev->data->dev_private);
+       uint16_t frame_size = dev->data->mtu + E1000_ETH_OVERHEAD;
+       int rc = 0;
 
        PMD_INIT_FUNC_TRACE();
        intr->flags |= E1000_FLAG_NEED_LINK_UPDATE;
 
+       /**
+        * Reset the max frame size via mtu_set ops if preset max frame
+        * cannot hold MTU data and Ether overhead.
+        */
+       if (frame_size > dev->data->dev_conf.rxmode.max_rx_pkt_len) {
+               rc = eth_em_mtu_set(dev, dev->data->mtu);
+               if (rc != 0)
+                       return rc;
+       }
+
        PMD_INIT_FUNC_TRACE();
 
        return 0;
-- 
2.17.1

Reply via email to