[net-next V10 PATCH 00/16] XDP redirect memory return API

2018-04-17 Thread Jesper Dangaard Brouer
Resubmit V10 against net-next, as it contains NIC driver changes.

This patchset works towards supporting different XDP RX-ring memory
allocators.  As this will be needed by the AF_XDP zero-copy mode.

The patchset uses mlx5 as the sample driver, which gets implemented
XDP_REDIRECT RX-mode, but not ndo_xdp_xmit (as this API is subject to
change thought the patchset).

A new struct xdp_frame is introduced (modeled after cpumap xdp_pkt).
And both ndo_xdp_xmit and the new xdp_return_frame end-up using this.

Support for a driver supplied allocator is implemented, and a
refurbished version of page_pool is the first return allocator type
introduced.  This will be a integration point for AF_XDP zero-copy.

The mlx5 driver evolve into using the page_pool, and see a performance
increase (with ndo_xdp_xmit out ixgbe driver) from 6Mpps to 12Mpps.


The patchset stop at 16 patches (one over limit), but more API changes
are planned.  Specifically extending ndo_xdp_xmit and xdp_return_frame
APIs to support bulking.  As this will address some known limits.

V2: Updated according to Tariq's feedback
V3: Updated based on feedback from Jason Wang and Alex Duyck
V4: Updated based on feedback from Tariq and Jason
V5: Fix SPDX license, add Tariq's reviews, improve patch desc for perf test
V6: Updated based on feedback from Eric Dumazet and Alex Duyck
V7: Adapt to i40e that got XDP_REDIRECT support in-between
V8:
 Updated based on feedback kbuild test robot, and adjust for mlx5 changes
 page_pool only compiled into kernel when drivers Kconfig 'select' feature
V9:
 Remove some inline statements, let compiler decide what to inline
 Fix return value in virtio_net driver
 Adjust for mlx5 changes in-between submissions
V10:
 Minor adjust for mlx5 requested by Tariq
 Resubmit against net-next

---

Jesper Dangaard Brouer (16):
  mlx5: basic XDP_REDIRECT forward support
  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
  mlx5: register a memory model when XDP is enabled
  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
  mlx5: use page_pool for xdp_return_frame call
  xdp: transition into using xdp_frame for return API
  xdp: transition into using xdp_frame for ndo_xdp_xmit


 drivers/net/ethernet/intel/i40e/i40e_txrx.c   |   33 ++
 drivers/net/ethernet/intel/i40e/i40e_txrx.h   |3 
 drivers/net/ethernet/intel/ixgbe/ixgbe.h  |3 
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |   38 ++-
 drivers/net/ethernet/mellanox/mlx5/core/Kconfig   |1 
 drivers/net/ethernet/mellanox/mlx5/core/en.h  |4 
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c |   37 ++
 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c   |   42 ++-
 drivers/net/tun.c |   60 ++--
 drivers/net/virtio_net.c  |   67 +++-
 drivers/vhost/net.c   |7 
 include/linux/filter.h|   24 --
 include/linux/if_tun.h|4 
 include/linux/netdevice.h |4 
 include/net/page_pool.h   |  143 +
 include/net/xdp.h |   83 +
 kernel/bpf/cpumap.c   |  132 +++--
 net/Kconfig   |3 
 net/core/Makefile |1 
 net/core/filter.c |   17 +
 net/core/page_pool.c  |  317 +
 net/core/xdp.c|  269 ++
 22 files changed, 1094 insertions(+), 198 deletions(-)
 create mode 100644 include/net/page_pool.h
 create mode 100644 net/core/page_pool.c

--


Re: [net-next V10 PATCH 00/16] XDP redirect memory return API

2018-04-17 Thread Alexei Starovoitov
On Tue, Apr 17, 2018 at 5:58 AM, Jesper Dangaard Brouer
 wrote:
> Resubmit V10 against net-next, as it contains NIC driver changes.
>
> This patchset works towards supporting different XDP RX-ring memory
> allocators.  As this will be needed by the AF_XDP zero-copy mode.
>
> The patchset uses mlx5 as the sample driver, which gets implemented
> XDP_REDIRECT RX-mode, but not ndo_xdp_xmit (as this API is subject to
> change thought the patchset).
>
> A new struct xdp_frame is introduced (modeled after cpumap xdp_pkt).
> And both ndo_xdp_xmit and the new xdp_return_frame end-up using this.
>
> Support for a driver supplied allocator is implemented, and a
> refurbished version of page_pool is the first return allocator type
> introduced.  This will be a integration point for AF_XDP zero-copy.
>
> The mlx5 driver evolve into using the page_pool, and see a performance
> increase (with ndo_xdp_xmit out ixgbe driver) from 6Mpps to 12Mpps.
>
>
> The patchset stop at 16 patches (one over limit), but more API changes
> are planned.  Specifically extending ndo_xdp_xmit and xdp_return_frame
> APIs to support bulking.  As this will address some known limits.
>
> V2: Updated according to Tariq's feedback
> V3: Updated based on feedback from Jason Wang and Alex Duyck
> V4: Updated based on feedback from Tariq and Jason
> V5: Fix SPDX license, add Tariq's reviews, improve patch desc for perf test
> V6: Updated based on feedback from Eric Dumazet and Alex Duyck
> V7: Adapt to i40e that got XDP_REDIRECT support in-between
> V8:
>  Updated based on feedback kbuild test robot, and adjust for mlx5 changes
>  page_pool only compiled into kernel when drivers Kconfig 'select' feature
> V9:
>  Remove some inline statements, let compiler decide what to inline
>  Fix return value in virtio_net driver
>  Adjust for mlx5 changes in-between submissions
> V10:
>  Minor adjust for mlx5 requested by Tariq
>  Resubmit against net-next

looks like you forgot to include extra patch to fixup xdp_adjust_head()
helper. Otherwise reused xdp_frame in the top of that packet is leaking
kernel pointers into bpf program.
Could you please respin with that change included?


Re: [net-next V10 PATCH 00/16] XDP redirect memory return API

2018-04-17 Thread David Miller
From: Jesper Dangaard Brouer 
Date: Tue, 17 Apr 2018 14:58:52 +0200

> Resubmit V10 against net-next, as it contains NIC driver changes.

Series applied, thanks Jesper.


Re: [net-next V10 PATCH 00/16] XDP redirect memory return API

2018-04-17 Thread David Miller
From: Alexei Starovoitov 
Date: Tue, 17 Apr 2018 06:53:33 -0700

> looks like you forgot to include extra patch to fixup xdp_adjust_head()
> helper. Otherwise reused xdp_frame in the top of that packet is leaking
> kernel pointers into bpf program.
> Could you please respin with that change included?

Just in time, I was about to push this back out. :)

Jesper, please respin with Alexei's requested changes.


Re: [net-next V10 PATCH 00/16] XDP redirect memory return API

2018-04-17 Thread Jesper Dangaard Brouer
On Tue, 17 Apr 2018 10:07:50 -0400 (EDT)
David Miller  wrote:

> From: Alexei Starovoitov 
> Date: Tue, 17 Apr 2018 06:53:33 -0700
> 
> > looks like you forgot to include extra patch to fixup xdp_adjust_head()
> > helper. Otherwise reused xdp_frame in the top of that packet is leaking
> > kernel pointers into bpf program.
> > Could you please respin with that change included?  
> 
> Just in time, I was about to push this back out. :)
> 
> Jesper, please respin with Alexei's requested changes.

Your guys are torturing me!

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer