Commit c39d6d4d authored by Michael S. Tsirkin's avatar Michael S. Tsirkin Committed by Jakub Kicinski
Browse files

ptr_ring: __ptr_ring_zero_tail micro optimization



__ptr_ring_zero_tail currently does the - 1 operation twice:
- during initialization of head
- at each loop iteration

Let's just do it in one place, all we need to do
is adjust the loop condition. this is better:
- a slightly clearer logic with less duplication
- uses prefix -- we don't need to save the old value
- one less - 1 operation - for example, when ring is empty
  we now don't do - 1 at all, existing code does it once

Text size shrinks from 15081 to 15050 bytes.

Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Link: https://patch.msgid.link/bcd630c7edc628e20d4f8e037341f26c90ab4365.1758976026.git.mst@redhat.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent e8c4840d
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -248,15 +248,15 @@ static inline bool ptr_ring_empty_bh(struct ptr_ring *r)
 */
static inline void __ptr_ring_zero_tail(struct ptr_ring *r, int consumer_head)
{
	int head = consumer_head - 1;
	int head = consumer_head;

	/* Zero out entries in the reverse order: this way we touch the
	 * cache line that producer might currently be reading the last;
	 * producer won't make progress and touch other cache lines
	 * besides the first one until we write out all entries.
	 */
	while (likely(head >= r->consumer_tail))
		r->queue[head--] = NULL;
	while (likely(head > r->consumer_tail))
		r->queue[--head] = NULL;

	r->consumer_tail = consumer_head;
}