On Tue, 10 Feb 2026 17:37:23 +0100, Alexander Lobakin wrote:
> 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.
You're right that vf_res->mtu was also not accounted before the commit.
The commit changes:
- netdev->max_mtu = IAVF_MAX_RXBUFFER - IAVF_PACKET_HDR_PAD;
+ netdev->max_mtu = LIBIE_MAX_MTU;
...
-#define IAVF_MAX_RXBUFFER 9728 /* largest size for single descriptor */
and thus netdev->max_mtu was already hardcoded, but just because
IAVF_MAX_RXBUFFER was valid for VFs there hadn't been any issues, and
invalid MTU could start to be set after the commit.
> I'm asking as IIRC before I did set max_mtu to the libie definition,
> there was a hardcoded value already.
Yea, as far as I checked the value was hardcoded from the beginning
(91c527a55664 ("ethernet/intel: use core min/max MTU checking")).
Although I'm not attached to the exact commit as the Fixes: tag, I chose
that since (coincidently) that commit made this regression.