From patchwork Wed Dec 5 18:52:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1008381 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=netronome.com 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="baHoF0WN"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4397D05nxYz9s8J for ; Thu, 6 Dec 2018 05:53:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728135AbeLESxT (ORCPT ); Wed, 5 Dec 2018 13:53:19 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:39889 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727763AbeLESxS (ORCPT ); Wed, 5 Dec 2018 13:53:18 -0500 Received: by mail-wm1-f66.google.com with SMTP id f81so11553644wmd.4 for ; Wed, 05 Dec 2018 10:53:17 -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=U9Xn2jiRJgBYJ8l+3jmjV5RTQIAXgmf7+uFBKajzb+o=; b=baHoF0WNgWbJb3z5SGIssKjMB8jnvAi54vCGduJrcc/BQjGvJgWHTINgLdkT31Z0OO 7z79KlKIjf8w/cI5rFMc4DVVEPD0pSxZJVJd0V7I101w06Pn06phN/uAD6WOI0QgHiJz 5lqhdD8Q5Q0shAMnS6ctkTmnB9Q4VW4d9B2ObkB97/ewak3lwhhAvbYFCa2Z/2g7FmqY kftCLa2u4fMZGHgHKkURaUgMNs4yIo19HgUlQlnKJCAhImIPXB8+vUSc3u9upyg0Z5uz wjVndAosvMskgQ2SDPZQk6QJA79UXlfyHCTJWmwW21Ad59BAmGgf31sywbi13mM6Voqa gd7A== 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=U9Xn2jiRJgBYJ8l+3jmjV5RTQIAXgmf7+uFBKajzb+o=; b=m7ZiDmFZbiHKCC7FN5nmFMbEHTsRWVFM3Ycgx53FdomArh1S7VNv3EAUQhl8ufdlQ8 +f9qridnBLm4Df0soYV/P7E+bMDRS000JJ0H1aVBkE+AVjwIf37rPQ2OHUCLJL6uuWX/ b2NceIl0RahUJMnU5S6RyUd2GDS6sI3oNgPxasN0uJ8YmvLTtdFzqJRb4AyPC0PXE1Ji JZekCD3xmYmmRwKFFox3dwBvpu+Di6cZ348oF3hyurPamGv/ME/EQ8L4gUi9bLMRA4xX Y/fVhsMj0VOzxZEDwlSe0lJJmORZRa2OIOxyIxYEeyPHtynbR3csAoRThdsNFVZOTWdq kgxA== X-Gm-Message-State: AA+aEWbeMXJ8yLq3sJXfDijVd8hhoyI9W0QzJtxtzOvqMmbgESV1Ze5y N6bU5GMmuqC11Crc7W5Y862LCg== X-Google-Smtp-Source: AFSGD/XUodfMpRCOUXpNDNABCS5NLscfFJwd6HESu5whDfSmpjZmYaqP/mhSUvzGQYKQfgCkaz30rQ== X-Received: by 2002:a1c:650b:: with SMTP id z11mr17091939wmb.23.1544035996405; Wed, 05 Dec 2018 10:53:16 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id s81sm15803251wmf.14.2018.12.05.10.53.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Dec 2018 10:53:15 -0800 (PST) From: Jiong Wang To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang , Paul Burton , linux-mips@vger.kernel.org Subject: [PATCH v2 bpf-next 1/7] mips: bpf: implement jitting of BPF_ALU | BPF_ARSH | BPF_X Date: Wed, 5 Dec 2018 13:52:30 -0500 Message-Id: <1544035956-12375-2-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> References: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Jitting of BPF_K is supported already, but not BPF_X. This patch complete the support for the latter on both MIPS and microMIPS. Cc: Paul Burton Cc: linux-mips@vger.kernel.org Acked-by: Paul Burton Signed-off-by: Jiong Wang --- arch/mips/include/asm/uasm.h | 1 + arch/mips/include/uapi/asm/inst.h | 1 + arch/mips/mm/uasm-micromips.c | 1 + arch/mips/mm/uasm-mips.c | 1 + arch/mips/mm/uasm.c | 9 +++++---- arch/mips/net/ebpf_jit.c | 4 ++++ 6 files changed, 13 insertions(+), 4 deletions(-) diff --git a/arch/mips/include/asm/uasm.h b/arch/mips/include/asm/uasm.h index 59dae37..b1990dd 100644 --- a/arch/mips/include/asm/uasm.h +++ b/arch/mips/include/asm/uasm.h @@ -157,6 +157,7 @@ Ip_u2u1s3(_slti); Ip_u2u1s3(_sltiu); Ip_u3u1u2(_sltu); Ip_u2u1u3(_sra); +Ip_u3u2u1(_srav); Ip_u2u1u3(_srl); Ip_u3u2u1(_srlv); Ip_u3u1u2(_subu); diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h index 273ef58..40fbb5d 100644 --- a/arch/mips/include/uapi/asm/inst.h +++ b/arch/mips/include/uapi/asm/inst.h @@ -371,6 +371,7 @@ enum mm_32a_minor_op { mm_srl32_op = 0x040, mm_srlv32_op = 0x050, mm_sra_op = 0x080, + mm_srav_op = 0x090, mm_rotr_op = 0x0c0, mm_lwxs_op = 0x118, mm_addu32_op = 0x150, diff --git a/arch/mips/mm/uasm-micromips.c b/arch/mips/mm/uasm-micromips.c index 24e5b0d..75ef904 100644 --- a/arch/mips/mm/uasm-micromips.c +++ b/arch/mips/mm/uasm-micromips.c @@ -104,6 +104,7 @@ static const struct insn insn_table_MM[insn_invalid] = { [insn_sltiu] = {M(mm_sltiu32_op, 0, 0, 0, 0, 0), RT | RS | SIMM}, [insn_sltu] = {M(mm_pool32a_op, 0, 0, 0, 0, mm_sltu_op), RT | RS | RD}, [insn_sra] = {M(mm_pool32a_op, 0, 0, 0, 0, mm_sra_op), RT | RS | RD}, + [insn_srav] = {M(mm_pool32a_op, 0, 0, 0, 0, mm_srav_op), RT | RS | RD}, [insn_srl] = {M(mm_pool32a_op, 0, 0, 0, 0, mm_srl32_op), RT | RS | RD}, [insn_srlv] = {M(mm_pool32a_op, 0, 0, 0, 0, mm_srlv32_op), RT | RS | RD}, [insn_rotr] = {M(mm_pool32a_op, 0, 0, 0, 0, mm_rotr_op), RT | RS | RD}, diff --git a/arch/mips/mm/uasm-mips.c b/arch/mips/mm/uasm-mips.c index 60ceb93..6abe40f 100644 --- a/arch/mips/mm/uasm-mips.c +++ b/arch/mips/mm/uasm-mips.c @@ -171,6 +171,7 @@ static const struct insn insn_table[insn_invalid] = { [insn_sltiu] = {M(sltiu_op, 0, 0, 0, 0, 0), RS | RT | SIMM}, [insn_sltu] = {M(spec_op, 0, 0, 0, 0, sltu_op), RS | RT | RD}, [insn_sra] = {M(spec_op, 0, 0, 0, 0, sra_op), RT | RD | RE}, + [insn_srav] = {M(spec_op, 0, 0, 0, 0, srav_op), RS | RT | RD}, [insn_srl] = {M(spec_op, 0, 0, 0, 0, srl_op), RT | RD | RE}, [insn_srlv] = {M(spec_op, 0, 0, 0, 0, srlv_op), RS | RT | RD}, [insn_subu] = {M(spec_op, 0, 0, 0, 0, subu_op), RS | RT | RD}, diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c index 57570c0..45b6264 100644 --- a/arch/mips/mm/uasm.c +++ b/arch/mips/mm/uasm.c @@ -61,10 +61,10 @@ enum opcode { insn_mthc0, insn_mthi, insn_mtlo, insn_mul, insn_multu, insn_nor, insn_or, insn_ori, insn_pref, insn_rfe, insn_rotr, insn_sb, insn_sc, insn_scd, insn_sd, insn_sh, insn_sll, insn_sllv, - insn_slt, insn_slti, insn_sltiu, insn_sltu, insn_sra, insn_srl, - insn_srlv, insn_subu, insn_sw, insn_sync, insn_syscall, insn_tlbp, - insn_tlbr, insn_tlbwi, insn_tlbwr, insn_wait, insn_wsbh, insn_xor, - insn_xori, insn_yield, + insn_slt, insn_slti, insn_sltiu, insn_sltu, insn_sra, insn_srav, + insn_srl, insn_srlv, insn_subu, insn_sw, insn_sync, insn_syscall, + insn_tlbp, insn_tlbr, insn_tlbwi, insn_tlbwr, insn_wait, insn_wsbh, + insn_xor, insn_xori, insn_yield, insn_invalid /* insn_invalid must be last */ }; @@ -353,6 +353,7 @@ I_u2u1s3(_slti) I_u2u1s3(_sltiu) I_u3u1u2(_sltu) I_u2u1u3(_sra) +I_u3u2u1(_srav) I_u2u1u3(_srl) I_u3u2u1(_srlv) I_u2u1u3(_rotr) diff --git a/arch/mips/net/ebpf_jit.c b/arch/mips/net/ebpf_jit.c index aeb7b1b..b16710a 100644 --- a/arch/mips/net/ebpf_jit.c +++ b/arch/mips/net/ebpf_jit.c @@ -854,6 +854,7 @@ static int build_one_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, case BPF_ALU | BPF_MOD | BPF_X: /* ALU_REG */ case BPF_ALU | BPF_LSH | BPF_X: /* ALU_REG */ case BPF_ALU | BPF_RSH | BPF_X: /* ALU_REG */ + case BPF_ALU | BPF_ARSH | BPF_X: /* ALU_REG */ src = ebpf_to_mips_reg(ctx, insn, src_reg_no_fp); dst = ebpf_to_mips_reg(ctx, insn, dst_reg); if (src < 0 || dst < 0) @@ -913,6 +914,9 @@ static int build_one_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, case BPF_RSH: emit_instr(ctx, srlv, dst, dst, src); break; + case BPF_ARSH: + emit_instr(ctx, srav, dst, dst, src); + break; default: pr_err("ALU_REG NOT HANDLED\n"); return -EINVAL; From patchwork Wed Dec 5 18:52:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1008384 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=netronome.com 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="g/VSCVuP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4397D81pHhz9sBZ for ; Thu, 6 Dec 2018 05:53:28 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728185AbeLESxV (ORCPT ); Wed, 5 Dec 2018 13:53:21 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:40595 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727349AbeLESxT (ORCPT ); Wed, 5 Dec 2018 13:53:19 -0500 Received: by mail-wm1-f67.google.com with SMTP id q26so13953825wmf.5 for ; Wed, 05 Dec 2018 10:53:18 -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=5Yvvnv8dT2VC7tvVturrPpmwp2PQM9YZhIYQrCl231E=; b=g/VSCVuP9jCYW8+pBEgQML7k1qym8SfZ6i6OHwLi6uI/C4QNf8OjjJg0A5Pw/7pb8U MbZ3vWX7Yr4H+0ENro5xHRHhkOxC3vg72+aXPHSdmO+vybSOuP6k4XXk1AU5iAM9P06R 4xv+/Ij4EwDlGzqZ4R1dLr4SzI3qXJOnKBRZNvWLe22Qy2rven59roty7o5Wgnygfsi+ 9T7ivONsfXCtAdr/0GdipH6xZtZqqgAnpyn0ozvsaSVpT0NVW4NNowuRUCzOOGXEA9Vr pHVB7Wna/U16Ec8ft2Ve2+vx5lMgzwxUTNN7PmkioIHuuIzEJ7rykGz1hKQ9kuw20M75 Pt5Q== 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=5Yvvnv8dT2VC7tvVturrPpmwp2PQM9YZhIYQrCl231E=; b=EL8JTfzzmuirxxLaXOX65z7i5XehRpop5zB37e2sLiJLBjQfT70DBdxCMcFPzj9NY6 mL1jVpmQo61sU9IKS6ZHHZ/g0acBYCKDrKx8S66bjxRQqdhaPxRvlM7RpMfQDI3ijjJq bnHsVrJxNnjC2DYzkamkR1f/5X3P0VebbWPxzX/jERBfCmd9Py6z3RfHoqTg2fg5V6GN OF3g0VR/CzkZZ2aASwF3HbCfxkFBucezcxdKYwah9zPom1Y//uXGuSNOJ+RpZut8zXSS +66AjpyO5j+fUIsCJH9gtewzs054ZythkEZ3xtEzfcpAJLiWiCz24ggtdhFL5vio5fTI l7OQ== X-Gm-Message-State: AA+aEWbOV/s5BjuwNSh9aAmW/cciD+MTJx4gcjmRItn79sTebLO538F6 8JjpvSqnCf5LO2F4jAYWlJZ4TQ== X-Google-Smtp-Source: AFSGD/WLiAJP+S3LXat/Vc9xOJFUU7QJfsAWktGsKiRFoGJFnI8dYcdguYhPh1Raetj194IsVEd5kA== X-Received: by 2002:a1c:544f:: with SMTP id p15mr16770721wmi.37.1544035997874; Wed, 05 Dec 2018 10:53:17 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id s81sm15803251wmf.14.2018.12.05.10.53.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Dec 2018 10:53:16 -0800 (PST) From: Jiong Wang To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang , "Naveen N . Rao" , Sandipan Das Subject: [PATCH v2 bpf-next 2/7] ppc: bpf: implement jitting of BPF_ALU | BPF_ARSH | BPF_* Date: Wed, 5 Dec 2018 13:52:31 -0500 Message-Id: <1544035956-12375-3-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> References: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch implements code-gen for BPF_ALU | BPF_ARSH | BPF_*. Cc: Naveen N. Rao Cc: Sandipan Das Signed-off-by: Jiong Wang Reviewed-by: Sandipan Das --- arch/powerpc/include/asm/ppc-opcode.h | 2 ++ arch/powerpc/net/bpf_jit.h | 4 ++++ arch/powerpc/net/bpf_jit_comp64.c | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h index a6e9e31..9014592 100644 --- a/arch/powerpc/include/asm/ppc-opcode.h +++ b/arch/powerpc/include/asm/ppc-opcode.h @@ -342,6 +342,8 @@ #define PPC_INST_SLW 0x7c000030 #define PPC_INST_SLD 0x7c000036 #define PPC_INST_SRW 0x7c000430 +#define PPC_INST_SRAW 0x7c000630 +#define PPC_INST_SRAWI 0x7c000670 #define PPC_INST_SRD 0x7c000436 #define PPC_INST_SRAD 0x7c000634 #define PPC_INST_SRADI 0x7c000674 diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h index 47fc666..c2d5192 100644 --- a/arch/powerpc/net/bpf_jit.h +++ b/arch/powerpc/net/bpf_jit.h @@ -152,6 +152,10 @@ ___PPC_RS(a) | ___PPC_RB(s)) #define PPC_SRW(d, a, s) EMIT(PPC_INST_SRW | ___PPC_RA(d) | \ ___PPC_RS(a) | ___PPC_RB(s)) +#define PPC_SRAW(d, a, s) EMIT(PPC_INST_SRAW | ___PPC_RA(d) | \ + ___PPC_RS(a) | ___PPC_RB(s)) +#define PPC_SRAWI(d, a, i) EMIT(PPC_INST_SRAWI | ___PPC_RA(d) | \ + ___PPC_RS(a) | __PPC_SH(i)) #define PPC_SRD(d, a, s) EMIT(PPC_INST_SRD | ___PPC_RA(d) | \ ___PPC_RS(a) | ___PPC_RB(s)) #define PPC_SRAD(d, a, s) EMIT(PPC_INST_SRAD | ___PPC_RA(d) | \ diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c index 17482f5..7dc8187 100644 --- a/arch/powerpc/net/bpf_jit_comp64.c +++ b/arch/powerpc/net/bpf_jit_comp64.c @@ -529,9 +529,15 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, if (imm != 0) PPC_SRDI(dst_reg, dst_reg, imm); break; + case BPF_ALU | BPF_ARSH | BPF_X: /* (s32) dst >>= src */ + PPC_SRAW(dst_reg, dst_reg, src_reg); + goto bpf_alu32_trunc; case BPF_ALU64 | BPF_ARSH | BPF_X: /* (s64) dst >>= src */ PPC_SRAD(dst_reg, dst_reg, src_reg); break; + case BPF_ALU | BPF_ARSH | BPF_K: /* (s32) dst >>= imm */ + PPC_SRAWI(dst_reg, dst_reg, imm); + goto bpf_alu32_trunc; case BPF_ALU64 | BPF_ARSH | BPF_K: /* (s64) dst >>= imm */ if (imm != 0) PPC_SRADI(dst_reg, dst_reg, imm); From patchwork Wed Dec 5 18:52:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1008382 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=netronome.com 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="fFE3mFTq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4397D354d0z9s8J for ; Thu, 6 Dec 2018 05:53:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728204AbeLESxW (ORCPT ); Wed, 5 Dec 2018 13:53:22 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:36923 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727388AbeLESxU (ORCPT ); Wed, 5 Dec 2018 13:53:20 -0500 Received: by mail-wm1-f66.google.com with SMTP id g67so13963630wmd.2 for ; Wed, 05 Dec 2018 10:53:19 -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=8lw5c9AS5E0vrdYtWdtNTPMLQokU4JsziVw70MjB9wE=; b=fFE3mFTqRUW5s8/JiXmfwJCDearLCV9rfgz/qQWW/LZvO+Nlmti9dDwWAUpyhIMl2l bcEp8CHROSe7Giy5tfGJmTCq9rxud6RBvw6HkcxVxnENtcW6bz7XEyleHQeGSeIVFlmb Uewact4hTsmrY+IjTb+4MhnRxb4hZvdSvjvoiTF1jnWRytzo/xiaams/Z0Ptftfl5MG8 B0O1wTL11QUQyLCbZI7kVdcCtbmSxQcU+JrBgydcnNKtalaCnspsNyqCksLVweibmPKp s+D9IuKYVKsTyHwvN8meGpKvlEdFhkzJQvBYmS9x0/gWnYllqjyKNAP4qqii7IJfKU5r 4ELg== 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=8lw5c9AS5E0vrdYtWdtNTPMLQokU4JsziVw70MjB9wE=; b=EUgHdy16dlgdFWrDpToD4iPytvmdLck79N5d0B3g59dRRyjGtf8vqU3qgCyiQqiP/A MdPgfPd4zo52SuLg5WZirDi0XxHV0UAqQj2ZaETj6pYkn+HVkGTC9TCwRDRBffNycl8w gpXWBtJnsNJ63Lmoilmc3m6OJ/qp+EuU+ekmRT7xECepgbLmc6IsE1rMHi+A4DL1Egtv L+Wtgzsc/ag/6mt0vCmg9O1iUh4AlxJZo0iWv7y78nSOM6iuAqrGDFdTLWzoR+0ZOVou EoMv5x12LXZX3QyNJr3VYggCzJ3DzrRMJEF27FwCQYet99eXp12r8Jbo4x9sIWjwCQQ9 27qw== X-Gm-Message-State: AA+aEWYh3SQ2tvXKEEgpxG9ldVtPCrnTxHeFFdEkrbfVbBgc1OWcXAK8 5pZNP5FFNgWVvgLwXDiH3D+/CQ== X-Google-Smtp-Source: AFSGD/XKd4rmOWMyYoEl/mgPoNfUuijgHrmDXonVVKoK+n5B0NCHX/SQAWawX7E/dclcfMnLQwhmvg== X-Received: by 2002:a1c:aad2:: with SMTP id t201mr10696759wme.148.1544035998864; Wed, 05 Dec 2018 10:53:18 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id s81sm15803251wmf.14.2018.12.05.10.53.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Dec 2018 10:53:18 -0800 (PST) From: Jiong Wang To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang , Martin Schwidefsky , Heiko Carstens Subject: [PATCH v2 bpf-next 3/7] s390: bpf: implement jitting of BPF_ALU | BPF_ARSH | BPF_* Date: Wed, 5 Dec 2018 13:52:32 -0500 Message-Id: <1544035956-12375-4-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> References: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch implements code-gen for BPF_ALU | BPF_ARSH | BPF_*. Cc: Martin Schwidefsky Cc: Heiko Carstens Signed-off-by: Jiong Wang --- arch/s390/net/bpf_jit_comp.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index d7052cb..3ff758e 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c @@ -821,10 +821,22 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i /* * BPF_ARSH */ + case BPF_ALU | BPF_ARSH | BPF_X: /* ((s32) dst) >>= src */ + /* sra %dst,%dst,0(%src) */ + EMIT4_DISP(0x8a000000, dst_reg, src_reg, 0); + EMIT_ZERO(dst_reg); + break; case BPF_ALU64 | BPF_ARSH | BPF_X: /* ((s64) dst) >>= src */ /* srag %dst,%dst,0(%src) */ EMIT6_DISP_LH(0xeb000000, 0x000a, dst_reg, dst_reg, src_reg, 0); break; + case BPF_ALU | BPF_ARSH | BPF_K: /* ((s32) dst >> imm */ + if (imm == 0) + break; + /* sra %dst,imm(%r0) */ + EMIT4_DISP(0x8a000000, dst_reg, REG_0, imm); + EMIT_ZERO(dst_reg); + break; case BPF_ALU64 | BPF_ARSH | BPF_K: /* ((s64) dst) >>= imm */ if (imm == 0) break; From patchwork Wed Dec 5 18:52:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1008386 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=netronome.com 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="ot5wYiF1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4397DC4cKVz9s8J for ; Thu, 6 Dec 2018 05:53:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728316AbeLESx2 (ORCPT ); Wed, 5 Dec 2018 13:53:28 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:36924 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727763AbeLESxW (ORCPT ); Wed, 5 Dec 2018 13:53:22 -0500 Received: by mail-wm1-f65.google.com with SMTP id g67so13963700wmd.2 for ; Wed, 05 Dec 2018 10:53:21 -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=Yc7KYfzc9MM+HHPgSQUqnI7q/QdMdXT7EczW4liMJ4k=; b=ot5wYiF1AVPD76Oex5tEmGVJbbNxJca+g0KTJQwXJtSLPFWsjVxMpwdV2LdvlRZXm3 19v1ln6W5P8DwE5DFW78E00PmGHFa6RQLKPpOB9g1sZvsXw1St6TT6rDfDBGNKrNhZBB tYJzjvhXDhkCGc4OGy8dlzemNg64y2ygU/Fw7vNCLVfEUknjaWT2iQcQnLawQqrEhr9N tJiIAKAVRM44Mr23Qc7W5xDYsIEls6RCtFOz4uSqgzixFlPnUGPePZ1D4hMDrr/IyOGj LHzQ5yEaGhLuEtOjie+HxJxsa9hRb+TmYRD8nsbDJfeMgcRqsFZe3Fq5uVePrX7CsBkq G4vA== 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=Yc7KYfzc9MM+HHPgSQUqnI7q/QdMdXT7EczW4liMJ4k=; b=BADSUBnCMbEDj/QzNvnHMu/UriqCaxeVRDXNAMnnAvCJfGMMmQW15382sXvau9d1gb gesgHD0bwEASSLQ4jomegPG3UMa99KzOdyZbiYgHKqMPH8wE8idYWPMl1wtAYCjyDlag NC2GiQSVFXeUe4VSmFLsvepa3E3xPx3iiPObIyq7wOSz3WbmuPf112hWtcCLj0LjrMCz mo1vfInHziCsf/UKxzOmOApCXVjCBPiTIct9/rvqPG5bgtq0L+mliYt6iNNlApw5Qi7u CIzPGyRFL2YdzPIzOOMaEYsMeLbI5FLMRsnJQayeNoeR/xJ57cOmeWXKjEiBihy3Bzcx kc2w== X-Gm-Message-State: AA+aEWabo2MmUYfUptwBN/ZaZOl+YM5m6O7KeDzNrruJB+fbkSFsZRqr oGiL1ZcxYrvO5krxzFbbdhevN4ULAlY= X-Google-Smtp-Source: AFSGD/WgEEExydSsxGwtKbcGGX5m+g9DzRfrTwQpd8zCChkZNkDnUHmQQ8wnWCpbECnXssQMMx/pXw== X-Received: by 2002:a1c:1801:: with SMTP id 1mr18141801wmy.153.1544036000222; Wed, 05 Dec 2018 10:53:20 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id s81sm15803251wmf.14.2018.12.05.10.53.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Dec 2018 10:53:19 -0800 (PST) From: Jiong Wang To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang Subject: [PATCH v2 bpf-next 4/7] nfp: bpf: implement jitting of BPF_ALU | BPF_ARSH | BPF_* Date: Wed, 5 Dec 2018 13:52:33 -0500 Message-Id: <1544035956-12375-5-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> References: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org BPF_X support needs indirect shift mode, please see code comments for details. Reviewed-by: Jakub Kicinski Signed-off-by: Jiong Wang --- drivers/net/ethernet/netronome/nfp/bpf/jit.c | 45 ++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/jit.c b/drivers/net/ethernet/netronome/nfp/bpf/jit.c index 97d33bb..662cbc2 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/jit.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/jit.c @@ -2382,6 +2382,49 @@ static int neg_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) return 0; } +static int __ashr_imm(struct nfp_prog *nfp_prog, u8 dst, u8 shift_amt) +{ + /* Set signedness bit (MSB of result). */ + emit_alu(nfp_prog, reg_none(), reg_a(dst), ALU_OP_OR, reg_imm(0)); + emit_shf(nfp_prog, reg_both(dst), reg_none(), SHF_OP_ASHR, reg_b(dst), + SHF_SC_R_SHF, shift_amt); + wrp_immed(nfp_prog, reg_both(dst + 1), 0); + + return 0; +} + +static int ashr_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + const struct bpf_insn *insn = &meta->insn; + u64 umin, umax; + u8 dst, src; + + dst = insn->dst_reg * 2; + umin = meta->umin_src; + umax = meta->umax_src; + if (umin == umax) + return __ashr_imm(nfp_prog, dst, umin); + + src = insn->src_reg * 2; + /* NOTE: the first insn will set both indirect shift amount (source A) + * and signedness bit (MSB of result). + */ + emit_alu(nfp_prog, reg_none(), reg_a(src), ALU_OP_OR, reg_b(dst)); + emit_shf_indir(nfp_prog, reg_both(dst), reg_none(), SHF_OP_ASHR, + reg_b(dst), SHF_SC_R_SHF); + wrp_immed(nfp_prog, reg_both(dst + 1), 0); + + return 0; +} + +static int ashr_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + const struct bpf_insn *insn = &meta->insn; + u8 dst = insn->dst_reg * 2; + + return __ashr_imm(nfp_prog, dst, insn->imm); +} + static int shl_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { const struct bpf_insn *insn = &meta->insn; @@ -3286,6 +3329,8 @@ static const instr_cb_t instr_cb[256] = { [BPF_ALU | BPF_DIV | BPF_K] = div_imm, [BPF_ALU | BPF_NEG] = neg_reg, [BPF_ALU | BPF_LSH | BPF_K] = shl_imm, + [BPF_ALU | BPF_ARSH | BPF_X] = ashr_reg, + [BPF_ALU | BPF_ARSH | BPF_K] = ashr_imm, [BPF_ALU | BPF_END | BPF_X] = end_reg32, [BPF_LD | BPF_IMM | BPF_DW] = imm_ld8, [BPF_LD | BPF_ABS | BPF_B] = data_ld1, From patchwork Wed Dec 5 18:52:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1008383 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=netronome.com 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="M1QRedn7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4397D54vlWz9sB7 for ; Thu, 6 Dec 2018 05:53:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728247AbeLESxY (ORCPT ); Wed, 5 Dec 2018 13:53:24 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:52272 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728189AbeLESxX (ORCPT ); Wed, 5 Dec 2018 13:53:23 -0500 Received: by mail-wm1-f66.google.com with SMTP id r11-v6so14317697wmb.2 for ; Wed, 05 Dec 2018 10:53:22 -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=EhtucjJItGiExs/ky1g60/ddXlGQnwOUw0hE1vWL0/U=; b=M1QRedn7pWiOMxW+1EeaarVGzv7U0Ta3niY1yhHAYi3q3T/2nZfpwvelBiR1HS5Oc4 KWh5HAcz1qgO1KyC0eYIFHDhivemxOHoao7BipJLkQRlIhXIPmS8kVAokrvT3fm03FG5 e/QrBQVwFFy8/sGREaOvyTed0jtmuYbtoymtj27jJNL0TkdhdTONfSYIVBikKyrkzF0x 4nf25uK+5tcvDsYBGWJeXkKkyu4r/xiR8G+KgDyQw44Z8ZM/CKsQyEsSpkJnUVa1STzm DmMgQUo1Bs07k3/TDv/pDfQH1dXR++hl+aWJG2kB63o0ApdYmFTOnuWVCLdlFDZwiQX6 ZZBg== 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=EhtucjJItGiExs/ky1g60/ddXlGQnwOUw0hE1vWL0/U=; b=FPBuswA5EwXMgMC27sIMAesuq5/67kCnBtNGWuvE5/uTftHWeBFqMnSkJa0PcKH2R7 eTS9nRcXXnP8wBVKO0ol3EfkS8l8i2617OvPd/9hyaoV/c84v+edCbdsugMzlOMAyqFx 7I+UOH6ifkqgdrd5gvp5TXpnQiX8sXGxquFMKOA+QjrjR8kpbxtFP62zJfuGgCy/UB2b NHicWYFIxlLiVAbe/DFpA9MZ16LGspUhvlAq75Wb2V0bmy6wPbyP6gXlpa34mRokrzQ4 FVlGw4veSp5cVTA9otseyB+9S7QhDMXq4z1wIBe4k4sEGf0u45oYED5eSIRVYiQw8B8R 2ymw== X-Gm-Message-State: AA+aEWaXI0Xj/VQ814GhDudoDIoSLgp1LXss/qiWsL0H1LPIS0GjENhp zRgLhLfY7R7I73/dzDf/D28rVRenMlQ= X-Google-Smtp-Source: AFSGD/XqvTDrhWDZYSSY4Z8tiPa3LzsXyfQ6BNECyOlgiJ7rfY0Sa2QkM09yG4HvFpST/UwUlPcDWA== X-Received: by 2002:a7b:cb96:: with SMTP id m22mr17670302wmi.39.1544036001424; Wed, 05 Dec 2018 10:53:21 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id s81sm15803251wmf.14.2018.12.05.10.53.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Dec 2018 10:53:20 -0800 (PST) From: Jiong Wang To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang Subject: [PATCH v2 bpf-next 5/7] bpf: interpreter support BPF_ALU | BPF_ARSH Date: Wed, 5 Dec 2018 13:52:34 -0500 Message-Id: <1544035956-12375-6-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> References: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch implements interpreting BPF_ALU | BPF_ARSH. Do arithmetic right shift on low 32-bit sub-register, and zero the high 32 bits. Reviewed-by: Jakub Kicinski Signed-off-by: Jiong Wang --- kernel/bpf/core.c | 52 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index f93ed66..36e31d8 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -923,32 +923,34 @@ EXPORT_SYMBOL_GPL(__bpf_call_base); #define BPF_INSN_MAP(INSN_2, INSN_3) \ /* 32 bit ALU operations. */ \ /* Register based. */ \ - INSN_3(ALU, ADD, X), \ - INSN_3(ALU, SUB, X), \ - INSN_3(ALU, AND, X), \ - INSN_3(ALU, OR, X), \ - INSN_3(ALU, LSH, X), \ - INSN_3(ALU, RSH, X), \ - INSN_3(ALU, XOR, X), \ - INSN_3(ALU, MUL, X), \ - INSN_3(ALU, MOV, X), \ - INSN_3(ALU, DIV, X), \ - INSN_3(ALU, MOD, X), \ + INSN_3(ALU, ADD, X), \ + INSN_3(ALU, SUB, X), \ + INSN_3(ALU, AND, X), \ + INSN_3(ALU, OR, X), \ + INSN_3(ALU, LSH, X), \ + INSN_3(ALU, RSH, X), \ + INSN_3(ALU, XOR, X), \ + INSN_3(ALU, MUL, X), \ + INSN_3(ALU, MOV, X), \ + INSN_3(ALU, ARSH, X), \ + INSN_3(ALU, DIV, X), \ + INSN_3(ALU, MOD, X), \ INSN_2(ALU, NEG), \ INSN_3(ALU, END, TO_BE), \ INSN_3(ALU, END, TO_LE), \ /* Immediate based. */ \ - INSN_3(ALU, ADD, K), \ - INSN_3(ALU, SUB, K), \ - INSN_3(ALU, AND, K), \ - INSN_3(ALU, OR, K), \ - INSN_3(ALU, LSH, K), \ - INSN_3(ALU, RSH, K), \ - INSN_3(ALU, XOR, K), \ - INSN_3(ALU, MUL, K), \ - INSN_3(ALU, MOV, K), \ - INSN_3(ALU, DIV, K), \ - INSN_3(ALU, MOD, K), \ + INSN_3(ALU, ADD, K), \ + INSN_3(ALU, SUB, K), \ + INSN_3(ALU, AND, K), \ + INSN_3(ALU, OR, K), \ + INSN_3(ALU, LSH, K), \ + INSN_3(ALU, RSH, K), \ + INSN_3(ALU, XOR, K), \ + INSN_3(ALU, MUL, K), \ + INSN_3(ALU, MOV, K), \ + INSN_3(ALU, ARSH, K), \ + INSN_3(ALU, DIV, K), \ + INSN_3(ALU, MOD, K), \ /* 64 bit ALU operations. */ \ /* Register based. */ \ INSN_3(ALU64, ADD, X), \ @@ -1127,6 +1129,12 @@ static u64 ___bpf_prog_run(u64 *regs, const struct bpf_insn *insn, u64 *stack) DST = (u64) (u32) insn[0].imm | ((u64) (u32) insn[1].imm) << 32; insn++; CONT; + ALU_ARSH_X: + DST = (u64) (u32) ((*(s32 *) &DST) >> SRC); + CONT; + ALU_ARSH_K: + DST = (u64) (u32) ((*(s32 *) &DST) >> IMM); + CONT; ALU64_ARSH_X: (*(s64 *) &DST) >>= SRC; CONT; From patchwork Wed Dec 5 18:52:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1008385 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=netronome.com 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="sxE1b9Qz"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4397D93XM7z9sB7 for ; Thu, 6 Dec 2018 05:53:29 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728326AbeLESx2 (ORCPT ); Wed, 5 Dec 2018 13:53:28 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:35355 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728234AbeLESxZ (ORCPT ); Wed, 5 Dec 2018 13:53:25 -0500 Received: by mail-wm1-f67.google.com with SMTP id c126so13974606wmh.0 for ; Wed, 05 Dec 2018 10:53:24 -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=92E+WRz8qUTE4D7N+jodT02USkrEOWszEd+0D0yHn6s=; b=sxE1b9QzgYRjK34Mie30A3r++z+voG3CGbpRZ/tLw7ZqupzTRC6sNmiwssjiU7BL5b 3XrWybBLBj39XAiTcFRwMaUYhoBEfv6JrkOv6R2xxOzIGel6cYPXXNTfMfBRkKdc7WXS Ap8E+wvomNDhGWLb4hoz9OitkR/zeTCCCH/bc5vJeGbcashL/1fuVeDLMiK8YV6vhVzr eAr6j1CeXLEtj4+wan7uFpJmOVxNTLGqTkNyvk4tcXQdKhYrEwSvB6HE0iDBLbA+/krx M4ff/PwicPhcXHuMB93yohO5nKwhSU7ZzQ7cKUwA9yqQuGS4LxjmyrM/lqAr+Httb85U uqFg== 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=92E+WRz8qUTE4D7N+jodT02USkrEOWszEd+0D0yHn6s=; b=ozPRQWX3FuL/U+CVsjMsh1GWqFHnZv7T4ACl09AoU2bd38C4Kb/6JOZR5OKZGPUlks lKvsX8Cmj+Rfy7SWEHav8bgvYu4tsdix/uZ79PrNdvf635VwaoHyJzXtJ0ZiXDxwytKa v/usA4KbAaG0X8w/73Vd5iOar0pWkJWliwUecxDgJxepqHc2aS7crwzxLaNPsaQtKC3J JUCSTSLjsrkVR5MyJ/EDPUUvIxqDSZQS/3YZynSIf2rfjP+n3+UkgZyX8dvdgO8m9RqO 8FDBtEHe5MtvbYvPvh7e3tT0LFksADtGD+Hpn+2ZPg4Kwswa1Z8k+pv30SzAqQRRDu2j +D5A== X-Gm-Message-State: AA+aEWakHgN1Vl1zli/2Z8T6ddrD/RS0Zfe5NqJcuRWidGLulBBzSyTb ggc/0gOIrBOSssfXPRoxhWE4UA== X-Google-Smtp-Source: AFSGD/XZIsa8MuXRDOKUWqks/mp3vEITWbafoKYYrWqHrsKYDEIY6xh5nf2VnjPsaARIPGSepYdz5Q== X-Received: by 2002:a1c:8fc2:: with SMTP id r185mr16804580wmd.54.1544036002506; Wed, 05 Dec 2018 10:53:22 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id s81sm15803251wmf.14.2018.12.05.10.53.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Dec 2018 10:53:21 -0800 (PST) From: Jiong Wang To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang Subject: [PATCH v2 bpf-next 6/7] bpf: verifier remove the rejection on BPF_ALU | BPF_ARSH Date: Wed, 5 Dec 2018 13:52:35 -0500 Message-Id: <1544035956-12375-7-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> References: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch remove the rejection on BPF_ALU | BPF_ARSH as we have supported them on interpreter and all JIT back-ends Reviewed-by: Jakub Kicinski Signed-off-by: Jiong Wang --- kernel/bpf/verifier.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index ce8a1c3..8ed868e 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -3649,11 +3649,6 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn) return -EINVAL; } - if (opcode == BPF_ARSH && BPF_CLASS(insn->code) != BPF_ALU64) { - verbose(env, "BPF_ARSH not supported for 32 bit ALU\n"); - return -EINVAL; - } - if ((opcode == BPF_LSH || opcode == BPF_RSH || opcode == BPF_ARSH) && BPF_SRC(insn->code) == BPF_K) { int size = BPF_CLASS(insn->code) == BPF_ALU64 ? 64 : 32; From patchwork Wed Dec 5 18:52:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1008387 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=netronome.com 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="FJ9dhZW+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4397DD4KWkz9sB7 for ; Thu, 6 Dec 2018 05:53:32 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728276AbeLESx1 (ORCPT ); Wed, 5 Dec 2018 13:53:27 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:38408 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728245AbeLESxZ (ORCPT ); Wed, 5 Dec 2018 13:53:25 -0500 Received: by mail-wm1-f66.google.com with SMTP id m22so14059760wml.3 for ; Wed, 05 Dec 2018 10:53:24 -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=SaycexPksBnZAfn98yIOCyo3TL3WUS7kgUugcB+wf6w=; b=FJ9dhZW+cIZ4B8EgcWTCFjIx2opY+k7+9UuSLfFMUQszGwCFcl/Vayye1b1mKj1+g4 wKp7EpJuHcoOu7z2KTVizkSWvytrEdub+FW3h71xGF204p4xxRbWy6lLx4Rk4HHJJufu UkecmP8Hf9tUWgdqRK8iWOtQIq13cdplq7VraPUZkDH/Mv7zkj+uwB62TQz7zTTW5V0P kD0T03CL7Rd0HNHabxIoHsdu9qc2LJhwk1+33bEKYmywvyRnkMwaaQAup4R8+l/E3IER WXMDbGDUEM26JMfvltAhwttNhmIU3IF/8az0APKmhCedLdUCnlVCBj+3tTYbo79T87Ku PjTQ== 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=SaycexPksBnZAfn98yIOCyo3TL3WUS7kgUugcB+wf6w=; b=YFqTVoRVM4VDJxmNMadsokx0AXbTi1ccq+wmL42mnAfHF8IAq23dD8yrvZIWB4Ut2k uopd+yQ60SJjEDmjFS7f9H95rDvSjU36XNIJBk5+VO0ETTkhrOU7SKUTwre1YVglpUQI R2WS2O4hAw2wqkvbgl1P0PQSncCoi/1fk0q3+AsmqceeB9Btq/9qRJtm0JWJQZVWFjjd JCP+Xmp/xnl7N+716QiJJ7iTNQotI9FZENUXEPqtMrnFToX/0yinDE7nlawP7MGAItKq Yc9ZZDZQGWkBUBbY1VMV4vp6dAGhZNSCFjNyNYKYnf16QIuiWy8KJ/bHqicKyB+w+4Jl AgOg== X-Gm-Message-State: AA+aEWaj8jaV8rfa7j9pxwVusFa6IGpDGX52MpCN3GXD4cG7yLgjSQHn bjeIZjtziy3RvwXefCI4yRBCdlXtryY= X-Google-Smtp-Source: AFSGD/V1qGQYMwNY3nWnT/kRuyW6SEKamKRGk+fM0gZxESHP9Uu8OxhTD3mLAmWK2wLJ/V1v5iW5nA== X-Received: by 2002:a1c:1688:: with SMTP id 130mr13377030wmw.86.1544036003493; Wed, 05 Dec 2018 10:53:23 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id s81sm15803251wmf.14.2018.12.05.10.53.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Dec 2018 10:53:22 -0800 (PST) From: Jiong Wang To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang Subject: [PATCH v2 bpf-next 7/7] selftests: bpf: update testcases for BPF_ALU | BPF_ARSH Date: Wed, 5 Dec 2018 13:52:36 -0500 Message-Id: <1544035956-12375-8-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> References: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org "arsh32 on imm" and "arsh32 on reg" now are accepted. Also added two new testcases to make sure arsh32 won't be treated as arsh64 during interpretation or JIT code-gen for which case the high bits will be moved into low halve that the testcases could catch them. Reviewed-by: Jakub Kicinski Signed-off-by: Jiong Wang --- tools/testing/selftests/bpf/test_verifier.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index 18d0b7f..e7f1bc7 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c @@ -721,8 +721,18 @@ static struct bpf_test tests[] = { BPF_ALU32_IMM(BPF_ARSH, BPF_REG_0, 5), BPF_EXIT_INSN(), }, - .result = REJECT, - .errstr = "unknown opcode c4", + .result = ACCEPT, + .retval = 0, + }, + { + "arsh32 on imm 2", + .insns = { + BPF_LD_IMM64(BPF_REG_0, 0x1122334485667788), + BPF_ALU32_IMM(BPF_ARSH, BPF_REG_0, 7), + BPF_EXIT_INSN(), + }, + .result = ACCEPT, + .retval = -16069393, }, { "arsh32 on reg", @@ -732,8 +742,19 @@ static struct bpf_test tests[] = { BPF_ALU32_REG(BPF_ARSH, BPF_REG_0, BPF_REG_1), BPF_EXIT_INSN(), }, - .result = REJECT, - .errstr = "unknown opcode cc", + .result = ACCEPT, + .retval = 0, + }, + { + "arsh32 on reg 2", + .insns = { + BPF_LD_IMM64(BPF_REG_0, 0xffff55667788), + BPF_MOV64_IMM(BPF_REG_1, 15), + BPF_ALU32_REG(BPF_ARSH, BPF_REG_0, BPF_REG_1), + BPF_EXIT_INSN(), + }, + .result = ACCEPT, + .retval = 43724, }, { "arsh64 on imm",