[SRU][B:linux-azure-4.15][PULL v2] hv_netvsc: Add XDP support

William Breathitt Gray william.gray at canonical.com
Thu Jan 28 11:35:15 UTC 2021


Changes in v2:
 - Merge conflicts resolved involving 'hash_info' introduction in the
   following patches:
   * "hv_netvsc: pass netvsc_device to receive callback"
   * "hv_netvsc: Add support for LRO/RSC in the vSwitch"
   * "hv_netvsc: Add XDP support"

BugLink: https://bugs.launchpad.net/bugs/1877654

[Impact]

Microsoft would like to request the following three patches in all releases supported on Azure:

351e1581395fc (“hv_netvsc: Add XDP support”)
12fa74383ed4d (“hv_netvsc: Update document for XDP support”)
184367dce4f7 (“hv_netvsc: Fix XDP refcnt for synthetic and VF NICs”)

These patches add support of XDP in native mode to the hv_netvsc driver, and
transparently sets the XDP program on the associated VF NIC as well.

[Regression Potential]

The backport to Bionic:linux-azure-4.15 required a lot of context
adjustments. Regression potentials are spread across a number of files
and drivers. Most adjustments were trivial, but the changes in
netvsc_drv.c should be kept an eye on. In particular, if a regression
occurs it will likely happen in the netvsc_alloc_recv_skb(),
netvsc_recv_callback(), or netvsc_devinfo_get() functions due to the
context difference of these areas compared to the original patch.

In general, Linux 4.15 was missing key code for XDP. As such, many
prelimary commit backports were required to pull in that support before
it could be added to hv_netvsc driver in the primary backports.

[Miscellaneous]

The 5.4 version is already released so we do not need to worry about
that series.

Backports of the "xdp: new XDP rx-queue info concept" patchset and "XDP
redirect memory return API" patchset patches are included to add support
for the XDP API:
https://patchwork.ozlabs.org/project/netdev/cover/151497504273.18176.10177133999720101758.stgit@firesoul/
https://patchwork.ozlabs.org/project/netdev/cover/152397622657.20272.10121948713784224943.stgit@firesoul/

William Breathitt Gray

-----

The following changes since commit 822cd876f23c1e6809e563c5c396216bdb131880:

  UBUNTU: [Config] azure: Disable ATARI_PARTITION (2021-01-25 22:29:25 -0700)

are available in the Git repository at:

  git://git.launchpad.net/~vilhelm-gray/ubuntu/+source/linux/+git/sf277232 sf277232

for you to fetch changes up to c82437de8ba75d84a33e070b538e9e2f5ad0b3f4:

  hv_netvsc: Fix XDP refcnt for synthetic and VF NICs (2021-01-27 08:05:28 -0500)

----------------------------------------------------------------
Björn Töpel (5):
      i40e: add support for XDP_REDIRECT
      xsk: add user memory registration support sockopt
      xsk: add Rx queue setup and mmap support
      xsk: add Rx receive functions and poll support
      xdp: add MEM_TYPE_ZERO_COPY

Haiyang Zhang (5):
      hv_netvsc: Add support for LRO/RSC in the vSwitch
      hv_netvsc: Refactor assignments of struct netvsc_device_info
      hv_netvsc: Add XDP support
      hv_netvsc: Update document for XDP support
      hv_netvsc: Fix XDP refcnt for synthetic and VF NICs

Jason Wang (3):
      tun/tap: use ptr_ring instead of skb_array
      tuntap: XDP transmission
      tuntap: XDP_TX can use native XDP

Jesper Dangaard Brouer (24):
      xdp: base API for new XDP rx-queue info concept
      ixgbe: setup xdp_rxq_info
      xdp/qede: setup xdp_rxq_info and intro xdp_rxq_info_is_reg
      tun: setup xdp_rxq_info
      virtio_net: setup xdp_rxq_info
      xdp: generic XDP handling of xdp_rxq_info
      net: avoid including xdp.h in filter.h
      virtio_net: fix ndo_xdp_xmit crash towards dev not ready for XDP
      xdp: introduce xdp_return_frame API and use in cpumap
      ixgbe: use xdp_return_frame API
      xdp: move struct xdp_buff from filter.h to xdp.h
      xdp: introduce a new xdp_frame type
      tun: convert to use generic xdp_frame and xdp_return_frame API
      virtio_net: convert to use generic xdp_frame and xdp_return_frame API
      bpf: cpumap convert to use generic xdp_frame
      i40e: convert to use generic xdp_frame and xdp_return_frame API
      xdp: rhashtable with allocator ID to pointer mapping
      page_pool: refurbish version of page_pool code
      xdp: allow page_pool as an allocator type in xdp_return_frame
      xdp: transition into using xdp_frame for return API
      xdp: transition into using xdp_frame for ndo_xdp_xmit
      bpf: devmap introduce dev_map_enqueue
      bpf: devmap prepare xdp frames for bulking
      xdp: introduce xdp_return_frame_rx_napi

Magnus Karlsson (2):
      xsk: add umem fill queue support and mmap
      xsk: add support for bind for Rx

Stephen Hemminger (1):
      hv_netvsc: pass netvsc_device to receive callback

 Documentation/networking/netvsc.txt              |  21 +
 debian.azure-4.15/config/config.common.ubuntu    |   1 +
 drivers/net/ethernet/intel/i40e/i40e_main.c      |   2 +
 drivers/net/ethernet/intel/i40e/i40e_txrx.c      | 103 ++++-
 drivers/net/ethernet/intel/i40e/i40e_txrx.h      |   3 +
 drivers/net/ethernet/intel/ixgbe/ixgbe.h         |   5 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c |   4 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c    |  48 ++-
 drivers/net/ethernet/mellanox/mlx5/core/Kconfig  |   1 +
 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c  |   1 +
 drivers/net/ethernet/qlogic/qede/qede.h          |   2 +
 drivers/net/ethernet/qlogic/qede/qede_fp.c       |   1 +
 drivers/net/ethernet/qlogic/qede/qede_main.c     |  10 +
 drivers/net/hyperv/Makefile                      |   2 +-
 drivers/net/hyperv/hyperv_net.h                  |  71 +++-
 drivers/net/hyperv/netvsc.c                      |  48 ++-
 drivers/net/hyperv/netvsc_bpf.c                  | 218 ++++++++++
 drivers/net/hyperv/netvsc_drv.c                  | 339 +++++++++++-----
 drivers/net/hyperv/rndis_filter.c                |  99 ++++-
 drivers/net/tap.c                                |  42 +-
 drivers/net/tun.c                                | 291 ++++++++++---
 drivers/net/virtio_net.c                         |  89 ++--
 drivers/vhost/net.c                              |  53 ++-
 include/linux/bpf.h                              |  16 +-
 include/linux/filter.h                           |  24 +-
 include/linux/if_tap.h                           |   6 +-
 include/linux/if_tun.h                           |  21 +-
 include/linux/netdevice.h                        |   6 +-
 include/net/page_pool.h                          | 144 +++++++
 include/net/xdp.h                                | 143 +++++++
 include/net/xdp_sock.h                           |  58 +++
 include/trace/events/xdp.h                       |   9 +-
 include/uapi/linux/if_xdp.h                      |  76 ++++
 kernel/bpf/cpumap.c                              | 132 +++---
 kernel/bpf/devmap.c                              | 103 ++++-
 net/Kconfig                                      |   3 +
 net/Makefile                                     |   1 +
 net/core/Makefile                                |   3 +-
 net/core/dev.c                                   |  69 +++-
 net/core/filter.c                                |  14 +-
 net/core/page_pool.c                             | 317 +++++++++++++++
 net/core/xdp.c                                   | 372 +++++++++++++++++
 net/xdp/Makefile                                 |   2 +
 net/xdp/xdp_umem.c                               | 255 ++++++++++++
 net/xdp/xdp_umem.h                               |  66 +++
 net/xdp/xdp_umem_props.h                         |  23 ++
 net/xdp/xsk.c                                    | 494 +++++++++++++++++++++++
 net/xdp/xsk_queue.c                              |  73 ++++
 net/xdp/xsk_queue.h                              | 151 +++++++
 49 files changed, 3615 insertions(+), 420 deletions(-)
 create mode 100644 drivers/net/hyperv/netvsc_bpf.c
 create mode 100644 include/net/page_pool.h
 create mode 100644 include/net/xdp.h
 create mode 100644 include/net/xdp_sock.h
 create mode 100644 include/uapi/linux/if_xdp.h
 create mode 100644 net/core/page_pool.c
 create mode 100644 net/core/xdp.c
 create mode 100644 net/xdp/Makefile
 create mode 100644 net/xdp/xdp_umem.c
 create mode 100644 net/xdp/xdp_umem.h
 create mode 100644 net/xdp/xdp_umem_props.h
 create mode 100644 net/xdp/xsk.c
 create mode 100644 net/xdp/xsk_queue.c
 create mode 100644 net/xdp/xsk_queue.h
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20210128/deac7bbf/attachment.sig>


More information about the kernel-team mailing list