On 2/9/2026 5:45 PM, Bruce Richardson wrote:
Rather than writing a last_id for each individual descriptor, we can
write one only for places where the "report status" (RS) bit is set,
i.e. the descriptors which will be written back when done. The method
used for marking what descriptors are free is also changed in the
process, even if the last descriptor with the "done" bits set is past
the expected point, we only track up to the expected point, and leave
the rest to be counted as freed next time. This means that we always
have the RS/DD bits set at fixed intervals, and we always track free
slots in units of the same tx_free_thresh intervals.
Signed-off-by: Bruce Richardson <[email protected]>
---
if (!is_splitq) {
txq->ci_tx_ring = mz->addr;
idpf_qc_single_tx_queue_reset(txq);
@@ -628,6 +642,9 @@ cpfl_tx_queue_setup(struct rte_eth_dev *dev, uint16_t
queue_idx,
return 0;
err_complq_setup:
+ rte_free(txq->rs_last_id);
+err_rs_last_id_alloc:
+ rte_free(txq->sw_ring);
This looks like this free wasn't there before and it should've been.
Separate it out as a bugfix to stable?
<snip>
txq->ci_tx_ring = mz->addr;
idpf_qc_single_tx_queue_reset(txq);
@@ -502,6 +512,9 @@ idpf_tx_queue_setup(struct rte_eth_dev *dev, uint16_t
queue_idx,
return 0;
err_complq_setup:
+ rte_free(txq->rs_last_id);
+err_rs_last_id_alloc:
+ rte_free(txq->sw_ring);
Same, bugfix to stable?
err_sw_ring_alloc:
idpf_dma_zone_release(mz);
err_mz_reserve:
Otherwise LGTM
Acked-by: Anatoly Burakov <[email protected]>
--
Thanks,
Anatoly