From patchwork Wed Nov 1 17:38:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 833058 X-Patchwork-Delegate: davem@davemloft.net 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="G5+EGirJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yRwRy18mBz9sBd for ; Thu, 2 Nov 2017 04:38:37 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754952AbdKARie (ORCPT ); Wed, 1 Nov 2017 13:38:34 -0400 Received: from mail-pg0-f66.google.com ([74.125.83.66]:53522 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752246AbdKARib (ORCPT ); Wed, 1 Nov 2017 13:38:31 -0400 Received: by mail-pg0-f66.google.com with SMTP id s2so2683886pge.10 for ; Wed, 01 Nov 2017 10:38:31 -0700 (PDT) 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:in-reply-to:references; bh=/2VI2Nbl5SDya3tyHNLSgbi0rjMy8+3YDq3S7Ox1qJc=; b=G5+EGirJWDHHnAR183HEtW1yZb77i+hVpWlQQdYZDUf1MTF1EjTrGzepdBfIBvpamu 5VhuUe5WoBVxiraX3ZLI9SN8c1/QqRUO37dJsi/pj+TYyS6HggKfYKUhPQFZ565IGnHH 8x4pumukWXcaTiObIdGLwwjwUAbRLgnkyekUZt9NhZd4ocyKX8gXiYYgNn9v/2SvWIHT j4px8KYC9kB+R6QEKhl6HMO5hvWl0z0p8chQ1bItbLQw7MI6Kr/he0DjE+7AMLX5FXRf GTNG0nBdcAJIKVv4O2hwejLE68cDTpOf07glGJs45JTvGEIWjVhDwq7Xuqa2E15laM62 bYZw== 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:in-reply-to :references; bh=/2VI2Nbl5SDya3tyHNLSgbi0rjMy8+3YDq3S7Ox1qJc=; b=EOQMUmkSH+YPYq6g46A4LTSCbMXzzq9B5ip/dqqeKFqy2tIwapaOL5Q/8jlC4ZVFWZ d5+IU8OOZW/4QGfYja6BH3cS2TLOcMXsLEFL6q/3JSbB/Fyl4mkQcAkkaSzvxYM7+QCk 3tJVY2S8ViwY9tTSkLXbIyjlDQ9oRb5NpuSbP63ncanNaLoCD7s5F3Yq3PPHOM39PD/Q QKm3a6U68d+cdZJx7nIzQM9/IN0HhG2QW9qat0qhFhTQqSOXyUfj6T9d3EJCoJ3bePZa kZShTI7G6YQ9q9bSS2B3UTy4Lj52L4nXWcRqH+k4XqLdXEH4MqJhUWNZAhgFSzqF3whP mOPw== X-Gm-Message-State: AMCzsaVHIAO+YQ0wf68u3D/skMf4ttBWqCjlRfzfxVVVAeuc1KVRX9dh 78k8fG1QcEtEcGqps85K8WR53I2K X-Google-Smtp-Source: ABhQp+TM4JIOhfgFEN1K2E/GW2JdnFYZHYFtj18v3OHH1Q4cDtPEOs8jwLRBZR6C2xU2boqfaKHoWg== X-Received: by 10.98.32.206 with SMTP id m75mr655655pfj.231.1509557910484; Wed, 01 Nov 2017 10:38:30 -0700 (PDT) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id e70sm2185231pgc.15.2017.11.01.10.38.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 01 Nov 2017 10:38:29 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: oss-drivers@netronome.com, Jiong Wang Subject: [PATCH net-next 1/2] nfp: bpf: rename ALU_OP_NEG to ALU_OP_NOT Date: Wed, 1 Nov 2017 10:38:24 -0700 Message-Id: <20171101173825.7008-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171101173825.7008-1-jakub.kicinski@netronome.com> References: <20171101173825.7008-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiong Wang The current ALU_OP_NEG is Op encoding 0x4 for NPF ALU instruction. It is actually performing "~B" operation which is bitwise NOT. The using naming ALU_OP_NEG is misleading as NEG is -B which is not the same as ~B. Signed-off-by: Jiong Wang Reviewed-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/bpf/jit.c | 2 +- drivers/net/ethernet/netronome/nfp/nfp_asm.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/jit.c b/drivers/net/ethernet/netronome/nfp/bpf/jit.c index e7eeb7a07f81..369173100fcf 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/jit.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/jit.c @@ -944,7 +944,7 @@ wrp_alu_imm(struct nfp_prog *nfp_prog, u8 dst, enum alu_op alu_op, u32 imm) if (alu_op == ALU_OP_XOR) { if (!~imm) emit_alu(nfp_prog, reg_both(dst), reg_none(), - ALU_OP_NEG, reg_b(dst)); + ALU_OP_NOT, reg_b(dst)); if (!imm || !~imm) return; } diff --git a/drivers/net/ethernet/netronome/nfp/nfp_asm.h b/drivers/net/ethernet/netronome/nfp/nfp_asm.h index f4d1df3a1925..74d0c11ab2f9 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_asm.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_asm.h @@ -174,7 +174,7 @@ enum shf_sc { enum alu_op { ALU_OP_NONE = 0x00, ALU_OP_ADD = 0x01, - ALU_OP_NEG = 0x04, + ALU_OP_NOT = 0x04, ALU_OP_AND = 0x08, ALU_OP_SUB_C = 0x0d, ALU_OP_ADD_C = 0x11, From patchwork Wed Nov 1 17:38:25 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 833060 X-Patchwork-Delegate: davem@davemloft.net 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="U8iTkE+q"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yRwS01BcFz9sRW for ; Thu, 2 Nov 2017 04:38:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754833AbdKARid (ORCPT ); Wed, 1 Nov 2017 13:38:33 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:47407 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751587AbdKARib (ORCPT ); Wed, 1 Nov 2017 13:38:31 -0400 Received: by mail-pg0-f67.google.com with SMTP id r25so2692420pgn.4 for ; Wed, 01 Nov 2017 10:38:31 -0700 (PDT) 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:in-reply-to:references; bh=gwkHxTVn2kCd+o1ni5wmeJ1Don/88sIzxAyfz2LI2bg=; b=U8iTkE+qAbNautS7jWt1vyVcaFRbu7xFRmg/Rqs/RjaRuz0/OY2pTeh2Tghi1jA+2w hNkyzhpeIuZQBRSkqBgKgz1tJ7FkBEMl8Cr84N/6RYe6TG88Uvjl9EHFgKQ3oWWHJzVW ls6qYihv7AcZ+YM5scEJVWQGF1Tfc9gMF1IKunmHCVKdJMGkQU8x2xotQ5/Q6rp2g5aq B9fKcjXniAyucK21wxyeR8GUADjWXaFjJmvinBZzc4HtYF8aHC8yETGJ9ecGHRQu7wfx HQ/dCTNBkw0DAagauieUwia6xLHFjIgtEXeVTnyC0paLSh2PeCPOGcB4EhVnJEupuC4u vL3A== 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:in-reply-to :references; bh=gwkHxTVn2kCd+o1ni5wmeJ1Don/88sIzxAyfz2LI2bg=; b=FIKw+hspVjrZ73khZXkJ6pHy0Ag3+/szqPSsXvSVr63/FpbWdfw4xmKXp23hQoeTyh Dz5lfzU1S7XfXAtRv8qwtVnJxmum4+fji92UO0onwMNcE7EcxFHtne45jSOHrN4mBwdn qFASVFgTkhWpJZ0ku7KhYSKDNllACNJOvB3fq5dNFcSFpVsp67DEXS9DAqFSKXsuD5JV wHOumttmlVTKuupkB8AcQi/OIkQpowlE+C0xCGYPEFxUsp3q8elpdiT+ikJRwbs+lW52 +qT+touAg+cAo34ftpc1ljlIDNdJI3xK5FKLVTOynqiwdXuW5XJvxpd4hjv9q15lMjCb rUKQ== X-Gm-Message-State: AMCzsaVyKvsZYa6lF8ByXDwxeo1W8X5Pwv93mVGvwv3/5KLPBAyaTrrC rvRKY269OTSTspFRIWsKiRbkq10X X-Google-Smtp-Source: ABhQp+TyhM488px5JGw7MlhBAW+fBUs+Du7htirV5sEmWTPCpHrha0Tm3T2a/OOg2jvMBgv3NjJcIg== X-Received: by 10.98.65.11 with SMTP id o11mr718888pfa.86.1509557911223; Wed, 01 Nov 2017 10:38:31 -0700 (PDT) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id e70sm2185231pgc.15.2017.11.01.10.38.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 01 Nov 2017 10:38:30 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: oss-drivers@netronome.com, Jiong Wang Subject: [PATCH net-next 2/2] nfp: bpf: support [BPF_ALU | BPF_ALU64] | BPF_NEG Date: Wed, 1 Nov 2017 10:38:25 -0700 Message-Id: <20171101173825.7008-3-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171101173825.7008-1-jakub.kicinski@netronome.com> References: <20171101173825.7008-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiong Wang This patch supports BPF_NEG under both BPF_ALU64 and BPF_ALU. LLVM recently starts to generate it. NOTE: BPF_NEG takes single operand which is an register and serve as both input and output. Signed-off-by: Jiong Wang Reviewed-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/bpf/jit.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/jit.c b/drivers/net/ethernet/netronome/nfp/bpf/jit.c index 369173100fcf..2609a2487100 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/jit.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/jit.c @@ -1218,6 +1218,18 @@ static int sub_imm64(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) return 0; } +static int neg_reg64(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + const struct bpf_insn *insn = &meta->insn; + + emit_alu(nfp_prog, reg_both(insn->dst_reg * 2), reg_imm(0), + ALU_OP_SUB, reg_b(insn->dst_reg * 2)); + emit_alu(nfp_prog, reg_both(insn->dst_reg * 2 + 1), reg_imm(0), + ALU_OP_SUB_C, reg_b(insn->dst_reg * 2 + 1)); + + return 0; +} + static int shl_imm64(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { const struct bpf_insn *insn = &meta->insn; @@ -1338,6 +1350,16 @@ static int sub_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) return wrp_alu32_imm(nfp_prog, meta, ALU_OP_SUB, !meta->insn.imm); } +static int neg_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + u8 dst = meta->insn.dst_reg * 2; + + emit_alu(nfp_prog, reg_both(dst), reg_imm(0), ALU_OP_SUB, reg_b(dst)); + wrp_immed(nfp_prog, reg_both(meta->insn.dst_reg * 2 + 1), 0); + + return 0; +} + static int shl_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { const struct bpf_insn *insn = &meta->insn; @@ -1847,6 +1869,7 @@ static const instr_cb_t instr_cb[256] = { [BPF_ALU64 | BPF_ADD | BPF_K] = add_imm64, [BPF_ALU64 | BPF_SUB | BPF_X] = sub_reg64, [BPF_ALU64 | BPF_SUB | BPF_K] = sub_imm64, + [BPF_ALU64 | BPF_NEG] = neg_reg64, [BPF_ALU64 | BPF_LSH | BPF_K] = shl_imm64, [BPF_ALU64 | BPF_RSH | BPF_K] = shr_imm64, [BPF_ALU | BPF_MOV | BPF_X] = mov_reg, @@ -1861,6 +1884,7 @@ static const instr_cb_t instr_cb[256] = { [BPF_ALU | BPF_ADD | BPF_K] = add_imm, [BPF_ALU | BPF_SUB | BPF_X] = sub_reg, [BPF_ALU | BPF_SUB | BPF_K] = sub_imm, + [BPF_ALU | BPF_NEG] = neg_reg, [BPF_ALU | BPF_LSH | BPF_K] = shl_imm, [BPF_ALU | BPF_END | BPF_X] = end_reg32, [BPF_LD | BPF_IMM | BPF_DW] = imm_ld8,