> From: Rory Sexton [mailto:rory.sex...@intel.com] > Sent: Thursday, 23 March 2023 12.38 > > This is an RFC proposing the addition of a callback infrastructure to the ring > library, particularly in the ring dequeue functions, but they could also be > added to the enqueue functions if desired. > > Callbacks in the ring dequeue functions would be beneficial for a number of > reasons including but not limited to the following: > - would allow users to register specific functions to be called on dequeue of > a > ring avoiding the need to call the function within application code on > several > threads reading from said ring. > - would mirror the callback functionality offered by the ethdev library for > threads that read exclusively from a ring and process packets based off > that, > thus allowing for the same threads to read from either a NIC i/f or directly > from a ring without needing a different codepath. > > The addition of callbacks wouldn't impact the reading of rings by more than 1 > cycle when no callbacks are registered. They could also additionally be > compiled > in/out as desired to give more confidence in maintaining performance when > callbacks are not required.
On the condition that they can be omitted at build time, as you mention here, I don't mind having more callbacks. > > This RFC is to give a feel for what the additional APIs would be and how they > would be integrated within the ring dequeue functions. As such only function > declarations are present. If there is a willingness within the community to > add > callback infrastructure to the ring library I will implement further code. I like the idea that these callbacks mimic the ethdev callbacks, so if proceeding with this, I think that both enqueue and dequeue callbacks should be added. The ethdev callbacks share one RTE_ETHDEV_RXTX_CALLBACKS define, so the ring callbacks can probably do the same. > > Rory Sexton (1): > ring: add infrastructure to allow callbacks within the ring library > > lib/ring/rte_ring.h | 133 ++++++++++++++++++++++++++++++++++++++- > lib/ring/rte_ring_core.h | 3 + > 2 files changed, 135 insertions(+), 1 deletion(-) > > -- > 2.34.1 >