From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jesper Dangaard Brouer Subject: [bpf-next V2 PATCH 0/8] bpf/xdp: add flags argument to ndo_xdp_xmit and flag flush operation Date: Thu, 31 May 2018 10:59:42 +0200 Message-ID: <152775714013.24817.5067576840614810786.stgit@firesoul> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Cc: liu.song.a23@gmail.com, songliubraving@fb.com, John Fastabend To: netdev@vger.kernel.org, Daniel Borkmann , Alexei Starovoitov , Jesper Dangaard Brouer Return-path: Received: from mx3-rdu2.redhat.com ([66.187.233.73]:38366 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754040AbeEaI7o (ORCPT ); Thu, 31 May 2018 04:59:44 -0400 Sender: netdev-owner@vger.kernel.org List-ID: As I mentioned in merge commit 10f678683e4 ("Merge branch 'xdp_xmit-bulking'") I plan to change the API for ndo_xdp_xmit once more, by adding a flags argument, which is done in this patchset. I know it is late in the cycle (currently at rc7), but it would be nice to avoid changing NDOs over several kernel releases, as it is annoying to vendors and distro backporters, but it is not strictly UAPI so it is allowed (according to Alexei). The end-goal is getting rid of the ndo_xdp_flush operation, as it will make it possible for drivers to implement a TXQ synchronization mechanism that is not necessarily derived from the CPU id (smp_processor_id). This patchset removes all callers of the ndo_xdp_flush operation, but it doesn't take the last step of removing it from all drivers. This can be done later, or I can update the patchset on request. Micro-benchmarks only show a very small performance improvement, for map-redirect around ~2 ns, and for non-map redirect ~7 ns. I've not benchmarked this with CONFIG_RETPOLINE, but the performance benefit should be more visible given we end-up removing an indirect call. --- V2: Updated based on feedback from Song Liu Jesper Dangaard Brouer (8): xdp: add flags argument to ndo_xdp_xmit API i40e: implement flush flag for ndo_xdp_xmit ixgbe: implement flush flag for ndo_xdp_xmit tun: implement flush flag for ndo_xdp_xmit virtio_net: implement flush flag for ndo_xdp_xmit xdp: done implementing ndo_xdp_xmit flush flag for all drivers bpf/xdp: non-map redirect can avoid calling ndo_xdp_flush bpf/xdp: devmap can avoid calling ndo_xdp_flush drivers/net/ethernet/intel/i40e/i40e_txrx.c | 14 ++++++++++++-- drivers/net/ethernet/intel/i40e/i40e_txrx.h | 3 ++- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 23 +++++++++++++++++------ drivers/net/tun.c | 25 ++++++++++++++++++------- drivers/net/virtio_net.c | 9 ++++++++- include/linux/netdevice.h | 7 ++++--- include/net/xdp.h | 4 ++++ kernel/bpf/devmap.c | 19 ++++++------------- net/core/filter.c | 3 +-- 9 files changed, 72 insertions(+), 35 deletions(-)