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

Reply via email to