[Intel-wired-lan] [PATCH net v3] igb: cope with large MAX_SKB_FRAGS.
Pucha, HimasekharX Reddy
himasekharx.reddy.pucha at intel.com
Tue Aug 6 15:13:36 UTC 2024
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces at osuosl.org> On Behalf Of Corinna Vinschen
> Sent: Thursday, July 18, 2024 2:27 PM
> To: netdev at vger.kernel.org; intel-wired-lan at lists.osuosl.org; Eric Dumazet <edumazet at google.com>
> Cc: Jason Xing <kerneljasonxing at gmail.com>; Nikolay Aleksandrov <razor at blackwall.org>; linux-kernel at vger.kernel.org; Nguyen, Anthony L <anthony.l.nguyen at intel.com>; Jakub Kicinski <kuba at kernel.org>; Paolo Abeni <pabeni at redhat.com>; David S . Miller <davem at davemloft.net>
> Subject: [Intel-wired-lan] [PATCH net v3] igb: cope with large MAX_SKB_FRAGS.
>
> From: Paolo Abeni <pabeni at redhat.com>
>
> Sabrina reports that the igb driver does not cope well with large MAX_SKB_FRAG values: setting MAX_SKB_FRAG to 45 causes payload corruption on TX.
>
> An easy reproducer is to run ssh to connect to the machine. With
> MAX_SKB_FRAGS=17 it works, with MAX_SKB_FRAGS=45 it fails.
>
> The root cause of the issue is that the driver does not take into account properly the (possibly large) shared info size when selecting the ring layout, and will try to fit two packets inside the same 4K page even when the 1st fraglist will trump over the 2nd head.
>
> Address the issue forcing the driver to fit a single packet per page, leaving there enough room to store the (currently) largest possible skb_shared_info.
>
> Fixes: 3948b05950fd ("net: introduce a config option to tweak MAX_SKB_FRAGS")
> Reported-by: Jan Tluka <jtluka at redhat.com>
> Reported-by: Jirka Hladky <jhladky at redhat.com>
> Reported-by: Sabrina Dubroca <sd at queasysnail.net>
> Tested-by: Sabrina Dubroca <sd at queasysnail.net>
> Tested-by: Corinna Vinschen <vinschen at redhat.com>
> Signed-off-by: Paolo Abeni <pabeni at redhat.com>
> ---
> v2: fix subject, add a simple reproducer
> v3: fix Fixes, tested with all MTUs from 1200 to 1280 per Eric's suggestion
>
> drivers/net/ethernet/intel/igb/igb_main.c | 1 +
> 1 file changed, 1 insertion(+)
>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha at intel.com> (A Contingent worker at Intel)
More information about the Intel-wired-lan
mailing list