Hi Andrzej, On Mon, Jan 03, 2022 at 03:22:01PM +0100, Andrzej Ostruszka wrote: > ring: fix off by 1 mistake
I suggest something less scary for the title: ring: optimize corner case for enqueue/dequeue > When enqueueing/dequeueing to/from the ring we try to optimize by manual > loop unrolling. The check for this optimization looks like: > > if (likely(idx + n < size)) { > > where 'idx' points to the first usable element (empty slot for enqueue, > data for dequeue). The correct comparison here should be '<=' instead > of '<'. > > This is not a functional error since we fall back to the loop with > correct checks on indexes. Just a minor suboptimal behaviour for the > case when we want to enqueue/dequeue exactly the number of elements that > we have in the ring before wrapping to its beginning. > > Signed-off-by: Andrzej Ostruszka <a...@semihalf.com> Reviewed-by: Olivier Matz <olivier.m...@6wind.com> I'll tend to add: Fixes: cc4b218790f6 ("ring: support configurable element size") But the same error was in the ENQUEUE_PTRS()/DEQUEUE_PTRS() macros since the beginning, so we may also add: Fixes: 286bd05bf70d ("ring: optimisations") This macro was removed in commit 2d6ed071a8b9 ("ring: use custom element for fixed size API") Thanks!