From 5932109ac869aa6ad130989e7532294635e20d47 Mon Sep 17 00:00:00 2001 From: Chenbo Xia Date: Thu, 4 Nov 2021 13:11:02 +0800 Subject: [PATCH] examples/vhost: fix port init in mergeable mode 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") Reported-by: Xingguang He Signed-off-by: Chenbo Xia Reviewed-by: Maxime Coquelin --- 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 8685dfd81b..8bf61b32b6 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.39.5