Hi all, Recently I was going through the ring implementation and I believe I've found a small mistake. Not a functional error, just a slightly suboptimal behaviour for the specific case when we want to enqueue exactly the number of elements that we can before wrapping to the ring beginning (the same goes for dequeueing).
Imagine we have a ring of size 16 depicted below with indexes underneath and consumer/producer pointing as shown. | ****** | 0123456789ABCDEF ^ ^ c p Now if we try to enqueue 8 elements we will end up at the check: if (likely(idx + n < size)) { where idx (=8) is a producer head and n=8. We will fail this check even though we have the case of 8 elements available without wrapping to the beginning of the ring. I hope I'm not completely off the base here :), if I'm not then the subsequent patch attempts to fix this. Wit regards Andrzej Ostruszka Andrzej Ostruszka (1): ring: fix off by 1 mistake lib/ring/rte_ring_elem_pvt.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) -- 2.34.1.448.ga2b2bfdf31-goog