Re: [net-next v4 08/12] net: bnxt: Implement software USO
From: Pavan Chebbi
Date: Sat Mar 21 2026 - 03:30:53 EST
On Fri, Mar 20, 2026 at 8:12 PM Joe Damato <joe@xxxxxxx> wrote:
>
> Implement bnxt_sw_udp_gso_xmit() using the core tso_dma_map API and
> the pre-allocated TX inline buffer for per-segment headers.
>
> The xmit path:
> 1. Calls tso_start() to initialize TSO state
> 2. Stack-allocates a tso_dma_map and calls tso_dma_map_init() to
> DMA-map the linear payload and all frags upfront.
> 3. For each segment:
> - Copies and patches headers via tso_build_hdr() into the
> pre-allocated tx_inline_buf (DMA-synced per segment)
> - Counts payload BDs via tso_dma_map_count()
> - Emits long BD (header) + ext BD + payload BDs
> - Payload BDs use tso_dma_map_next() which yields (dma_addr,
> chunk_len, mapping_len) tuples.
>
> Header BDs set dma_unmap_len=0 since the inline buffer is pre-allocated
> and unmapped only at ring teardown.
>
> Suggested-by: Jakub Kicinski <kuba@xxxxxxxxxx>
> Signed-off-by: Joe Damato <joe@xxxxxxx>
> ---
> v4:
> - Fixed the early return issue Pavan pointed out when num_segs <= 1; use the
> drop label instead of returning.
>
> v3:
> - Added iova_state and iova_total_len to struct bnxt_sw_tx_bd.
> - Stores iova_state on the last segment's tx_buf during xmit.
>
> rfcv2:
> - set the unmap len on the last descriptor, so that when completions fire
> only the last completion unmaps the region.
>
> drivers/net/ethernet/broadcom/bnxt/bnxt.h | 4 +
> drivers/net/ethernet/broadcom/bnxt/bnxt_gso.c | 206 ++++++++++++++++++
> 2 files changed, 210 insertions(+)
>
Reviewed-by: Pavan Chebbi <pavan.chebbi@xxxxxxxxxxxx>
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature