static const char gve_gstrings_tx_stats[][ETH_GSTRING_LEN] = {
        "tx_posted_desc[%u]", "tx_completed_desc[%u]", "tx_consumed_desc[%u]", "tx_bytes[%u]",
        "tx_wake[%u]", "tx_stop[%u]", "tx_event_counter[%u]",
-       "tx_dma_mapping_error[%u]", "tx_xsk_wakeup[%u]",
-       "tx_xsk_done[%u]", "tx_xsk_sent[%u]", "tx_xdp_xmit[%u]", "tx_xdp_xmit_errors[%u]"
+       "tx_dma_mapping_error[%u]",
+       "tx_xsk_sent[%u]", "tx_xdp_xmit[%u]", "tx_xdp_xmit_errors[%u]"
 };
 
 static const char gve_gstrings_adminq_stats[][ETH_GSTRING_LEN] = {
                                        data[i++] = value;
                                }
                        }
-                       /* XDP xsk counters */
-                       data[i++] = tx->xdp_xsk_wakeup;
-                       data[i++] = tx->xdp_xsk_done;
+                       /* XDP counters */
                        do {
                                start = u64_stats_fetch_begin(&priv->tx[ring].statss);
                                data[i] = tx->xdp_xsk_sent;
 
 
        spin_lock(&tx->xdp_lock);
        while (sent < budget) {
-               if (!gve_can_tx(tx, GVE_TX_START_THRESH))
+               if (!gve_can_tx(tx, GVE_TX_START_THRESH) ||
+                   !xsk_tx_peek_desc(tx->xsk_pool, &desc))
                        goto out;
 
-               if (!xsk_tx_peek_desc(tx->xsk_pool, &desc)) {
-                       tx->xdp_xsk_done = tx->xdp_xsk_wakeup;
-                       goto out;
-               }
-
                data = xsk_buff_raw_get_data(tx->xsk_pool, desc.addr);
                nsegs = gve_tx_fill_xdp(priv, tx, data, desc.len, NULL, true);
                tx->req += nsegs;