+ rte_compiler_barrier();
+ rte_prefetch0(txq->hw_cons_ptr);
+ sw_tx_cons = ecore_chain_get_cons_idx(&txq->tx_pbl);
+ hw_bd_cons = rte_le_to_cpu_16(*txq->hw_cons_ptr);
+#ifdef RTE_LIBRTE_QEDE_DEBUG_TX
+ PMD_TX_LOG(DEBUG, txq, "Tx Completions = %u\n",
+ abs(hw_bd_cons - sw_tx_cons));
+#endif
+
+ mask = NUM_TX_BDS(txq);
+ idx = txq->sw_tx_cons & mask;
+
+ remaining = hw_bd_cons - sw_tx_cons;
+ txq->nb_tx_avail += remaining;
+ first_idx = idx;
+
+ while (remaining) {
+ mbuf = txq->sw_tx_ring[idx];
+ RTE_ASSERT(mbuf);