Thread (37 messages) 37 messages, 11 authors, 2021-06-11

Re: [PATCH bpf-next 00/17] Clean up and document RCU-based object protection for XDP_REDIRECT

From: Yonghong Song <hidden>
Date: 2021-06-10 00:18:57
Also in: netdev


On 6/9/21 3:33 AM, Toke Høiland-Jørgensen wrote:
During the discussion[0] of Hangbin's multicast patch series, Martin pointed out
that the lifetime of the RCU-protected  map entries used by XDP_REDIRECT is by
no means obvious. I promised to look into cleaning this up, and Paul helpfully
provided some hints and a new unrcu_pointer() helper to aid in this.

This is mostly a documentation exercise, clearing up the description of the
lifetime expectations and adding __rcu annotations so sparse and lockdep can
help verify it.

Patches 1-2 are prepatory: Patch 1 adds Paul's unrcu_pointer() helper (which has
already been added to his tree) and patch 2 is a small fix for
dev_get_by_index_rcu() so lockdep understands _bh-disabled access to it. Patch 3
is the main bit that adds the __rcu annotations and updates documentation
comments, and the rest are patches updating the drivers, with one patch per
distinct maintainer.

Unfortunately I don't have any hardware to test any of the driver patches;
Jesper helpfully verified that it doesn't break anything on i40e, but the rest
of the driver patches are only compile-tested.

[0] https://lore.kernel.org/bpf/20210415173551.7ma4slcbqeyiba2r@kafai-mbp.dhcp.thefacebook.com/ (local)

Paul E. McKenney (1):
   rcu: Create an unrcu_pointer() to remove __rcu from a pointer

Toke Høiland-Jørgensen (16):
   bpf: allow RCU-protected lookups to happen from bh context
   dev: add rcu_read_lock_bh_held() as a valid check when getting a RCU
     dev ref
   xdp: add proper __rcu annotations to redirect map entries
   ena: remove rcu_read_lock() around XDP program invocation
   bnxt: remove rcu_read_lock() around XDP program invocation
   thunderx: remove rcu_read_lock() around XDP program invocation
   freescale: remove rcu_read_lock() around XDP program invocation
   net: intel: remove rcu_read_lock() around XDP program invocation
   marvell: remove rcu_read_lock() around XDP program invocation
   mlx4: remove rcu_read_lock() around XDP program invocation
   nfp: remove rcu_read_lock() around XDP program invocation
   qede: remove rcu_read_lock() around XDP program invocation
   sfc: remove rcu_read_lock() around XDP program invocation
   netsec: remove rcu_read_lock() around XDP program invocation
   stmmac: remove rcu_read_lock() around XDP program invocation
   net: ti: remove rcu_read_lock() around XDP program invocation

  drivers/net/ethernet/amazon/ena/ena_netdev.c  |  3 --
  drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c |  2 -
  .../net/ethernet/cavium/thunder/nicvf_main.c  |  2 -
  .../net/ethernet/freescale/dpaa/dpaa_eth.c    |  8 +--
  .../net/ethernet/freescale/dpaa2/dpaa2-eth.c  |  3 --
  drivers/net/ethernet/intel/i40e/i40e_txrx.c   |  2 -
  drivers/net/ethernet/intel/i40e/i40e_xsk.c    |  6 +--
  drivers/net/ethernet/intel/ice/ice_txrx.c     |  6 +--
  drivers/net/ethernet/intel/ice/ice_xsk.c      |  6 +--
  drivers/net/ethernet/intel/igb/igb_main.c     |  2 -
  drivers/net/ethernet/intel/igc/igc_main.c     |  7 +--
  drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |  2 -
  drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c  |  6 +--
  .../net/ethernet/intel/ixgbevf/ixgbevf_main.c |  2 -
  drivers/net/ethernet/marvell/mvneta.c         |  2 -
  .../net/ethernet/marvell/mvpp2/mvpp2_main.c   |  4 --
  drivers/net/ethernet/mellanox/mlx4/en_rx.c    |  8 +--
  .../ethernet/netronome/nfp/nfp_net_common.c   |  2 -
  drivers/net/ethernet/qlogic/qede/qede_fp.c    |  6 ---
  drivers/net/ethernet/sfc/rx.c                 |  9 +---
  drivers/net/ethernet/socionext/netsec.c       |  3 --
  .../net/ethernet/stmicro/stmmac/stmmac_main.c | 10 +---
  drivers/net/ethernet/ti/cpsw_priv.c           | 10 +---
  include/linux/rcupdate.h                      | 14 +++++
  include/net/xdp_sock.h                        |  2 +-
  kernel/bpf/cpumap.c                           | 14 +++--
  kernel/bpf/devmap.c                           | 52 ++++++++-----------
  kernel/bpf/hashtab.c                          | 21 +++++---
  kernel/bpf/helpers.c                          |  6 +--
  kernel/bpf/lpm_trie.c                         |  6 ++-
  net/core/dev.c                                |  2 +-
  net/core/filter.c                             | 28 ++++++++++
  net/xdp/xsk.c                                 |  4 +-
  net/xdp/xsk.h                                 |  4 +-
  net/xdp/xskmap.c                              | 29 ++++++-----
  35 files changed, 134 insertions(+), 159 deletions(-)
Martin, could you help review this patch set? You had participated
in early discussions related to this patch. Thanks!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help