On Tue, 13 Oct 2026 10:43:44 +0000
Tathagat Priyadarshi <[email protected]> wrote:

> This patch series aligns the Google Virtual NIC (gve) DQO RDA transmit path
> with the upstream Linux kernel driver (drivers/net/ethernet/google/gve/) to
> resolve transmit queue stalls and hardware validation issues:
> 
> 1. net/gve: fix DQO descriptor cleaning loop bound
>    Fixes the off-by-one error in gve_tx_clean_descs_dqo()
>    ("while (--nb_descs)" -> "while (nb_descs--)") and avoids stalling
>    the completion queue on unrecognized descriptor types.
> 
> 2. net/gve: fix DQO Tx queue stall on multi-seg and TSO
>    Tracks descriptor intervals with last_re_idx per packet against
>    GVE_TX_MIN_RE_INTERVAL (32) instead of counting packets at burst end,
>    preventing descriptor ring starvation and queue deadlocks under
>    multi-segment and TSO traffic.
> 
> 3. net/gve: add cacheline overlap margin to DQO Tx ring
>    Enforces GVE_TX_MIN_DESC_PREVENT_CACHE_OVERLAP (4 descriptors) margin
>    in ring space checks, avoiding CPU and device DMA cacheline collisions.
> 
> 4. net/gve: add packet and TSO hardware constraints for DQO
>    Augments gve_tx_validate_descs() (which enforces the 10-descriptor
>    limit per packet or MTU segment) with the remaining hardware length
>    constraints: [17, 9728] bytes for non-TSO packets, maximum MSS limit
>    (9728 bytes), TSO total length limit (262143 bytes), and validates
>    header contiguity and payload presence on TSO packets. Invalid packets
>    are dropped instead of stalling the queue.
> 
> v2:
> - Patch 1/4, 3/4: No changes.

Don't know if this got sent yesterday.
Here was AI review of this

Subject: Re: [PATCH v2 0/4] net/gve: DQO Tx fixes

Applies cleanly to main; every commit builds with -Dwerror=true.
v2 drops invalid packets and continues instead of stalling the burst,
pops the completion tag before writing the TSO context descriptor,
and adds the Fixes tags. All three Fixes hashes resolve.

Info

[PATCH v2 2/4] net/gve: fix DQO Tx queue stall on multi-seg and TSO

1. Ringing the doorbell each time report_event is set is a
   performance change, not part of the stall fix. Descriptors posted
   earlier in the burst are reclaimed on the next burst either way,
   and Linux rings once per xmit batch. It is harmless, but for a
   stable backport it is better as a separate patch with numbers. At
   least drop "amortizing MMIO writes": it adds MMIO writes.

[PATCH v2 4/4] net/gve: add packet and TSO hardware constraints for DQO

2. tso_total_len is 24 bits wide; 262143 is the hardware limit (see
   the comment in the Linux gve_prep_tso()), not the field width.
   Reword: "Define GVE_TX_MAX_TSO_LEN_DQO (262143), the hardware limit
   on TSO payload length."

3. dropped_pkts is not in tx_xstats_name_offset[], so nothing reports
   it; too_many_descs had the same problem. Export it:

       { "dropped_pkts", TX_QUEUE_STATS_OFFSET(dropped_pkts) },

   or drop the counter and rely on errors.

4. The commit message lists the diff line by line. Cut it to the
   problem (invalid packets stalled the queue; hardware limits were
   not enforced) and the fix (drop and continue; the limits enforced).

Reply via email to