From patchwork Fri Feb 22 22:36:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1047157 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="RSJpiB7L"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 445mQs3HQ5z9sBR for ; Sat, 23 Feb 2019 09:36:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726542AbfBVWgU (ORCPT ); Fri, 22 Feb 2019 17:36:20 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:54864 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725774AbfBVWgS (ORCPT ); Fri, 22 Feb 2019 17:36:18 -0500 Received: by mail-wm1-f67.google.com with SMTP id a62so3303535wmh.4 for ; Fri, 22 Feb 2019 14:36: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=K2jNKoa7SmWGZtTEP38KBVv2vl7/ahSiBvUd5qtPPVg=; b=RSJpiB7LachF368qN9Qk2WTJOqAYY9kEGUkmdAOcAX/2Az/prx3XllPSSyriZbt4I+ 4biTz4iNCpYdoyNP5uCVyxMv7mX0nZ+YtNuOthc1pw4O/uZUFSTUAeT2ryHNzrFmfZId 5EUMeIO7U9yAl2mPS/l3DenhQzItm6aUWcAZElpdxEzCfq6lx6gLp9zbwUQoovEu++56 3MVcLMBXpFL03ejY/8561AWc45V417S5BvciahHL/WCrZ+EXbXx8BYIRByBA1JOlfUXo x7WLK6gse2ErNgKnbz993pwFpwpv1QSAXyrvZ/m4mZzWPxUMNJtQnsvWsZtICu4Tm/sL 0Fiw== 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=K2jNKoa7SmWGZtTEP38KBVv2vl7/ahSiBvUd5qtPPVg=; b=BNtgRmM4xr5ifreyNx5zICWmtGTiXz9TlNxKNLBktHBbuB3cxjjLjfjP6bQutvUmv3 mdolcRXqfJBEvZ4XOK4x3mTzWIgA8wrFmun7MyQipAmcrrwZ8Pb5LBipItPKgXzcEcXG hYuBvDgWahD/uR5ZsNez7ICr7DE+5s18rSh0scEMZdiqFlESZ2Omj+rS19onGHSm8dx4 0h0YrfbDw7S2GWyt4ljeFJmmFODzRJEMerTa9W6LBOeN9I08LnBn1kG+NMH51XvKyKQS tx+pDQ1ALpwI/JLhBzZBRoV3BjnzdPPzjpzPDhoUQGoUIlUmW0xdCXO5cusb7+M1q7ih J2Vw== X-Gm-Message-State: AHQUAuamg4cM2MsKStRlNf0WYd6o6eAgGGOlyV3Z0aeG1rwvnoJv89xc ovrWr0Id9i7B6dNiILmhFMGy9Q== X-Google-Smtp-Source: AHgI3IaeesNDUhkxE0k/fc5rNk9GiYwLS0t6qiOCq+ChHIS5jAJZSM4ezBiqD88R94ms5QxCRo0Aww== X-Received: by 2002:a7b:c14f:: with SMTP id z15mr3924709wmi.3.1550874976546; Fri, 22 Feb 2019 14:36:16 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id m15sm1964975wrx.30.2019.02.22.14.36.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 22 Feb 2019 14:36:15 -0800 (PST) From: Jiong Wang To: alexei.starovoitov@gmail.com, daniel@iogearbox.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang Subject: [PATCH bpf 2/2] nfp: bpf: fix ALU32 high bits clearance bug Date: Fri, 22 Feb 2019 22:36:04 +0000 Message-Id: <1550874964-16769-3-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550874964-16769-1-git-send-email-jiong.wang@netronome.com> References: <1550874964-16769-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 NFP BPF JIT compiler is doing a couple of small optimizations when jitting ALU imm instructions, some of these optimizations could save code-gen, for example: A & -1 = A A | 0 = A A ^ 0 = A However, for ALU32, high 32-bit of the 64-bit register should still be cleared according to ISA semantics. Fixes: cd7df56ed3e6 ("nfp: add BPF to NFP code translator") Reviewed-by: Jakub Kicinski Signed-off-by: Jiong Wang --- drivers/net/ethernet/netronome/nfp/bpf/jit.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/jit.c b/drivers/net/ethernet/netronome/nfp/bpf/jit.c index a096965..0a868c8 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/jit.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/jit.c @@ -1291,15 +1291,10 @@ wrp_alu64_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, static int wrp_alu32_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, - enum alu_op alu_op, bool skip) + enum alu_op alu_op) { const struct bpf_insn *insn = &meta->insn; - if (skip) { - meta->skip = true; - return 0; - } - wrp_alu_imm(nfp_prog, insn->dst_reg * 2, alu_op, insn->imm); wrp_immed(nfp_prog, reg_both(insn->dst_reg * 2 + 1), 0); @@ -2309,7 +2304,7 @@ static int xor_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int xor_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_XOR, !meta->insn.imm); + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_XOR); } static int and_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) @@ -2319,7 +2314,7 @@ static int and_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int and_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_AND, !~meta->insn.imm); + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_AND); } static int or_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) @@ -2329,7 +2324,7 @@ static int or_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int or_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_OR, !meta->insn.imm); + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_OR); } static int add_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) @@ -2339,7 +2334,7 @@ static int add_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int add_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) { - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_ADD, !meta->insn.imm); + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_ADD); } static int sub_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) @@ -2349,7 +2344,7 @@ static int sub_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) 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); + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_SUB); } static int mul_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)