Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp591125img; Fri, 22 Mar 2019 04:42:39 -0700 (PDT) X-Google-Smtp-Source: APXvYqwqNOTBh9p6zYryrWcKbQAXdxjNrkeOHO9aOddKtRZKXy00i4sQVX3UOqa1PedKHyNcQ1zx X-Received: by 2002:aa7:8144:: with SMTP id d4mr6284504pfn.88.1553254959621; Fri, 22 Mar 2019 04:42:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553254959; cv=none; d=google.com; s=arc-20160816; b=siDOltvr3I2Names8ExZn+pxOztRKyBCDzp+liuVpqrBgOQAzBDEuds8air7M6OZkS LvTT9Caf9bDdg5BKyWhFRZlIJFQMyThHxzTeWSho+PVrNd2NA6X7HeLpcIdQsv5xBKfi Z3LyDfvoLJFhd8AnFU3jQEdz6KEIhLtaC539UpSQxSEKlacnYRdTk31XF+Fv6dXD4YCW hNOuZFFg6vNvO5+NsPg1JIoBgTKOSDWef90cAN9Zekkl3Qn2FMCp3X9NA2OQy582cTn0 7Psnsxof73agR90goxUtMLzLyjvUfRAjF23zBha3ntHQeJy56JDD/ANgEVHXPTdQn2g5 HvfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=T2BxVU1ljF8b7zOMCe0EGY/jIgrtwIiHYLK/72ukWOk=; b=p0hNQ5RZldqR+2xd/i50Du7E7j8bnpF8eo5WN/LydyJgJPeojIyITTSLsQkEAb5ttm bbjs32P56iIx8It14+SCl7vz1e80TWEPMKkEAsOsSTb3YDwE6aFbQpleUOuAWOjM+5OC aSkvFei2WFMR4TfABBXNV4uogcqQw5meM4lCWsa9xsuW3Y7ID5CiitLlBwFaf2HbUGhw QvalnCUxiCEwtHzEVeT+Qnx5ABfSvBauSi9j8uhi3xQbyOFH98p/5XYAGJnZ4Nfe7An2 NUMdXDzNdzrM+7iCoYMK+Y6hYzxYT6uUQU+m1yzNgmPObhmtcW8inZPIRNaLX9te9fRW Znbw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oibEVx11; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h127si6709102pfb.213.2019.03.22.04.42.24; Fri, 22 Mar 2019 04:42:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oibEVx11; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731259AbfCVLls (ORCPT + 99 others); Fri, 22 Mar 2019 07:41:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:43976 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728784AbfCVLlr (ORCPT ); Fri, 22 Mar 2019 07:41:47 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9A6772082C; Fri, 22 Mar 2019 11:41:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553254906; bh=kbo0AD/3g4KgxzHrTX6zwZmqMTstdxbee2QkoITUlmM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oibEVx11UdKDnuF6h7wZCtQdDxsCKahcX4YkMRl17cSFofASpbo4nEcn1ZU4Wntqx GnmbQ5+nprGV3QIiMMfcuPkhmXyCLxMdtX6aL7XIRcclE4XQtr6BSMSm8QehnWlJlC hlDCodbzwJofMagCWkmoWclHkUT2IEOF6Q+MGTzQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jakub Kicinski , Jiong Wang , Daniel Borkmann , Sasha Levin Subject: [PATCH 4.9 039/118] nfp: bpf: fix ALU32 high bits clearance bug Date: Fri, 22 Mar 2019 12:15:11 +0100 Message-Id: <20190322111218.971637803@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111215.873964544@linuxfoundation.org> References: <20190322111215.873964544@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit f036ebd9bfbe1e91a3d855e85e05fc5ff156b641 ] 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 Signed-off-by: Daniel Borkmann Signed-off-by: Sasha Levin --- .../net/ethernet/netronome/nfp/nfp_bpf_jit.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c b/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c index 6bfcd6eb74ca..73087770d72f 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c @@ -756,15 +756,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); @@ -1017,7 +1012,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) @@ -1027,7 +1022,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) @@ -1037,7 +1032,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) @@ -1047,7 +1042,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) @@ -1057,7 +1052,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 shl_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) -- 2.19.1