On Tue, Nov 24, 2020 at 10:58 PM Daniel Borkmann <daniel@xxxxxxxxxxxxx> wrote: > > On 11/24/20 9:12 AM, Magnus Karlsson wrote: > > On Tue, Nov 24, 2020 at 8:33 AM Li RongQing <lirongqing@xxxxxxxxx> wrote: > >> > >> Add a new function for returning descriptors the user received > >> after an xsk_ring_cons__peek call. After the application has > >> gotten a number of descriptors from a ring, it might not be able > >> to or want to process them all for various reasons. Therefore, > >> it would be useful to have an interface for returning or > >> cancelling a number of them so that they are returned to the ring. > >> > >> This patch adds a new function called xsk_ring_cons__cancel that > >> performs this operation on nb descriptors counted from the end of > >> the batch of descriptors that was received through the peek call. > >> > >> Signed-off-by: Li RongQing <lirongqing@xxxxxxxxx> > >> [ Magnus Karlsson: rewrote changelog ] > >> Cc: Magnus Karlsson <magnus.karlsson@xxxxxxxxx> > >> --- > >> diff with v1: fix the building, and rewrote changelog > >> > >> tools/lib/bpf/xsk.h | 6 ++++++ > >> 1 file changed, 6 insertions(+) > >> > >> diff --git a/tools/lib/bpf/xsk.h b/tools/lib/bpf/xsk.h > >> index 1069c46364ff..1719a327e5f9 100644 > >> --- a/tools/lib/bpf/xsk.h > >> +++ b/tools/lib/bpf/xsk.h > >> @@ -153,6 +153,12 @@ static inline size_t xsk_ring_cons__peek(struct xsk_ring_cons *cons, > >> return entries; > >> } > >> > >> +static inline void xsk_ring_cons__cancel(struct xsk_ring_cons *cons, > >> + size_t nb) > >> +{ > >> + cons->cached_cons -= nb; > >> +} > >> + > >> static inline void xsk_ring_cons__release(struct xsk_ring_cons *cons, size_t nb) > >> { > >> /* Make sure data has been read before indicating we are done > >> -- > >> 2.17.3 > > > > Thank you RongQing. > > > > Acked-by: Magnus Karlsson <magnus.karlsson@xxxxxxxxx> > > @Magnus: shouldn't the xsk_ring_cons__cancel() nb type be '__u32 nb' instead? All the other interfaces have size_t as the type for "nb". It is kind of weird as a __u32 would have made more sense, but cannot actually remember why I chose a size_t two years ago. But for consistency with the other interfaces, let us keep it a size_t for now. I will do some research around the reason. > Thanks, > Daniel