mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-11-10 20:48:12 +00:00
net: airoha: add LRO offload support
Introduce LRO offload support to the airoha_eth driver, leveraging the EN7581/AN7583 SoC's 8 dedicated LRO hardware queues mapped to RX queues 24-31. LRO offloading does not support Scatter-Gather (SG) so it is required to increase the page_pool allocation order to 2 for RX queues 24-31 (LRO queues). Since LRO is configured per-QDMA and shared across all devices using it, LRO is mutually exclusive with multiple devices bound to the same QDMA block. NETIF_F_LRO availability is re-evaluated whenever the QDMA user count changes (device registration and runtime QDMA migration): airoha_update_netdev_features() drops the feature when the QDMA has more than one user, while airoha_dev_set_qdma() re-enables LRO on the destination QDMA after a migration so that a running device keeps it active on the new QDMA block. Set the GSO metadata (gso_type/gso_size/gso_segs) on aggregated packets, together with CHECKSUM_PARTIAL and the pseudo-header checksum, so that L3-forwarded traffic is correctly re-segmented by the GSO/TSO path on the egress device. The HW does not report the per-segment MSS (msg3[31:16] only reports the max aggregated size), so the gso_size of an aggregated packet is approximated as DIV_ROUND_UP(data_len, agg_count), i.e. the mean segment size. Since this can never exceed the largest merged segment, re-segmentation only produces smaller packets, which is safe. Aggregated skbs are marked SKB_GSO_DODGY so that the stack recomputes gso_segs from gso_size and does not merge the aggregate into the GRO engine. Performance comparison between sw GRO and LRO has been carried out using a 10Gbps NIC: GRO: ~2.7 Gbps LRO: ~8.2 Gbps Tested-by: Madhur Agrawal <madhur.agrawal@airoha.com> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20260909-airoha-eth-lro-v7-1-e6317be79067@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
61ef87401d
commit
a952507ca0
3 changed files with 390 additions and 22 deletions
Loading…
Add table
Add a link
Reference in a new issue