From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Borkmann Subject: Re: [PATCH bpf-next 0/3] nfp: bpf: complete shift supports on NFP JIT Date: Fri, 18 May 2018 22:32:39 +0200 Message-ID: <626e7efe-ee68-684b-c59a-32c7cdc799ee@iogearbox.net> References: <20180518191211.18670-1-jakub.kicinski@netronome.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: oss-drivers@netronome.com, netdev@vger.kernel.org To: Jakub Kicinski , alexei.starovoitov@gmail.com Return-path: Received: from www62.your-server.de ([213.133.104.62]:34198 "EHLO www62.your-server.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751696AbeERUcl (ORCPT ); Fri, 18 May 2018 16:32:41 -0400 In-Reply-To: <20180518191211.18670-1-jakub.kicinski@netronome.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 05/18/2018 09:12 PM, Jakub Kicinski wrote: > Jiong says: > > NFP eBPF JIT is missing logic indirect shifts (both left and right) and > arithmetic right shift (both indirect shift and shift by constant). > > This patch adds support for them. > > For indirect shifts, shift amount is not specified as constant, NFP needs > to get the shift amount through the low 5 bits of source A operand in > PREV_ALU, therefore extra instructions are needed compared with shifts by > constants. > > Because NFP is 32-bit, so we are using register pair for 64-bit shifts and > therefore would need different instruction sequences depending on whether > shift amount is less than 32 or not. > > NFP branch-on-bit-test instruction emitter is added by this patch set and > is used for efficient runtime check on shift amount. We'd think the shift > amount is less than 32 if bit 5 is clear and greater or equal then 32 > otherwise. Shift amount is greater than or equal to 64 will result in > undefined behavior. > > This patch also use range info to avoid generating unnecessary runtime code > if we are certain shift amount is less than 32 or not. > > Jiong Wang (3): > nfp: bpf: support logic indirect shifts (BPF_[L|R]SH | BPF_X) > nfp: bpf: support arithmetic right shift by constant (BPF_ARSH | > BPF_K) > nfp: bpf: support arithmetic indirect right shift (BPF_ARSH | BPF_X) > > drivers/net/ethernet/netronome/nfp/bpf/jit.c | 410 ++++++++++++++++-- > drivers/net/ethernet/netronome/nfp/bpf/main.h | 28 ++ > .../net/ethernet/netronome/nfp/bpf/offload.c | 2 + > .../net/ethernet/netronome/nfp/bpf/verifier.c | 8 + > drivers/net/ethernet/netronome/nfp/nfp_asm.h | 18 +- > 5 files changed, 435 insertions(+), 31 deletions(-) Applied to bpf-next, thanks guys!