Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp776604ybn; Wed, 25 Sep 2019 07:34:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqzhfz+ME1eYbkdMyKHeP8mwfavkZVEk1M4MPv4aQMflsKFhlodEN346ZthUj7eF2ZMAW3oR X-Received: by 2002:a17:906:8043:: with SMTP id x3mr4385484ejw.221.1569422085796; Wed, 25 Sep 2019 07:34:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569422085; cv=none; d=google.com; s=arc-20160816; b=RepUR48pHJGeUdVDNZfup+DwthrmmEniyVU9byYwZGG7Ti1HBwYr1/QN135OC2YDd4 /6JtTete2A/RvCvNazp38Ro2+4Z2HajTYDVzSwnb26tqCsgJhaH9rnJtyGaszNAD/Es2 H9dYvEAJFaPDWw6Wz66/Ee/1U2XJIVCie1xoDk2algSu9fwvH1CtG/FHbMGQu11lR09r rmNKUi2lAq3LsvGcrwFKyzwPLNltumf57EzsjVrLqeinyXBpD6FpcynKcwlI+CkELOrN B3/pBm479z05Npa2LQWNoufbokhZzxt/tA2CGzTnEP0paAMOu4jkkwF2DuFzl3DGmMPS XJ5A== 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=VIavkDfs/AqD3FD8NVO9R9YZmF26KdlBXjMeY2S9x0s=; b=G0usCLuBtDBh3Ku5fJWxdfOLR5IroLSnnYd+PwAyt+HwL0MVHyZF/2DPizGoLHjmOd WYpF6A9dZY1zco7eu6A3QfsXM9ipalM1yCLOSz/Vr05z9issDV/nKMyK2mxPFJslX/N5 FB3a8Isq5e5G5r1qmBtV3xaDLEWT41UgwLR3grcNNIbX9yX+JBHtA0NAp/eLltbpX3ll WM2VGaUuSPYEABU888POOyryNd6xSa6i2gy6c7bc9qUgTRGoesmdU4zTuvFOZ/Z2bMEM n2b+wJgFgJY1AERpO/JR/Y4jKwXraHdKS/MOnIlvpO6W0NWAQcp1yUpw7qyRLB3WshNI A/YQ== 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 b47si3308588edc.45.2019.09.25.07.34.22; Wed, 25 Sep 2019 07:34: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 S2408265AbfIWN6R (ORCPT + 99 others); Mon, 23 Sep 2019 09:58:17 -0400 Received: from mx1.emlix.com ([188.40.240.192]:42102 "EHLO mx1.emlix.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2408172AbfIWN6Q (ORCPT ); Mon, 23 Sep 2019 09:58:16 -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 4AA10600EF; Mon, 23 Sep 2019 15:58:14 +0200 (CEST) From: Philipp Puschmann To: linux-kernel@vger.kernel.org Cc: jlu@pengutronix.de, 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.org, linux-arm-kernel@lists.infradead.org, Philipp Puschmann Subject: [PATCH v5 1/3] dmaengine: imx-sdma: fix buffer ownership Date: Mon, 23 Sep 2019 15:58:06 +0200 Message-Id: <20190923135808.815-2-philipp.puschmann@emlix.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190923135808.815-1-philipp.puschmann@emlix.com> References: <20190923135808.815-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 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; } -- 2.23.0