Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp5611262img; Wed, 27 Mar 2019 11:40:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqyQCqbPdOCq4jZNRlcfGTK1TQxuNqjyS0vr0ahz/LjBKnV+tT/m7p1rNPoAgaN0x1LenODD X-Received: by 2002:a17:902:2865:: with SMTP id e92mr39186778plb.312.1553712028728; Wed, 27 Mar 2019 11:40:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553712028; cv=none; d=google.com; s=arc-20160816; b=yIr4hj8MxTNHOYIRWFciAxSAU+0GKfSISTnxrvOhos2fSEgWt2On7zxczo/avb9uaR dwA6JdPpn2+8p+wMI7wvJiOowyAEkDYXH5Fjxs446RGx8WAiqWQScCL13CGqR2Op6O7R cWu6E/c5Hxu9nUjdRsx9Wa7eNzsM4fPoH0prxVNDrOIIa36Pj/XJcYV5NNCZJrqLu8sj NR5pgw0fZ3QHUt23LEuzjyimB3FT3WqdgBhmNNCZ4TTIh2r4vWuVVbhjrDDJDaOB36uB sfRJ+p3LabOdNiUubTNsJfq/6raFeiZMcObw8w3O/4Iiop+hOtKKv6MkTPaaTjgCGKGd LY6Q== 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 :dkim-signature; bh=C3a2EJy/+MSvH5Mfygyf2wjYpRqvJdVhOayPqFsdgRE=; b=vrz36Pm38JZ2vMFnZYuViDJDKel8xnAnn8FqQfNcj+kGQYolLkuvfx9Q8Ro4a5hFfe H2UXvFq94J8RipOn6akE+GQ8JJIk/PZDc536LIsDClaiID3kNp1hDcl4S10PN0C6tfxQ EhcfUWqzJsLgkL6BOgNclOb8eypD2DpiBrBnHBTqH7OX5vRBDkNVeMtWdnBoV6eY6Zqc jtJLolI/dFlkGUWxO4bRpQeqzkNNWJ9bR+mSwKrTdQUzk2TRK/6tu2Qt90UltKCT2nt+ wyQkPCJqniR3VjNG3Nr16zrHQABlBR8+ngfDVliKwnqIyh4LfOX2z0OP/6EWnfGyM9q6 /dLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fx08n3wf; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j8si18447439pgq.542.2019.03.27.11.40.13; Wed, 27 Mar 2019 11:40:28 -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; dkim=pass header.i=@kernel.org header.s=default header.b=fx08n3wf; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391475AbfC0SXX (ORCPT + 99 others); Wed, 27 Mar 2019 14:23:23 -0400 Received: from mail.kernel.org ([198.145.29.99]:41822 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391446AbfC0SXV (ORCPT ); Wed, 27 Mar 2019 14:23:21 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D5EC02186A; Wed, 27 Mar 2019 18:23:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553711000; bh=IEjrK0Fq9uJn7NJg3Wy5OMsJD5xdA/S/D4qKmyVfzqs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fx08n3wfnSum9hV9etVAMaAZXujgFEonK5OmnbfwqntMwn9PiXSa6er47KpHDAAxy 6WAuxqQkkAjyAQttUAmv274bvSpLyu1e7+UfgM7b7+TrCFjUbNWrKAePmJKO6VxlO2 rZhEBBXMz2wohuZptryqjYTNmBwmHFHcxK9FYrZE= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Ben Dooks , Vinod Koul , Sasha Levin , dmaengine@vger.kernel.org, linux-tegra@vger.kernel.org Subject: [PATCH AUTOSEL 4.9 85/87] dmaengine: tegra: avoid overflow of byte tracking Date: Wed, 27 Mar 2019 14:20:38 -0400 Message-Id: <20190327182040.17444-85-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190327182040.17444-1-sashal@kernel.org> References: <20190327182040.17444-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ben Dooks [ Upstream commit e486df39305864604b7e25f2a95d51039517ac57 ] The dma_desc->bytes_transferred counter tracks the number of bytes moved by the DMA channel. This is then used to calculate the information passed back in the in the tegra_dma_tx_status callback, which is usually fine. When the DMA channel is configured as continous, then the bytes_transferred counter will increase over time and eventually overflow to become negative so the residue count will become invalid and the ALSA sound-dma code will report invalid hardware pointer values to the application. This results in some users becoming confused about the playout position and putting audio data in the wrong place. To fix this issue, always ensure the bytes_transferred field is modulo the size of the request. We only do this for the case of the cyclic transfer done ISR as anyone attempting to move 2GiB of DMA data in one transfer is unlikely. Note, we don't fix the issue that we should /never/ transfer a negative number of bytes so we could make those fields unsigned. Reviewed-by: Dmitry Osipenko Signed-off-by: Ben Dooks Acked-by: Jon Hunter Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin --- drivers/dma/tegra20-apb-dma.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c index 3722b9d8d9fe..22f7f0c68a48 100644 --- a/drivers/dma/tegra20-apb-dma.c +++ b/drivers/dma/tegra20-apb-dma.c @@ -635,7 +635,10 @@ static void handle_cont_sngl_cycle_dma_done(struct tegra_dma_channel *tdc, sgreq = list_first_entry(&tdc->pending_sg_req, typeof(*sgreq), node); dma_desc = sgreq->dma_desc; - dma_desc->bytes_transferred += sgreq->req_len; + /* if we dma for long enough the transfer count will wrap */ + dma_desc->bytes_transferred = + (dma_desc->bytes_transferred + sgreq->req_len) % + dma_desc->bytes_requested; /* Callback need to be call */ if (!dma_desc->cb_count) -- 2.19.1