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 Signed-off-by: Tim Gebauer Co-developed by: Jon Kohler Signed-off-by: Jon Kohler Signed-off-by: Simon Schippers --- 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 + * + * 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(). + */ +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