From patchwork Fri Jan 12 04:29:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 859484 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="zsfkSQye"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zHqXX0c16z9sQm for ; Fri, 12 Jan 2018 15:29:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932744AbeALE3p (ORCPT ); Thu, 11 Jan 2018 23:29:45 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:41319 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753955AbeALE3o (ORCPT ); Thu, 11 Jan 2018 23:29:44 -0500 Received: by mail-pf0-f194.google.com with SMTP id j3so3541879pfh.8 for ; Thu, 11 Jan 2018 20:29:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=lMzZ7mcsRMg4Qzxt3BkySfileRx+8Xzj4T4WFHdMgsg=; b=zsfkSQye2IboWAJv7ewL4pRu+sxccDdrC+KEjYhDxH24boKoWOqNNQRcBtolJoy/FU gNNREHOa5CHBQFbDKS6SLnOBgKkkBE59Ekr9hGmmAjH94tFMutQExxRIRu2rEjSQmWoy Jj61ZDoEsm9IgYsNPFJ8qfhoAUh9ur0Lx/5qXGYicvdDu5A+wXzs5MjLZiU0tcA0nBD3 IQ/WpamlvMDSc+GiZbLmGZ8qmkz0s1enSAA3KQABlfKniw1sDE2cPHdyHJAqUJmlfu0I MGFBUuGgBdqBxcYMGYcvt3ZL3lCcgqNDmpcfwDx7bg3Bfttjtrwtoo5b3IPHE1h7p5k/ 59Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=lMzZ7mcsRMg4Qzxt3BkySfileRx+8Xzj4T4WFHdMgsg=; b=EIqxA46wNUD7eXRPaqr4Oj/vn4iMMj9zEeG5Yz65oLbVBcYWQTZGM/Lj1uGKjj+kpT HeGMjhsB35QPzM7m/6le5Uu3StxL86NRbshHwE9Pjupa5lFhbA0/qgfk4PMJ4w6u9EzV BBXXdtV+9UC+SF4AXPcZXYYKW+uDmVWxmT8BksAUx0moX2poe7SoziPlxMpTyE08rgZ0 JNdjvhPlLDQhI1u7vAeSBHY09clnHGxrr6pYmS4Y84ktTIduGxvTRm91HDfVGWbTYjx4 nn44o66DhxgEeQHTPWerS1wGqD+HA/W1xHxNECNsZK7p4jl1qzyyUtO9UQw8q+2Z9OUu amiQ== X-Gm-Message-State: AKwxytelZcUnRkprX8L/QTvToVaoQ7c9KTiTzgjjCrdpIPxoSVT3zxPJ sXr44xOVCZhlWPt2A/O9a4dZ9w== X-Google-Smtp-Source: ACJfBovx12FcikNfGUMVx4CzFcuXBxSyl0Le/LQztQWxyrw/KQUYUYM+4Vc5N/9DhxOuibVhdl52jg== X-Received: by 10.159.204.134 with SMTP id t6mr6114953plo.400.1515731383844; Thu, 11 Jan 2018 20:29:43 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id e8sm45863875pfk.6.2018.01.11.20.29.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 11 Jan 2018 20:29:43 -0800 (PST) From: Jakub Kicinski To: alexei.starovoitov@gmail.com, daniel@iogearbox.net, davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, tehnerd@fb.com, Jakub Kicinski Subject: [PATCH bpf-next v2 00/15] bpf: support creating maps on networking devices Date: Thu, 11 Jan 2018 20:29:02 -0800 Message-Id: <20180112042917.10348-1-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi! This set adds support for creating maps on networking devices. BPF is programs+maps, the pure program offload has been around for quite some time, this patchset adds the map part of the equation. Maps are allocated on the target device from the start. There is no host copy when map is created on the device. Device maps are represented by struct bpf_offloaded_map, regardless of type. Host programs can't access such maps, access is only possible from a program also loaded to the same device and/or via the BPF syscall. Offloaded programs are currently only allowed to perform lookups, control plane is responsible for populating the maps. For brevity only infrastructure and basic NFP patches are included. Target device reporting, netdevsim and tests will follow up as well as some further optimizations to the NFP code. v2: - leave out the array maps, we will add them trivially later to avoid merge conflicts with ongoing spectere&meltdown mitigations. Jakub Kicinski (15): bpf: add map_alloc_check callback bpf: hashtab: move attribute validation before allocation bpf: hashtab: move checks out of alloc function bpf: add helper for copying attrs to struct bpf_map bpf: rename bpf_dev_offload -> bpf_prog_offload bpf: offload: factor out netdev checking at allocation time bpf: offload: add map offload infrastructure nfp: bpf: add map data structure nfp: bpf: add basic control channel communication nfp: bpf: implement helpers for FW map ops nfp: bpf: parse function call and map capabilities nfp: bpf: add helpers for updating immediate instructions nfp: bpf: add verification and codegen for map lookups nfp: bpf: add support for reading map memory nfp: bpf: implement bpf map offload drivers/net/ethernet/netronome/nfp/Makefile | 1 + drivers/net/ethernet/netronome/nfp/bpf/cmsg.c | 446 +++++++++++++++++++++ drivers/net/ethernet/netronome/nfp/bpf/fw.h | 103 +++++ drivers/net/ethernet/netronome/nfp/bpf/jit.c | 163 +++++++- drivers/net/ethernet/netronome/nfp/bpf/main.c | 60 ++- drivers/net/ethernet/netronome/nfp/bpf/main.h | 95 ++++- drivers/net/ethernet/netronome/nfp/bpf/offload.c | 106 ++++- drivers/net/ethernet/netronome/nfp/bpf/verifier.c | 47 +++ drivers/net/ethernet/netronome/nfp/nfp_app.h | 9 + drivers/net/ethernet/netronome/nfp/nfp_asm.c | 58 +++ drivers/net/ethernet/netronome/nfp/nfp_asm.h | 4 + drivers/net/ethernet/netronome/nfp/nfp_net.h | 12 + .../net/ethernet/netronome/nfp/nfp_net_common.c | 7 + include/linux/bpf.h | 65 ++- include/linux/netdevice.h | 6 + include/uapi/linux/bpf.h | 1 + kernel/bpf/cpumap.c | 8 +- kernel/bpf/devmap.c | 8 +- kernel/bpf/hashtab.c | 103 +++-- kernel/bpf/lpm_trie.c | 7 +- kernel/bpf/offload.c | 224 ++++++++++- kernel/bpf/sockmap.c | 8 +- kernel/bpf/stackmap.c | 6 +- kernel/bpf/syscall.c | 71 +++- kernel/bpf/verifier.c | 7 + tools/include/uapi/linux/bpf.h | 1 + 26 files changed, 1506 insertions(+), 120 deletions(-) create mode 100644 drivers/net/ethernet/netronome/nfp/bpf/cmsg.c