From: Kohei Enju <[email protected]>
Date: Tue, 10 Feb 2026 15:57:14 +0000
> iavf sets LIBIE_MAX_MTU as netdev->max_mtu, ignoring vf_res->max_mtu
> from PF [1]. This allows setting an MTU beyond the actual hardware
> limit, causing TX queue timeouts [2].
>
> Set correct netdev->max_mtu using vf_res->max_mtu from the PF.
>
> Note that currently PF drivers such as ice/i40e set the frame size in
> vf_res->max_mtu, not MTU. Convert vf_res->max_mtu to MTU before setting
> netdev->max_mtu.
>
> [1]
> # ip -j -d link show $DEV | jq '.[0].max_mtu'
> 16356
>
> [2]
> iavf 0000:00:05.0 enp0s5: NETDEV WATCHDOG: CPU: 1: transmit queue 0 timed
> out 5692 ms
> iavf 0000:00:05.0 enp0s5: NIC Link is Up Speed is 10 Gbps Full Duplex
> iavf 0000:00:05.0 enp0s5: NETDEV WATCHDOG: CPU: 6: transmit queue 3 timed
> out 5312 ms
> iavf 0000:00:05.0 enp0s5: NIC Link is Up Speed is 10 Gbps Full Duplex
> ...
>
> Fixes: 5fa4caff59f2 ("iavf: switch to Page Pool")
> Signed-off-by: Kohei Enju <[email protected]>
Reviewed-by: Alexander Lobakin <[email protected]>
Although I'm not sure the 'Fixes:' tag is correct. Was vs_res->max_mtu
accounted before switching to Page Pool? If so, then yes, my fault.
Otherwise, this issue is older than libie.
I'm asking as IIRC before I did set max_mtu to the libie definition,
there was a hardcoded value already.
> ---
> Ideally we may fix ice/i40e to set max MTU (not frame size) in
> vf_res->max_mtu on the PF side, but this would break PF/VF API
> compatibility between different kernel versions and would need
> modifications on code that treats vf_res->max_mtu as the frame size.
>
> If it's acceptable to change the PF/VF API, this patch would be simply:
> netdev->max_mtu = min_not_zero(adapter->vf_res->max_mtu,
> LIBIE_MAX_MTU);
> ---
> drivers/net/ethernet/intel/iavf/iavf_main.c | 17 ++++++++++++++++-
> 1 file changed, 16 insertions(+), 1 deletion(-)
Thanks,
Olek