Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3618789pxb; Mon, 24 Jan 2022 13:38:56 -0800 (PST) X-Google-Smtp-Source: ABdhPJyfB1ZzWZMmZUs0wVrhnF1M1xrJIte1i3s/lDdI0xBbP9LgYBv14eTP7iXBK81dp6cHD5si X-Received: by 2002:a63:5b63:: with SMTP id l35mr13192889pgm.406.1643060336570; Mon, 24 Jan 2022 13:38:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643060336; cv=none; d=google.com; s=arc-20160816; b=sFrm+N9zGv/PgiTes7YDSEU6TikMTGO+EZYKQvXXCc6HI5BPqUNNqMAqK9wVEg3kOB 6rbE+2+ikSFf9++TH02K/znz2UIYcQ8SL6ah6Kk0Xw6ZuqFISfPqU8FDKeqB9oBV6JLu drg+U1I4CM92Uy9wUpIsKuvgP32pH94sjbCPbnRmYPrGFwkCgzEGEmc4vq4p04z+OiMe m2y2xKgd6JQze4rThXzaHunY1Q32LYvwvderYSoBkAWe7vfw2qeWOh392Wv1rBUgIK3z wTdu/LDvNsGq69yZB/RvsHPfAewBg7uyWDvpKN+EbVgc3IrhmOpfSP+lWFhNZHJxQ3CR b0xg== 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=390gSdq0cyPh+ata8dPE6H4Lcf9azr2Z77PzLrrFVWY=; b=D6U4wqWNVh2u1274KCB9wQF97Zuh13giRxCoJaDgRdUOnFSTjuOIJFbR2nDTvljYKS Z0TCGInybHC09QeetLYFEAMjVBaFuG/NlqRKi2zUCO+F4FJi3z7Vos+ZZPNIsx+MtzK/ SvS91vJeB6GqvvAHIc9Y4O9udGQMU+afOGRBTtgVv1nmXmn2pz5wuyolIl/U8LN4z0fH Or46QGdsB5D4jculpFacXTEoTA24OGqx9TTaMIzxgShc6//HKguuWxLaHp3VOhap0V8M fZ8CFhbJG2SPNnF0jGHHZ0pKqpp7S41lg48qq1+zVR3Z1SlGezsXEByTQk3AfyN4sH4U sI+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=0ORQzSfp; 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 h11si8180127plf.293.2022.01.24.13.38.44; Mon, 24 Jan 2022 13:38:56 -0800 (PST) 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=0ORQzSfp; 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 S1450262AbiAXVUG (ORCPT + 99 others); Mon, 24 Jan 2022 16:20:06 -0500 Received: from dfw.source.kernel.org ([139.178.84.217]:44792 "EHLO dfw.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1392503AbiAXUvX (ORCPT ); Mon, 24 Jan 2022 15:51:23 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 26A6060C3E; Mon, 24 Jan 2022 20:51:23 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id ECE84C340E5; Mon, 24 Jan 2022 20:51:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643057482; bh=DKaIZ44jXhAHBBxgsqnKrT5Vc0etjfMDYpjpcuu0RIM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0ORQzSfptMvryCu3iVN7w22Ghkbc3rn2OY8GEbhL37ogeo4OGBB+rU2mHjJcgg/78 uYRQccBCJ6cQ9HADckGwt8NTBEj4iBZOd5SGhX0WonkpxOWzUoQnYNN7pA6x1UqzXG 9xWIqpdEhCwWQdSuTDaMHhJwvYJ1mB0m8P2pObVU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Robert Hancock , "David S. Miller" Subject: [PATCH 5.15 794/846] net: axienet: add missing memory barriers Date: Mon, 24 Jan 2022 19:45:11 +0100 Message-Id: <20220124184128.347262824@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124184100.867127425@linuxfoundation.org> References: <20220124184100.867127425@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: Robert Hancock commit 95978df6fa328df619c15312e65ece469c2be2d2 upstream. This driver was missing some required memory barriers: Use dma_rmb to ensure we see all updates to the descriptor after we see that an entry has been completed. Use wmb and rmb to avoid stale descriptor status between the TX path and TX complete IRQ path. Fixes: 8a3b7a252dca9 ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver") Signed-off-by: Robert Hancock Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -632,6 +632,8 @@ static int axienet_free_tx_chain(struct if (nr_bds == -1 && !(status & XAXIDMA_BD_STS_COMPLETE_MASK)) break; + /* Ensure we see complete descriptor update */ + dma_rmb(); phys = desc_get_phys_addr(lp, cur_p); dma_unmap_single(ndev->dev.parent, phys, (cur_p->cntrl & XAXIDMA_BD_CTRL_LENGTH_MASK), @@ -645,8 +647,10 @@ static int axienet_free_tx_chain(struct cur_p->app1 = 0; cur_p->app2 = 0; cur_p->app4 = 0; - cur_p->status = 0; cur_p->skb = NULL; + /* ensure our transmit path and device don't prematurely see status cleared */ + wmb(); + cur_p->status = 0; if (sizep) *sizep += status & XAXIDMA_BD_STS_ACTUAL_LEN_MASK; @@ -704,6 +708,9 @@ static inline int axienet_check_tx_bd_sp int num_frag) { struct axidma_bd *cur_p; + + /* Ensure we see all descriptor updates from device or TX IRQ path */ + rmb(); cur_p = &lp->tx_bd_v[(lp->tx_bd_tail + num_frag) % lp->tx_bd_num]; if (cur_p->status & XAXIDMA_BD_STS_ALL_MASK) return NETDEV_TX_BUSY; @@ -843,6 +850,8 @@ static void axienet_recv(struct net_devi tail_p = lp->rx_bd_p + sizeof(*lp->rx_bd_v) * lp->rx_bd_ci; + /* Ensure we see complete descriptor update */ + dma_rmb(); phys = desc_get_phys_addr(lp, cur_p); dma_unmap_single(ndev->dev.parent, phys, lp->max_frm_size, DMA_FROM_DEVICE);