Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1112704ybl; Tue, 3 Dec 2019 01:49:02 -0800 (PST) X-Google-Smtp-Source: APXvYqxIRFtToDTuqEhjny4qdMWe/O0FSTl+ud4Q4m2/Xk3s1FV6kTpAlZBJKhPprZ3YvxjJhn0t X-Received: by 2002:a05:6808:a83:: with SMTP id q3mr3062222oij.0.1575366541922; Tue, 03 Dec 2019 01:49:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575366541; cv=none; d=google.com; s=arc-20160816; b=tUrfmgITTL2O4CZzxEyl/GbiQfaj7Sl7K6O5u18WHAcoxB6JPmBdIxMD787HkPmxHr qFwzJuSZ6luNlI7mA9u7tJgAuYzJgjkl5pXhfnTLokyX2nGKUW1tST1rFDIDmSv+QXW6 rnQlCES6ZFOB0osH1re+7aTBt5Y69aNZWFLH8Q03O0uO76bDM37f/ud/Iv7QHiiukzg+ L2sCH6MKCyUTrtdcdIO+rhSWbrBCGHmBmCbpuBWW94NJdJlMnw9gACldRETGGwb8Gv4A z0Lqkm/ixK8O0MVjldKagRRHebtkgon4N5OUH6xyboEi/Z25/jEY6swCNEknWyJCSVQq cKjw== 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:date:cc:to:from:subject :message-id; bh=36B5xDV3anAM/bYTqBvIT+41GkwtDxLAzS1ofkMqXzU=; b=bnVy4mrSsNVexVwQgEptiXyuSkCgrPTYaSHH/678mPwX4JYqThE1i74rS8Gzo8icv9 d9Np0cExXMaccr4WHkUP/daQhHOnGpD7bhc2irzja8UDAA9K0Ff5PPIy0hfsJhCy20WS xP/r4Sv/4qAJK5P+39B6RNINDB5y8+1Ojo/4cIIqXci8g1F0pLYniAw6EgJoqYsDdaRN vezt8GHtJwqmQOlHg8JKVL4amoUdCAwqS3QNH5PXI5sfmdRzXT04kcUmojNeLn7bT1JQ q+wKzT0S9vy2wFLupiHBXttZKyDPnXxOtrNJ7CjAkvTP9KtFP8/c5l6HPdRSX2u3meVN 08UA== ARC-Authentication-Results: i=1; mx.google.com; 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 m7si860499ote.12.2019.12.03.01.48.49; Tue, 03 Dec 2019 01:49:01 -0800 (PST) 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; 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 S1726365AbfLCJrv (ORCPT + 99 others); Tue, 3 Dec 2019 04:47:51 -0500 Received: from metis.ext.pengutronix.de ([85.220.165.71]:40483 "EHLO metis.ext.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725773AbfLCJrv (ORCPT ); Tue, 3 Dec 2019 04:47:51 -0500 Received: from kresse.hi.pengutronix.de ([2001:67c:670:100:1d::2a]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1ic4mb-0003Hm-Py; Tue, 03 Dec 2019 10:47:49 +0100 Message-ID: <9e210702979c45c11d16bf5df97b75863da587d0.camel@pengutronix.de> Subject: Re: [PATCH v5 1/3] dmaengine: imx-sdma: fix buffer ownership From: Lucas Stach To: Philipp Puschmann , linux-kernel@vger.kernel.org Cc: jlu@pengutronix.de, yibin.gong@nxp.com, fugang.duan@nxp.com, dan.j.williams@intel.com, vkoul@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org Date: Tue, 03 Dec 2019 10:47:48 +0100 In-Reply-To: <20190923135808.815-2-philipp.puschmann@emlix.com> References: <20190923135808.815-1-philipp.puschmann@emlix.com> <20190923135808.815-2-philipp.puschmann@emlix.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.30.5-1.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::2a X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mo, 2019-09-23 at 15:58 +0200, Philipp Puschmann wrote: > BD_DONE flag marks ownership of the buffer. When 1 SDMA owns the > buffer, when 0 ARM owns it. When processing the buffers in > sdma_update_channel_loop the ownership of the currently processed > buffer was set to SDMA again before running the callback function of > the buffer and while the sdma script may be running in parallel. So > there was the possibility to get the buffer overwritten by SDMA > before > it has been processed by kernel leading to kind of random errors in > the > upper layers, e.g. bluetooth. > > Fixes: 1ec1e82f2510 ("dmaengine: Add Freescale i.MX SDMA support") > Signed-off-by: Philipp Puschmann Reviewed-by: Lucas Stach > --- > > Changelog v5: > - no changes > > Changelog v4: > - fixed the fixes tag > > Changelog v3: > - use correct dma_wmb() instead of dma_wb() > - add fixes tag > > Changelog v2: > - add dma_wb() > > drivers/dma/imx-sdma.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c > index 9ba74ab7e912..b42281604e54 100644 > --- a/drivers/dma/imx-sdma.c > +++ b/drivers/dma/imx-sdma.c > @@ -802,7 +802,6 @@ static void sdma_update_channel_loop(struct > sdma_channel *sdmac) > */ > > desc->chn_real_count = bd->mode.count; > - bd->mode.status |= BD_DONE; > bd->mode.count = desc->period_len; > desc->buf_ptail = desc->buf_tail; > desc->buf_tail = (desc->buf_tail + 1) % desc->num_bd; > @@ -817,6 +816,9 @@ static void sdma_update_channel_loop(struct > sdma_channel *sdmac) > dmaengine_desc_get_callback_invoke(&desc->vd.tx, NULL); > spin_lock(&sdmac->vc.lock); > > + dma_wmb(); > + bd->mode.status |= BD_DONE; > + > if (error) > sdmac->status = old_status; > }