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.
- Patch 2/4:
* Write the Tx tail when report_event is set so the device can start
fetching descriptors before the end of the burst
(per Joshua Washington).
* Pop the completion tag before writing the TSO context descriptor.
* Use reverse Christmas tree declaration ordering
(per Joshua Washington).
- Patch 4/4:
* Drop (free) invalid mbufs and continue the burst instead of
returning short, which caused head-of-line blocking
(per Stephen Hemminger).
* Validate packets before the ring space check.
* Exclude dropped packets from stats.packets.
* Rename too_many_descs to dropped_pkts since it now counts all
dropped packets (per Stephen Hemminger).
* Use a single GVE_TX_MAX_PKT_SIZE_DQO for the max packet size and
max MSS (per Joshua Washington).
* Declare seg_remain and mbuf_remain in the smallest scope
(per Joshua Washington).
* Reject packets whose descriptor count can never fit in the Tx ring.
* Enforce the TSO total length limit (262143 bytes).
* Add Fixes tag for the original DQO Tx path (per Stephen Hemminger).
Tathagat Priyadarshi (4):
net/gve: fix DQO descriptor cleaning loop bound
net/gve: fix DQO Tx queue stall on multi-seg and TSO
net/gve: add cacheline overlap margin to DQO Tx ring
net/gve: add packet and TSO hardware constraints for DQO
drivers/net/gve/base/gve_desc_dqo.h | 3 +
drivers/net/gve/gve_ethdev.h | 4 +-
drivers/net/gve/gve_tx_dqo.c | 152 ++++++++++++++++++++--------
3 files changed, 115 insertions(+), 44 deletions(-)
--
2.43.0