When the cached tx->dqo.desc_head does not show enough available
descriptor ring slots, gve_tx_has_desc_room_dqo() reloads desc_head from
tx->dqo.hw_tx_head and re-checks availability. If the refreshed
desc_head provides sufficient space, the function mistakenly returns 0
(false) instead of true, causing callers to treat a successful
descriptor head refresh as ENOBUFS, stop the TX queue, and retry or
abort packet transmission (including unloading already-mapped DMA
segments) unnecessarily.
Return true when sufficient descriptor space is available after
refreshing desc_head.
In 60s iperf benchmarks between two FreeBSD 14.4 c4-standard-192
instances, this eliminates spurious tx->stopped transitions across all
workloads:
- TCP 1-stream: 54,859 -> 13 (-99.98%)
- TCP 16-stream: 9,623,851 -> 6,324,299 (-34.3%, -3.30M spurious stops)
- UDP 1-stream: 71,626 -> 0 (-100%)
- UDP 16-stream: 608,585 -> 3,622 (-99.4%)
Fixes: d438b4ef0cfc ("gve: Add DQO RDA support")
Reviewed-by: Jasper Tran O'Leary <jtranoleary@google.com>
Signed-off-by: Tim Hostetler <thostet@google.com>