From patchwork Wed Jan 10 12:26:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Quentin Monnet X-Patchwork-Id: 858250 X-Patchwork-Delegate: bpf@iogearbox.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="IZasEM3b"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zGpH96LkYz9s9Y for ; Wed, 10 Jan 2018 23:29:41 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965490AbeAJM3i (ORCPT ); Wed, 10 Jan 2018 07:29:38 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:42282 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934477AbeAJM1f (ORCPT ); Wed, 10 Jan 2018 07:27:35 -0500 Received: by mail-wm0-f65.google.com with SMTP id b141so26635089wme.1 for ; Wed, 10 Jan 2018 04:27:34 -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:in-reply-to:references; bh=YhmtsLn+Uc6ida/Sk3lNjHO39cJrXAsxOblpHDHG2Vc=; b=IZasEM3b0g3KnsfpSvLOqG/mYPtHGHvMBSZ2OGiryHzMfVO/hvM73XRIVvrZPIzD1P re4lQWYml+fIvAFCsbp5j+nVyxfo+aV+Re4vMIJRYbI2O2Dzk1StJcQcOdASS+kAYo7x ShZxd4478JmUAVdsMBHADGXf4Z+XzXcllbTP33prDzWKMc3B+MDzzv9FZYo7hPDP2Hv+ clokn1/qAHdikfL6ze92C8jyQICeQrQ/inQJyhMhv46wONoOOrxhVC0Wh3eDs6QnyVIO 7IlrHIdszanuQAlnFec8/RKWa/ni+zZ7iLLPsoJMRgiUCO4hCDSWgm6zLIRuWN0/efNK 2BoA== 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=YhmtsLn+Uc6ida/Sk3lNjHO39cJrXAsxOblpHDHG2Vc=; b=bmJR3x6KzSAtY/tNDSvfrmX5f98xtLHyBb3yfSU85+CuzOf72J0eCl2A3BtaY+RUZK tgkrwyY0L5BHK5YcN6X+echaB559VUwQZO+fv6U6gLCeK298ID6Q+fCM2NArQUZY0AsY IXf5dGYaX3EA91IFbqwZM7v8ChNmLe7Fd4Djt0JHTNaWnVfc0paMICl6ErEAmfknzXQ2 XCvAgO3YKi3+HGLX0tzMvCVH3qxWJRmS7p3E+tjSlnC9+9ZUZAVCMNZoc1t+cPXSAaMK yr0Z507iNvJn2nM4NQdD6Ze8unNAQHXEnVwu71uiKAPyCUfyutA3uxMlHKFKplTIMbph LwkQ== X-Gm-Message-State: AKwxytchVJv3iD/jEU2noav20bLnqmvbYZgAGr7bRoItf140MIei9HtS 6rixhvxPGBj4M6ZDgrN5P5g5Nw== X-Google-Smtp-Source: ACJfBot4KALdAQy/tecJmFdDck8B1GPiCsOntp2yMqgU+Y383vg7ac2TL0yGDPSC/BVrsI7Y1pbysA== X-Received: by 10.28.238.202 with SMTP id j71mr4820579wmi.34.1515587254179; Wed, 10 Jan 2018 04:27:34 -0800 (PST) Received: from cbtest8.netronome.com (host-79-78-33-110.static.as9105.net. [79.78.33.110]) by smtp.gmail.com with ESMTPSA id q186sm16907279wmb.6.2018.01.10.04.27.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 Jan 2018 04:27:33 -0800 (PST) From: Quentin Monnet To: daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: oss-drivers@netronome.com, jakub.kicinski@netronome.com, Nic Viljoen Subject: [PATCH bpf-next v2 12/14] nfp: bpf: add signed jump insns Date: Wed, 10 Jan 2018 12:26:05 +0000 Message-Id: <1515587167-1959-13-git-send-email-quentin.monnet@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515587167-1959-1-git-send-email-quentin.monnet@netronome.com> References: <1515587167-1959-1-git-send-email-quentin.monnet@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Nic Viljoen This patch adds signed jump instructions (jsgt, jsge, jslt, jsle) to the nfp jit. As well as adding the additional required raw assembler branch mask to nfp_asm.h Signed-off-by: Nic Viljoen Reviewed-by: Jiong Wang Reviewed-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/bpf/jit.c | 48 ++++++++++++++++++++++++++++ drivers/net/ethernet/netronome/nfp/nfp_asm.h | 1 + 2 files changed, 49 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/jit.c b/drivers/net/ethernet/netronome/nfp/bpf/jit.c index b4ed6bca4ea9..47c5224f8d6f 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/jit.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/jit.c @@ -1914,6 +1914,26 @@ static int jle_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) return wrp_cmp_imm(nfp_prog, meta, BR_BHS, true); } +static int jsgt_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + return wrp_cmp_imm(nfp_prog, meta, BR_BLT, true); +} + +static int jsge_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + return wrp_cmp_imm(nfp_prog, meta, BR_BGE, false); +} + +static int jslt_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + return wrp_cmp_imm(nfp_prog, meta, BR_BLT, false); +} + +static int jsle_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + return wrp_cmp_imm(nfp_prog, meta, BR_BGE, true); +} + static int jset_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { const struct bpf_insn *insn = &meta->insn; @@ -2003,6 +2023,26 @@ static int jle_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) return wrp_cmp_reg(nfp_prog, meta, BR_BHS, true); } +static int jsgt_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + return wrp_cmp_reg(nfp_prog, meta, BR_BLT, true); +} + +static int jsge_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + return wrp_cmp_reg(nfp_prog, meta, BR_BGE, false); +} + +static int jslt_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + return wrp_cmp_reg(nfp_prog, meta, BR_BLT, false); +} + +static int jsle_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + return wrp_cmp_reg(nfp_prog, meta, BR_BGE, true); +} + static int jset_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { return wrp_test_reg(nfp_prog, meta, ALU_OP_AND, BR_BNE); @@ -2087,6 +2127,10 @@ static const instr_cb_t instr_cb[256] = { [BPF_JMP | BPF_JGE | BPF_K] = jge_imm, [BPF_JMP | BPF_JLT | BPF_K] = jlt_imm, [BPF_JMP | BPF_JLE | BPF_K] = jle_imm, + [BPF_JMP | BPF_JSGT | BPF_K] = jsgt_imm, + [BPF_JMP | BPF_JSGE | BPF_K] = jsge_imm, + [BPF_JMP | BPF_JSLT | BPF_K] = jslt_imm, + [BPF_JMP | BPF_JSLE | BPF_K] = jsle_imm, [BPF_JMP | BPF_JSET | BPF_K] = jset_imm, [BPF_JMP | BPF_JNE | BPF_K] = jne_imm, [BPF_JMP | BPF_JEQ | BPF_X] = jeq_reg, @@ -2094,6 +2138,10 @@ static const instr_cb_t instr_cb[256] = { [BPF_JMP | BPF_JGE | BPF_X] = jge_reg, [BPF_JMP | BPF_JLT | BPF_X] = jlt_reg, [BPF_JMP | BPF_JLE | BPF_X] = jle_reg, + [BPF_JMP | BPF_JSGT | BPF_X] = jsgt_reg, + [BPF_JMP | BPF_JSGE | BPF_X] = jsge_reg, + [BPF_JMP | BPF_JSLT | BPF_X] = jslt_reg, + [BPF_JMP | BPF_JSLE | BPF_X] = jsle_reg, [BPF_JMP | BPF_JSET | BPF_X] = jset_reg, [BPF_JMP | BPF_JNE | BPF_X] = jne_reg, [BPF_JMP | BPF_CALL] = call, diff --git a/drivers/net/ethernet/netronome/nfp/nfp_asm.h b/drivers/net/ethernet/netronome/nfp/nfp_asm.h index a50240ab0ce2..20e51cb60e69 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_asm.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_asm.h @@ -81,6 +81,7 @@ enum br_mask { BR_BHS = 0x04, BR_BLO = 0x05, BR_BGE = 0x08, + BR_BLT = 0x09, BR_UNC = 0x18, };