crypto/cnxk: fix inflight count calculation
authorAnoob Joseph <anoobj@marvell.com>
Fri, 17 Dec 2021 09:20:01 +0000 (14:50 +0530)
committerAkhil Goyal <gakhil@marvell.com>
Fri, 21 Jan 2022 08:40:01 +0000 (09:40 +0100)
Inflight count calculation is updated to cover wrap around cases where
head can become smaller than tail.

Fixes: fd390896f4a3 ("crypto/cnxk: allow different cores in pending queue")
Cc: stable@dpdk.org
Reported-by: Kiran Kumar K <kirankumark@marvell.com>
Signed-off-by: Anoob Joseph <anoobj@marvell.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
drivers/crypto/cnxk/cnxk_cryptodev_ops.h

index ca363bb..0336ae1 100644 (file)
@@ -156,7 +156,11 @@ pending_queue_retreat(uint64_t *index, const uint64_t mask, uint64_t nb_entry)
 static __rte_always_inline uint64_t
 pending_queue_infl_cnt(uint64_t head, uint64_t tail, const uint64_t mask)
 {
-       return (head - tail) & mask;
+       /*
+        * Mask is nb_desc - 1. Add nb_desc to head and mask to account for
+        * cases when tail > head, which happens during wrap around.
+        */
+       return ((head + mask + 1) - tail) & mask;
 }
 
 static __rte_always_inline uint64_t