Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1684716ybz; Thu, 16 Apr 2020 13:39:10 -0700 (PDT) X-Google-Smtp-Source: APiQypKhX5eEHvI2DC74nhsCKbkJhwUSSbA0dkmRb6YMRbas/0Wqlv4tNVEGDv5qjylWLKldjGr0 X-Received: by 2002:a17:906:130e:: with SMTP id w14mr11668943ejb.155.1587069550124; Thu, 16 Apr 2020 13:39:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587069550; cv=none; d=google.com; s=arc-20160816; b=rRg7aOqP/vIEv7tBcY/UTa+sT6NjnXJSrIw7sYLQSgH3Wnts4LA2IM5Pkf1RhIK/pS UMqX+OnG8KU7jS4WAGzvWbTu4MX3LxVa8MKkd2oY9S9OT0V3qZTw+++CcnNRPtWgKoX9 T96pLav7fIp1rzhOK7SdPhwPrUsjVU3bufdhACAkm9WSvfYOfuFkbKYQqyIb0yB8X84i cTDDAFoUiKmwmGdfI3MISNrdoyuCpZwXiEqSp0GpWPLVGxAsMwOS3/dRJlpS42oi1APs u6bn7EihpvYzU/PkqdzP/lT90lBgGrN3fspSXaUzUOYhD6tDbLm4BS/ullRSRGCn3mVG MTJQ== 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=C4amXpD/HAbOZIbWz5xTfaLjbQs9L2bm/jJnCIkUGvw=; b=ZH5fkObPPJ0c6rtO2cv0IMwFjZxF/055qZEY6xLAOt7FN065hqeMYgG2/YHN1XKN8D NVCShUoErPZn268KiSAyGD8SkKQoEUs/o3rrF5Mdt8sRjTe27jRn6auaquKfVKPFysSh u7nRT7NILcnsv2JiYmeWcer6CYkbpnlahZr3yF7Zt6gwXrIOGRWfbP3iwbu2q7joBf/g keCORmtggP34JJaMYcX0+Ifds9Dj79/rtxydGFk8HJ6IKj5JlujUPEEe7/aOfIkF4KOA RbxLF9PoN2jBz+gVum6HvjsW5k4HyWCvRiZvteNX8NZhREs10ADI1NO6Ai62BLv2azbT fODw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=w8n1QDaL; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lw23si2993589ejb.423.2020.04.16.13.38.47; Thu, 16 Apr 2020 13:39:10 -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=@kernel.org header.s=default header.b=w8n1QDaL; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395555AbgDPPtw (ORCPT + 99 others); Thu, 16 Apr 2020 11:49:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:42824 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2896598AbgDPNc6 (ORCPT ); Thu, 16 Apr 2020 09:32:58 -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 9A8A322253; Thu, 16 Apr 2020 13:32:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587043942; bh=+tDhdjPDbjaCxf9tPz+nxKTRrunX02hgzKXcO8H4XSM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=w8n1QDaLdG8vyOpRv9QLZ1htxAvvGr/d2dyL6opHk+N9kLAvbcr2ha34kUc6yndM0 gaRXUyicgH6TdEZY6ap10NAcOdgl0+/ssL2xrvBpInSqvGyIrsCc6v43khmmTJG/sG 0EDxXYoUHH0LQ7qt7uZzczx5La+LMtVpAe4/CEtE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Luo bin , "David S. Miller" , Sasha Levin Subject: [PATCH 5.5 017/257] hinic: fix out-of-order excution in arm cpu Date: Thu, 16 Apr 2020 15:21:08 +0200 Message-Id: <20200416131328.049050341@linuxfoundation.org> X-Mailer: git-send-email 2.26.1 In-Reply-To: <20200416131325.891903893@linuxfoundation.org> References: <20200416131325.891903893@linuxfoundation.org> User-Agent: quilt/0.66 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 From: Luo bin [ Upstream commit 33f15da216a1f4566b4ec880942556ace30615df ] add read barrier in driver code to keep from reading other fileds in dma memory which is writable for hw until we have verified the memory is valid for driver Signed-off-by: Luo bin Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c | 2 ++ drivers/net/ethernet/huawei/hinic/hinic_hw_eqs.c | 2 ++ drivers/net/ethernet/huawei/hinic/hinic_rx.c | 3 +++ drivers/net/ethernet/huawei/hinic/hinic_tx.c | 2 ++ 4 files changed, 9 insertions(+) diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c b/drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c index eb53c15b13f33..33f93cc25193a 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c @@ -623,6 +623,8 @@ static int cmdq_cmd_ceq_handler(struct hinic_cmdq *cmdq, u16 ci, if (!CMDQ_WQE_COMPLETED(be32_to_cpu(ctrl->ctrl_info))) return -EBUSY; + dma_rmb(); + errcode = CMDQ_WQE_ERRCODE_GET(be32_to_cpu(status->status_info), VAL); cmdq_sync_cmd_handler(cmdq, ci, errcode); diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hw_eqs.c b/drivers/net/ethernet/huawei/hinic/hinic_hw_eqs.c index 6a723c4757bce..c0b6bcb067cd4 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_hw_eqs.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_hw_eqs.c @@ -235,6 +235,8 @@ static void aeq_irq_handler(struct hinic_eq *eq) if (HINIC_EQ_ELEM_DESC_GET(aeqe_desc, WRAPPED) == eq->wrapped) break; + dma_rmb(); + event = HINIC_EQ_ELEM_DESC_GET(aeqe_desc, TYPE); if (event >= HINIC_MAX_AEQ_EVENTS) { dev_err(&pdev->dev, "Unknown AEQ Event %d\n", event); diff --git a/drivers/net/ethernet/huawei/hinic/hinic_rx.c b/drivers/net/ethernet/huawei/hinic/hinic_rx.c index 2695ad69fca60..815649e37cb15 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_rx.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_rx.c @@ -350,6 +350,9 @@ static int rxq_recv(struct hinic_rxq *rxq, int budget) if (!rq_wqe) break; + /* make sure we read rx_done before packet length */ + dma_rmb(); + cqe = rq->cqe[ci]; status = be32_to_cpu(cqe->status); hinic_rq_get_sge(rxq->rq, rq_wqe, ci, &sge); diff --git a/drivers/net/ethernet/huawei/hinic/hinic_tx.c b/drivers/net/ethernet/huawei/hinic/hinic_tx.c index 0e13d1c7e4746..375d81d03e866 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_tx.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_tx.c @@ -622,6 +622,8 @@ static int free_tx_poll(struct napi_struct *napi, int budget) do { hw_ci = HW_CONS_IDX(sq) & wq->mask; + dma_rmb(); + /* Reading a WQEBB to get real WQE size and consumer index. */ sq_wqe = hinic_sq_read_wqebb(sq, &skb, &wqe_size, &sw_ci); if ((!sq_wqe) || -- 2.20.1