From: Bruce Richardson Date: Tue, 11 Jan 2022 13:41:02 +0000 (+0000) Subject: dma/idxd: fix burst capacity calculation X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=a2b43447e923a54a4d8293fae960fbe2dc3f641e;p=dpdk.git dma/idxd: fix burst capacity calculation When the maximum burst size supported by HW is less than the available ring space, incorrect capacity was returned when there was already some jobs queued up for submission. This was because the capacity calculation failed to subtract the number of already-enqueued jobs from the max burst size. After subtraction is done, ensure that any negative values (which should never occur if the user respects the reported limits), are clamped to zero. Fixes: 9459de4edc99 ("dma/idxd: add burst capacity") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson Acked-by: Kevin Laatz Tested-by: Jiayu Hu --- diff --git a/drivers/dma/idxd/idxd_common.c b/drivers/dma/idxd/idxd_common.c index fc11b11337..4442d1cbbd 100644 --- a/drivers/dma/idxd/idxd_common.c +++ b/drivers/dma/idxd/idxd_common.c @@ -485,7 +485,9 @@ idxd_burst_capacity(const void *dev_private, uint16_t vchan __rte_unused) write_idx += idxd->desc_ring_mask + 1; used_space = write_idx - idxd->ids_returned; - return RTE_MIN((idxd->desc_ring_mask - used_space), idxd->max_batch_size); + const int ret = RTE_MIN((idxd->desc_ring_mask - used_space), + (idxd->max_batch_size - idxd->batch_size)); + return ret < 0 ? 0 : (uint16_t)ret; } int