On 11/25/25 16:01, Michael S. Tsirkin wrote: > On Thu, Nov 20, 2025 at 04:29:07PM +0100, Simon Schippers wrote: >> Add __ptr_ring_consume_created_space() to check whether the previous >> __ptr_ring_consume() call successfully consumed an element and created >> space in the ring buffer. This enables callers to conditionally notify >> producers when space becomes available. >> >> The function is only valid immediately after a single consume operation >> and should not be used after calling __ptr_ring_consume_batched(). >> >> Co-developed-by: Tim Gebauer <[email protected]> >> Signed-off-by: Tim Gebauer <[email protected]> >> Co-developed by: Jon Kohler <[email protected]> >> Signed-off-by: Jon Kohler <[email protected]> >> Signed-off-by: Simon Schippers <[email protected]> >> --- >> include/linux/ptr_ring.h | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> >> diff --git a/include/linux/ptr_ring.h b/include/linux/ptr_ring.h >> index da141cc8b075..76d6840b45a3 100644 >> --- a/include/linux/ptr_ring.h >> +++ b/include/linux/ptr_ring.h >> @@ -453,6 +453,23 @@ static inline int ptr_ring_consume_batched_bh(struct >> ptr_ring *r, >> return ret; >> } >> >> +/* >> + * Check if the previous consume operation created space > > space? > > what does this mean? > >> + * >> + * Returns true if the last call to __ptr_ring_consume() has created >> + * space in the ring buffer (i.e., an element was consumed). >> + * >> + * Note: This function is only valid immediately after a single call to >> + * __ptr_ring_consume(). If multiple calls to ptr_ring_consume*() have >> + * been made, this check must be performed after each call individually. >> + * Likewise, do not use this function after calling >> + * __ptr_ring_consume_batched(). > > API-wise, it is a really weird function. So is > > { > p = __ptr_ring_consume > > return !!p > } > > guaranteed to be equivalent to > > { > p = __ptr_ring_consume > > return !!__ptr_ring_consume_created_space > }
I am a bit confused. You were the one recommending this function to me, see [1]. Maybe the comments need rework here, but the function should be fine. Thanks [1] Link: https://lore.kernel.org/netdev/[email protected]/T/#mb722e8ae4ceb5df24f74305c6145561883d4e987 > > > >> + */ >> +static inline bool __ptr_ring_consume_created_space(struct ptr_ring *r) >> +{ >> + return r->consumer_tail >= r->consumer_head; >> +} >> + >> /* Cast to structure type and call a function without discarding from FIFO. >> * Function must return a value. >> * Callers must take consumer_lock. >> -- >> 2.43.0 >

