Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp1658628pxy; Mon, 2 Aug 2021 07:14:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyVmfeKjMx2txas9PWUxOGbWG+Qzmgk/ezk6xIsMFEUK5sGe9VZxY6l4Q56MlbKnIFWypPJ X-Received: by 2002:a02:b058:: with SMTP id q24mr14699226jah.88.1627913699356; Mon, 02 Aug 2021 07:14:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627913699; cv=none; d=google.com; s=arc-20160816; b=Y2qF39xlNQ0qrucRXhC6tGXO6VLwjTA7RCFPEI+8VmciUkAzGWI9zGv/XE4ifcttvr vPCCvooeNauk5eFWgHBQpm1qUAqEhvNrknNqp7Ar2H0NkgEA0ryfg9E4nbZjDbuWKCY5 NbqTLYqvFVcA5zS481QkCyChm8iVix6hE86g+JxQ6nTbCUDzNvSu3Lz1pfqeCTeF3PwA UQU0APkM6V5QFALxjtI0GdOn36BLNxh5bSYdu0vOlqO374gCQvts45QAd0S+VNYHWvwS hJyMu2zN2JQQSk9RMiUM17Qe0oNFN4VPECWeI8ZzrHnioxtpX+RVq5B/qO/ndPfCFjZz o4Lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=MzP1T7QBDDE3UY0e7OyixNLx2POZqnPsJqZWuWuARzE=; b=xVa9dvVS6ox/XHTlk3BaWCaKVLzc5Q69T9DCKyghNOmMxPTyNEJmhz3RqJb+pKEGCX XrbeDwXX3rDgfj39Mu+HCWpiSLyk8tJ+JT77XgPz1iBSt1BJnxdfFZhFiFhJZRMaqHeN WktSedftPT9HkC81Y+wk9XGWqr6r50PtdUikVur4tRwQqT6hr6w7lHOK4cxC4/63j2P2 mTsGMiEPy4Xi2yHR1ZKcLGPt67Kwl+0N3dduyn5kC/yA+BhiLG2jPyO2YURlz1+heMNd LaL/IiY97hTmJg3shGPXNw4IwfgG0ZTz+UcVrbisqP5VLEeV+QUn9UH0Yu4oTWd70kgS 43WA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=zfWDPfod; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b16si12329003ior.73.2021.08.02.07.14.46; Mon, 02 Aug 2021 07:14:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=zfWDPfod; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236893AbhHBONr (ORCPT + 99 others); Mon, 2 Aug 2021 10:13:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:48778 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235452AbhHBODI (ORCPT ); Mon, 2 Aug 2021 10:03:08 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id E57D861208; Mon, 2 Aug 2021 13:57:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627912629; bh=+gSNiW5h03Ed1RDtqAHCy6UznWIMDeYH1bhgBXKIZbc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zfWDPfodGQDlGctGERBvkthbisCLaM4C9dwJBWpA/Lbvty0RrOJmafzpsB/u+T79r 3iQiaD2Zz9RDbqwVRyaFA/74RVsL1VXz1eiD6Tjj3pZ6kxLidCLTpDWlENxYT+ZXz8 kaBNLG+aWTbdIgJXap+Dp8mox9s1pXonj1EUBQ3I= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Tariq Toukan , Moshe Shemesh , Saeed Mahameed , Sasha Levin Subject: [PATCH 5.13 079/104] net/mlx5e: RX, Avoid possible data corruption when relaxed ordering and LRO combined Date: Mon, 2 Aug 2021 15:45:16 +0200 Message-Id: <20210802134346.612168034@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210802134344.028226640@linuxfoundation.org> References: <20210802134344.028226640@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tariq Toukan [ Upstream commit e2351e517068718724f1d3b4010e2a41ec91fa76 ] When HW aggregates packets for an LRO session, it writes the payload of two consecutive packets of a flow contiguously, so that they usually share a cacheline. The first byte of a packet's payload is written immediately after the last byte of the preceding packet. In this flow, there are two consecutive write requests to the shared cacheline: 1. Regular write for the earlier packet. 2. Read-modify-write for the following packet. In case of relaxed-ordering on, these two writes might be re-ordered. Using the end padding optimization (to avoid partial write for the last cacheline of a packet) becomes problematic if the two writes occur out-of-order, as the padding would overwrite payload that belongs to the following packet, causing data corruption. Avoid this by disabling the end padding optimization when both LRO and relaxed-ordering are enabled. Fixes: 17347d5430c4 ("net/mlx5e: Add support for PCI relaxed ordering") Signed-off-by: Tariq Toukan Reviewed-by: Moshe Shemesh Signed-off-by: Saeed Mahameed Signed-off-by: Sasha Levin --- drivers/net/ethernet/mellanox/mlx5/core/en/params.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/params.c b/drivers/net/ethernet/mellanox/mlx5/core/en/params.c index f410c1268422..133eb13facfd 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/params.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/params.c @@ -471,6 +471,15 @@ static void mlx5e_build_rx_cq_param(struct mlx5_core_dev *mdev, param->cq_period_mode = params->rx_cq_moderation.cq_period_mode; } +static u8 rq_end_pad_mode(struct mlx5_core_dev *mdev, struct mlx5e_params *params) +{ + bool ro = pcie_relaxed_ordering_enabled(mdev->pdev) && + MLX5_CAP_GEN(mdev, relaxed_ordering_write); + + return ro && params->lro_en ? + MLX5_WQ_END_PAD_MODE_NONE : MLX5_WQ_END_PAD_MODE_ALIGN; +} + int mlx5e_build_rq_param(struct mlx5_core_dev *mdev, struct mlx5e_params *params, struct mlx5e_xsk_param *xsk, @@ -508,7 +517,7 @@ int mlx5e_build_rq_param(struct mlx5_core_dev *mdev, } MLX5_SET(wq, wq, wq_type, params->rq_wq_type); - MLX5_SET(wq, wq, end_padding_mode, MLX5_WQ_END_PAD_MODE_ALIGN); + MLX5_SET(wq, wq, end_padding_mode, rq_end_pad_mode(mdev, params)); MLX5_SET(wq, wq, log_wq_stride, mlx5e_get_rqwq_log_stride(params->rq_wq_type, ndsegs)); MLX5_SET(wq, wq, pd, mdev->mlx5e_res.hw_objs.pdn); -- 2.30.2