From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EAC2AC282C3 for ; Thu, 24 Jan 2019 09:53:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BBA572085A for ; Thu, 24 Jan 2019 09:53:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="pQUrTJX5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727535AbfAXJxH (ORCPT ); Thu, 24 Jan 2019 04:53:07 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:34309 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727299AbfAXJxH (ORCPT ); Thu, 24 Jan 2019 04:53:07 -0500 Received: by mail-wr1-f68.google.com with SMTP id f7so5769393wrp.1 for ; Thu, 24 Jan 2019 01:53:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version; bh=ZHO2wYVBPbAWFKzrPKZhus/MgYttTUaT3QisENtfQLI=; b=pQUrTJX5I64TVZ1BVTP1P3bQRO8cLmdfz2z139KHEjIu3FYmZURbxMEl9TnfFERsX4 OJoS9eLHICYgqfVF66ULg34EAxXED71yzY0nyu2PDsxAoI05i2lckoQaNcqe43kMgDhb 170dNvV8JZ8Ofmy78HF173MDMLdUyCwNyf+U5ExCmFcepx1DupGIzt2dsmdQvLTuNRuk uy1tNhYJ3W7UTgoiYFRiYvRkAk8nBLn1Q8R8pvinN3wbfbfPFEeIIP6VpGPLlqDnqUFg 10TB09PLSv7zbraLYsiCPef6mehyKeT6d9PDNo+EYYjk+Gja/fYacAsKH4ATrlGngDFZ 9LOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version; bh=ZHO2wYVBPbAWFKzrPKZhus/MgYttTUaT3QisENtfQLI=; b=pjUM4UTBOALRt2+fDQuIYcpj8bXTcMnhBlDm00gLK/zBB5rhz+6hpPkAdSjMPUYQFl ZcGWsJrQWKt1xNjp5fXMHoqSd4jmWhDNw5nM8LJrh7s5pBKmZUjkVr81/j6Ng4Q/gwsG yyAn1Gg8GQoNZxQ5qPqgtGWyK9FaOhc3oaMf/s/O4jNqSWbmdUNH3xfY/yiLptYnG/12 7HnYAVfRBq1W0X5S4X3CTo2thLy4NbTjGsBOfM4/Ep14vbBTWR4h+xSUnw7bw8tRX7tF 33sqi3dohQ2YGqfnyqgg7raY3RvVdQmSujH/QT02u7EcA97JX591f/JiRtA9LiufKs+4 IKWw== X-Gm-Message-State: AJcUukdHZCRt4AD07Jb+1HZ6TKSDbIZxC8QPe7dLiJjctfyKRNSFE0Yj a9c41+xrZaYFCFbSonXb4ANJ2g== X-Google-Smtp-Source: ALg8bN48NQpTQv5/7iTwEsUqHFNtuEfBWodWql38ar//qsvySZUSOunFu+cnJ1gN+d5VKbMOpuYTvA== X-Received: by 2002:adf:d0c9:: with SMTP id z9mr6149813wrh.317.1548323585095; Thu, 24 Jan 2019 01:53:05 -0800 (PST) Received: from LAPTOP-V3S7NLPL ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id x1sm17899012wru.34.2019.01.24.01.53.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 24 Jan 2019 01:53:04 -0800 (PST) References: <1548076553-31268-1-git-send-email-jiong.wang@netronome.com> <1548076553-31268-14-git-send-email-jiong.wang@netronome.com> User-agent: mu4e 0.9.18; emacs 25.2.2 From: Jiong Wang To: Sandipan Das Cc: Jiong Wang , ast@kernel.org, daniel@iogearbox.net, netdev@vger.kernel.org, oss-drivers@netronome.com, "Naveen N . Rao" Subject: Re: [PATCH bpf-next v2 13/16] ppc: bpf: implement jitting of JMP32 In-reply-to: Date: Thu, 24 Jan 2019 09:53:02 +0000 Message-ID: <87bm46z8jl.fsf@netronome.com> MIME-Version: 1.0 Content-Type: text/plain Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Sandipan Das writes: > Hi Jiong, > > On 21/01/19 6:45 PM, Jiong Wang wrote: >> This patch implements code-gen for new JMP32 instructions on ppc. >> >> For JMP32 | JSET, instruction encoding for PPC_RLWINM_DOT is added to check >> the result of ANDing low 32-bit of operands. >> >> Cc: Naveen N. Rao >> Cc: Sandipan Das >> Signed-off-by: Jiong Wang >> --- >> arch/powerpc/include/asm/ppc-opcode.h | 1 + >> arch/powerpc/net/bpf_jit.h | 4 ++ >> arch/powerpc/net/bpf_jit_comp64.c | 98 ++++++++++++++++++++++++++++++----- >> 3 files changed, 89 insertions(+), 14 deletions(-) >> [...] > > I ran the verifier selftests on a ppc64 test system and found that the jmp32 tests > were failing because the instructions were not being decoded by the JIT compiler. > The codegen logic looks good to me and the tests passed after I fixed the decoding > logic. Here are the changes that I had to make: Ah, I missed the outer layer decoding logic. Thanks for the review, test and fix. Will integrate the following in v3. Regards, Jiong > > diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c > index 2e40c2b251ba..15bba765fa79 100644 > --- a/arch/powerpc/net/bpf_jit_comp64.c > +++ b/arch/powerpc/net/bpf_jit_comp64.c > @@ -768,36 +768,58 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, > case BPF_JMP | BPF_JGT | BPF_X: > case BPF_JMP | BPF_JSGT | BPF_K: > case BPF_JMP | BPF_JSGT | BPF_X: > + case BPF_JMP32 | BPF_JGT | BPF_K: > + case BPF_JMP32 | BPF_JGT | BPF_X: > + case BPF_JMP32 | BPF_JSGT | BPF_K: > + case BPF_JMP32 | BPF_JSGT | BPF_X: > true_cond = COND_GT; > goto cond_branch; > case BPF_JMP | BPF_JLT | BPF_K: > case BPF_JMP | BPF_JLT | BPF_X: > case BPF_JMP | BPF_JSLT | BPF_K: > case BPF_JMP | BPF_JSLT | BPF_X: > + case BPF_JMP32 | BPF_JLT | BPF_K: > + case BPF_JMP32 | BPF_JLT | BPF_X: > + case BPF_JMP32 | BPF_JSLT | BPF_K: > + case BPF_JMP32 | BPF_JSLT | BPF_X: > true_cond = COND_LT; > goto cond_branch; > case BPF_JMP | BPF_JGE | BPF_K: > case BPF_JMP | BPF_JGE | BPF_X: > case BPF_JMP | BPF_JSGE | BPF_K: > case BPF_JMP | BPF_JSGE | BPF_X: > + case BPF_JMP32 | BPF_JGE | BPF_K: > + case BPF_JMP32 | BPF_JGE | BPF_X: > + case BPF_JMP32 | BPF_JSGE | BPF_K: > + case BPF_JMP32 | BPF_JSGE | BPF_X: > true_cond = COND_GE; > goto cond_branch; > case BPF_JMP | BPF_JLE | BPF_K: > case BPF_JMP | BPF_JLE | BPF_X: > case BPF_JMP | BPF_JSLE | BPF_K: > case BPF_JMP | BPF_JSLE | BPF_X: > + case BPF_JMP32 | BPF_JLE | BPF_K: > + case BPF_JMP32 | BPF_JLE | BPF_X: > + case BPF_JMP32 | BPF_JSLE | BPF_K: > + case BPF_JMP32 | BPF_JSLE | BPF_X: > true_cond = COND_LE; > goto cond_branch; > case BPF_JMP | BPF_JEQ | BPF_K: > case BPF_JMP | BPF_JEQ | BPF_X: > + case BPF_JMP32 | BPF_JEQ | BPF_K: > + case BPF_JMP32 | BPF_JEQ | BPF_X: > true_cond = COND_EQ; > goto cond_branch; > case BPF_JMP | BPF_JNE | BPF_K: > case BPF_JMP | BPF_JNE | BPF_X: > + case BPF_JMP32 | BPF_JNE | BPF_K: > + case BPF_JMP32 | BPF_JNE | BPF_X: > true_cond = COND_NE; > goto cond_branch; > case BPF_JMP | BPF_JSET | BPF_K: > case BPF_JMP | BPF_JSET | BPF_X: > + case BPF_JMP32 | BPF_JSET | BPF_K: > + case BPF_JMP32 | BPF_JSET | BPF_X: > true_cond = COND_NE; > /* Fall through */