When the example starts in mergeable mode with an i40e port, it fails to launch because the examples use default mtu MAX_MTU to configure ethdev. The root cause is some devices have Ethernet frame overhead and then MAX_MTU will be larger than device's max mtu, so the ethdev configure will fail.
This patch checks the device's max mtu before setting the ethdev configuration. If the device has a max mtu, use that value to configure. Fixes: 1bb4a528c41f ("ethdev: fix max Rx packet length") Signed-off-by: Chenbo Xia <chenbo....@intel.com> Reported-by: Xingguang He <xingguang...@intel.com> --- examples/vhost/main.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/examples/vhost/main.c b/examples/vhost/main.c index 58e12aa710..09fb2382bf 100644 --- a/examples/vhost/main.c +++ b/examples/vhost/main.c @@ -273,6 +273,13 @@ port_init(uint16_t port) tx_rings = (uint16_t)rte_lcore_count(); + if (mergeable) { + if (dev_info.max_mtu != UINT16_MAX && dev_info.max_rx_pktlen > dev_info.max_mtu) + vmdq_conf_default.rxmode.mtu = dev_info.max_mtu; + else + vmdq_conf_default.rxmode.mtu = MAX_MTU; + } + /* Get port configuration. */ retval = get_eth_conf(&port_conf, num_devices); if (retval < 0) @@ -631,8 +638,6 @@ us_vhost_parse_args(int argc, char **argv) return -1; } mergeable = !!ret; - if (ret) - vmdq_conf_default.rxmode.mtu = MAX_MTU; break; case OPT_STATS_NUM: -- 2.17.1