[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJ8uoz3d4x9pWWNxmd9+ozt7ei7WUE=S=FnKE1sLZOqoKRwMJQ@mail.gmail.com>
Date: Mon, 23 Nov 2020 10:40:19 +0100
From: Magnus Karlsson <magnus.karlsson@...il.com>
To: Li RongQing <lirongqing@...du.com>
Cc: Network Development <netdev@...r.kernel.org>,
bpf <bpf@...r.kernel.org>
Subject: Re: [PATCH] libbpf: add support for canceling cached_cons advance
On Sun, Nov 22, 2020 at 2:21 PM Li RongQing <lirongqing@...du.com> wrote:
>
> It is possible to fail receiving packets after calling
> xsk_ring_cons__peek, at this condition, cached_cons has
> been advanced, should be cancelled.
Thanks RongQing,
I have needed this myself in various situations, so I think we should
add this. But your motivation in the commit message is somewhat
confusing. How about something like this?
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.
Replace your commit message with this, fix the bug below, send a v2
and then I am happy to ack this.
/Magnus
> Signed-off-by: Li RongQing <lirongqing@...du.com>
> ---
> 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..4128215c246b 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)
> +{
> + rx->cached_cons -= nb;
cons-> not rx->. Please make sure the v2 compiles and passes checkpatch.
> +}
> +
> 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
>
Powered by blists - more mailing lists