Received: by 2002:a25:b323:0:0:0:0:0 with SMTP id l35csp20892ybj; Thu, 19 Sep 2019 10:02:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqxUpYXOd0jnMNK2e3TQLXwQ3lzNpGLpCj6UYrrLC4O7Rdmwcq71uKFS5c5lhcxPeIgFwzny X-Received: by 2002:a1c:1d84:: with SMTP id d126mr3695222wmd.58.1568912565493; Thu, 19 Sep 2019 10:02:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568912565; cv=none; d=google.com; s=arc-20160816; b=aFhVdRlUItVs5OR4nHjjq8gGTn8sgLt+H6gCgYk88pB8mAcgaZsvTc8nrqbKinBwqs 1AAnsSfPrBENhEafh53aIcntPx9CaipiHFcMebv52u+oN8rnujlWxV16MrQWwBmzgtkZ jUFk7LhBsPRrawt6C/RvKMVJEX66JVM0r7kQXbtGSFkUTY3Cktm3yFmr9w3ABZIf6tvE 87VFVDwe+O8zpGgHuX2tnLvtujeExCK9En4UZGZ2K+FmxdaWtWk0ITd3ij9GjYa36Ijv D4x6xAaAmxHHczMFkqtd01s4M+pwZUiL1YSuyHItV4RR/b3JTfQkVPvDQz4V4551P7qx dqIg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=+pcNvTpqlNIk4h6WXvgs9g5jSx/1nBj2aXjP28i+Yr4=; b=DbbDDfQ8P5VDiWWYl8JsjMrFlLhoOaiRGHOxUa1/JKScxGLw8OppC3argth9trrj6r kmPmvv9mVx0IlA5q3uv1lheQvK5qmjORh4BNhccS6T3lvPLyB+qenja2xht6cHtuXXHC NT9HHChDP4VwUiY8QKjNy9am08IJYfaN8lcARjfL0eCGX7lHdAhkD1WN/C2+aSyFQW9O sJCuxI68TfmcjpRCqRBPwo8hU7ZTNHUtuedVCB1nBh8Q2lkrSdIAHbjsR17xOW6IJNZz JPMaiNu/RFZOiuQfjtq1GSbGVuhalno7/Zt1g/NR8LfWp8f6Xi3N+xz20HxkKLvMT6JU w2OQ== 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 v15si4580405eji.111.2019.09.19.10.02.19; Thu, 19 Sep 2019 10:02:45 -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; 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 S2390641AbfISO3s (ORCPT + 99 others); Thu, 19 Sep 2019 10:29:48 -0400 Received: from mx1.emlix.com ([188.40.240.192]:58592 "EHLO mx1.emlix.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731224AbfISO3r (ORCPT ); Thu, 19 Sep 2019 10:29:47 -0400 Received: from mailer.emlix.com (unknown [81.20.119.6]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.emlix.com (Postfix) with ESMTPS id 03755600E3; Thu, 19 Sep 2019 16:29:46 +0200 (CEST) From: Philipp Puschmann To: linux-kernel@vger.kernel.org Cc: yibin.gong@nxp.com, fugang.duan@nxp.com, l.stach@pengutronix.de, 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.or, linux-arm-kernel@lists.infradead.org, Philipp Puschmann Subject: [PATCH v4 1/3] dmaengine: imx-sdma: fix buffer ownership Date: Thu, 19 Sep 2019 16:29:39 +0200 Message-Id: <20190919142942.12469-2-philipp.puschmann@emlix.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190919142942.12469-1-philipp.puschmann@emlix.com> References: <20190919142942.12469-1-philipp.puschmann@emlix.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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..e029a2443cfc 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; } -- 2.23.0