Skip to content

Commit

Permalink
xdp: document xdp_do_flush() before napi_complete_done()
Browse files Browse the repository at this point in the history
Document in the XDP_REDIRECT manual section that drivers must call
xdp_do_flush() before napi_complete_done(). The two reasons behind
this can be found following the links below.

Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/r/20221220185903.1105011-1-sbohrer@cloudflare.com
Link: https://lore.kernel.org/all/20210624160609.292325-1-toke@redhat.com/
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Magnus Karlsson authored and David S. Miller committed Jan 18, 2023
1 parent bed91ac commit 68e5b6a
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions net/core/filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -4128,9 +4128,13 @@ static const struct bpf_func_proto bpf_xdp_adjust_meta_proto = {
* bpf_redirect_info to actually enqueue the frame into a map type-specific
* bulk queue structure.
*
* 3. Before exiting its NAPI poll loop, the driver will call xdp_do_flush(),
* which will flush all the different bulk queues, thus completing the
* redirect.
* 3. Before exiting its NAPI poll loop, the driver will call
* xdp_do_flush(), which will flush all the different bulk queues,
* thus completing the redirect. Note that xdp_do_flush() must be
* called before napi_complete_done() in the driver, as the
* XDP_REDIRECT logic relies on being inside a single NAPI instance
* through to the xdp_do_flush() call for RCU protection of all
* in-kernel data structures.
*/
/*
* Pointers to the map entries will be kept around for this whole sequence of
Expand Down

0 comments on commit 68e5b6a

Please sign in to comment.