[gve] Report only packet completions for the transmit ring

The hardware reports descriptor and packet completions separately for
the transmit ring.  We currently ignore descriptor completions (since
we cannot free up the transmit buffers in the queue page list and
advance the consumer counter until the packet has also completed).

Now that transmit completions are written out immediately (instead of
being delayed until 128 bytes of completions are available), there is
no value in retaining the descriptor completions.

Omit descriptor completions entirely, and reduce the transmit fill
level back down to its original value.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2025-10-09 17:25:25 +01:00
parent d2e1e591ab
commit 1cc1f1cd4f
2 changed files with 3 additions and 12 deletions

View File

@@ -1422,8 +1422,7 @@ static int gve_transmit ( struct net_device *netdev, struct io_buffer *iobuf ) {
cpu_to_le64 ( gve_address ( tx, tag ) );
if ( next == len ) {
dqo->type = ( GVE_DQO_TX_TYPE_PACKET |
GVE_DQO_TX_TYPE_LAST |
GVE_DQO_TX_TYPE_REPORT );
GVE_DQO_TX_TYPE_LAST );
dqo->tag.id = tag;
dqo->tag.count = count;
} else {

View File

@@ -543,14 +543,9 @@ struct gve_qpl {
/**
* Maximum number of transmit buffers
*
* This is a policy decision. Experiments suggest that out-of-order
* transmit queues will write completions only in batches of 128
* bytes, comprising 8 descriptor completions and 8 packet
* completions. The transmit fill level must therefore be greater
* than 8, so that completions will be written out before the transmit
* ring runs out of space.
* This is a policy decision.
*/
#define GVE_TX_FILL 16
#define GVE_TX_FILL 8
/** Transmit queue page list ID */
#define GVE_TX_QPL 0x18ae5458
@@ -624,9 +619,6 @@ struct gve_dqo_tx_descriptor {
/** Last transmit descriptor in a packet */
#define GVE_DQO_TX_TYPE_LAST 0x20
/** Report transmit completion */
#define GVE_DQO_TX_TYPE_REPORT 0x80
/** An out-of-order transmit completion */
struct gve_dqo_tx_completion {
/** Reserved */