]> git.droids-corp.org - dpdk.git/commitdiff
dma/idxd: fix burst capacity calculation
authorBruce Richardson <bruce.richardson@intel.com>
Tue, 11 Jan 2022 13:41:02 +0000 (13:41 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 20 Jan 2022 12:40:20 +0000 (13:40 +0100)
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 <bruce.richardson@intel.com>
Acked-by: Kevin Laatz <kevin.laatz@intel.com>
Tested-by: Jiayu Hu <jiayu.hu@intel.com>
drivers/dma/idxd/idxd_common.c

index fc11b1133712b1c40d22cead7d2b0fa3079760f9..4442d1cbbddea714387f5fcae2dbc1ef8c987e1c 100644 (file)
@@ -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