| Message ID | 176cf55cdf7e686ba064befa2b257f3ae76696ab.1785183549.git.allen.lkml@gmail.com (mailing list archive) |
|---|---|
| State | New |
| Headers |
Return-Path: <linux-sunxi+bounces-24781-sunxi=pue.re@lists.linux.dev>
X-Original-To: noreply@patchwork.local
Delivered-To: noreply@patchwork.local
Received: from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114])
by mxe881.netcup.net (Postfix) with ESMTPS id 75E401C22AF
for <noreply@patchwork.local>; Mon, 27 Jul 2026 22:42:43 +0200 (CEST)
Authentication-Results: mxe881;
dkim=pass header.d=gmail.com;
spf=pass (sender IP is 172.105.105.114)
smtp.mailfrom=linux-sunxi+bounces-24781-noreply=patchwork.local@lists.linux.dev
smtp.helo=tor.lore.kernel.org
Received-SPF: pass (mxe881: domain of lists.linux.dev designates
172.105.105.114 as permitted sender) client-ip=172.105.105.114;
envelope-from=linux-sunxi+bounces-24781-noreply=patchwork.local@lists.linux.dev;
helo=tor.lore.kernel.org;
Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org
[100.90.174.1])
by tor.lore.kernel.org (Postfix) with ESMTP id A8A283013B40
for <noreply@patchwork.local>; Mon, 27 Jul 2026 20:37:35 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by smtp.subspace.kernel.org (Postfix) with ESMTP id 8AFE33D5C1D;
Mon, 27 Jul 2026 20:37:32 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com
header.b="OtO4gNpb"
X-Original-To: linux-sunxi@lists.linux.dev
Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com
[209.85.210.173])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2CC833D331E
for <linux-sunxi@lists.linux.dev>; Mon, 27 Jul 2026 20:37:31 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
arc=none smtp.client-ip=209.85.210.173
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1785184652; cv=none;
b=u7uc8eDWZDcjNHQe7D6RCloNuFwq3K7Rv60F3vp7BuBVge4PYymci1bsD7pdBYfxrCW4ZTi9jLNiH4TdqO3OgUO5WDJhfgo+Xu1B1u2/1PimHXt6Ijgx2OsjzQXr5wBDTUKGRDwcGh1iRy1NG/EkZgiOpSMX7E4WKorMtjsZlK8=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1785184652; c=relaxed/simple;
bh=as2uxtCX7qs4PDPkqSWMGU871k2muPPEc2yUiG+20Fk=;
h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
MIME-Version;
b=Lx+8eT/JyBBE4DDNu0do1j3DYvu0EjCkDjw4L7y9enY10koyM5hllIj6/XcEbp0ZHMmf5jGaAipABmqDkZiDRdjLKlVkGoCVvvLLGHOUkwlwKGnBKOvUncw3c1FIb9cfgvBVgdOsCf7O96W2hWGj2V6/HV0bP3FU1mb77nuAriQ=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
dmarc=pass (p=none dis=none) header.from=gmail.com;
spf=pass smtp.mailfrom=gmail.com;
dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com
header.b=OtO4gNpb; arc=none smtp.client-ip=209.85.210.173
Authentication-Results: smtp.subspace.kernel.org;
dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: smtp.subspace.kernel.org;
spf=pass smtp.mailfrom=gmail.com
Received: by mail-pf1-f173.google.com with SMTP id
d2e1a72fcca58-848743155bcso1179131b3a.0
for <linux-sunxi@lists.linux.dev>;
Mon, 27 Jul 2026 13:37:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20251104; t=1785184650; x=1785789450;
darn=lists.linux.dev;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:from:to:cc:subject:date
:message-id:reply-to:content-type;
bh=PLfj4e7PYbv17pgcUAJcNclY2K/xl/o48sCMhXJ1vaY=;
b=OtO4gNpboEHfdkrIA58snNrCSkthtoaxoATjpzeCDKQOLRMzb8aQ/pYppiAg9O+7p1
UPjXdIxKiiyAjnBTVwq4bUyBS7M7az1yU/yoLqrxDiE0r70c+QKZCDBaVd+5fUqAKP0L
ltozwr109snb3F/hwt2CcHpE/mwqQr6Vie2sX3q11rvvr+c6MR3tYeIRVH8hXP3H6LrU
ed88PjIzh4QP+fdKtVWq47uwv2B1neoB7hcsS4A6zt7ECkwssEb74hcaWbXKXqGbWCFH
DV5KOKQQsZIjrx/7zOym+QyZFevFs62D1r/QzduQ6Eo+aIA/4MQmjoN1ZvgAHrMIlMZw
JahQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20251104; t=1785184650; x=1785789450;
h=content-transfer-encoding:mime-version:references:in-reply-to
:message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
:to:cc:subject:date:message-id:reply-to:content-type;
bh=PLfj4e7PYbv17pgcUAJcNclY2K/xl/o48sCMhXJ1vaY=;
b=OlNJ6PzmagPkByQ7lpaUCuNn8vWxtyWU26Dq401nKALqpIJ9BBm3JWvC78KeziRqmp
FpJbUxSpEdWAOSfso880ic6BfXtPJ6qqENKBOWYjPfpM/1sg+ST3ksm7jCYrOtr7DI4c
vQUePPbhCxvqG9Qbj2Tu8ShU9PzjbpdaGnRNIjaqReVQq0CLbidCc6DtuAoUici7mnx+
C9DzLab8jRhQz5SdEjGh/C2DXFFHOoyL8DyByZmHhWqUGulnasDrG2fFGNKV1I1nWIJb
epUoSqyaFeIq2mRYWptn6v4igtYB+TaYR3FGQhtAZwAx4SEGtf5aDtDWlu5rT2BqUCV9
ACug==
X-Forwarded-Encrypted: i=1;
AHgh+RqZXFHTYqY64ttHBsnJ2ljhhH8wN9Mq09zsYpBNTCD2XBe02VwCE6RSLTZhDo0Z3zUyO4rOD16VOqGduA==@lists.linux.dev
X-Gm-Message-State: AOJu0YzCZAaJ6o7bTUjQMwEuYirMLV6kzOCkVuI05wjtZ9zLo3kjHhCR
eNc12mnbiQZ1qgwMfcabe3S4NGcJJiZb+4muhX91t2aQVolfWtQDf5ri
X-Gm-Gg: AR+sD11sWrbFh5DvkwcfDnyfphSt6t91bghcKbEwNJTt8uAOVwTt15v7DvZxSa/8Qrf
KebfSmr6HLYfmqc2+JOD0nQ9jriIkeTVvMZ0UB5C9Y9Xm1nsv+pZVrjpLE5QGF3dGfUoeX0C/8S
zjiDLMyc6eIf6su7xrO3MUfK/QP16MDMj/LJEuiIijOc3bJWSwoS9TosLx/Q1vuObpnvCPbaUrL
wm8JmG6zLgkqTQHBo+9WwvVu39+qsHr/SnXpXl4d9HMIRoFd9EdZXGNqbW3iqQypqOA2FTCacLc
Cs8kZtkTkHLQhRBkwlM1OqSvjrrxIVuYz3yqOxy9jTsi8j0y8rJm7L4cClBU1cwdCtjUjlaz0Q9
+eGIjpwE+sdCpcLYN5UPyXqey1HrBGloHWjsUXclVFLTRPikw9IBfaQcxlmDWaMMkOaHOMNhCbe
Z2IjHm
X-Received: by 2002:aa7:8888:0:b0:84e:456d:aa5b with SMTP id
d2e1a72fcca58-84e595f7ed2mr8128845b3a.72.1785184650522;
Mon, 27 Jul 2026 13:37:30 -0700 (PDT)
Received: from cryptic.lan ([2001:569:7fab:e200:3789:64f9:8855:c0af])
by smtp.gmail.com with ESMTPSA id
d2e1a72fcca58-84e5327f116sm3507549b3a.16.2026.07.27.13.37.13
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Mon, 27 Jul 2026 13:37:30 -0700 (PDT)
From: Allen Pais <allen.lkml@gmail.com>
To: Vinod Koul <vkoul@kernel.org>,
Frank Li <Frank.Li@kernel.org>
Cc: Allen Pais <allen.lkml@gmail.com>,
dmaengine@vger.kernel.org,
linux-kernel@vger.kernel.org,
Arnd Bergmann <arnd@arndb.de>,
Kees Cook <kees@kernel.org>,
Chen-Yu Tsai <wens@kernel.org>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Samuel Holland <samuel@sholland.org>,
linux-arm-kernel@lists.infradead.org,
linux-sunxi@lists.linux.dev
Subject: [PATCH v2 33/64] dmaengine: sun6i: kill vchan BH on teardown
Date: Mon, 27 Jul 2026 13:36:10 -0700
Message-ID:
<176cf55cdf7e686ba064befa2b257f3ae76696ab.1785183549.git.allen.lkml@gmail.com>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1785183549.git.allen.lkml@gmail.com>
References: <20260108080332.2341725-1-allen.lkml@gmail.com>
<cover.1785183549.git.allen.lkml@gmail.com>
Precedence: bulk
X-Mailing-List: linux-sunxi@lists.linux.dev
List-Id: <linux-sunxi.lists.linux.dev>
List-Subscribe: <mailto:linux-sunxi+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:linux-sunxi+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Rspamd-Server: rspamd-worker-8404
X-Spamd-Result: default: False [-0.66 / 15.00];
BAYES_HAM(-5.50)[100.00%];
RBL_SENDERSCORE(2.00)[172.105.105.114:from];
SUSPICIOUS_RECIPS(1.50)[];
DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed),
No valid DKIM,none];
R_MISSING_CHARSET(0.50)[];
MAILLIST(-0.15)[generic];
BAD_REP_POLICIES(0.10)[];
MIME_GOOD(-0.10)[text/plain];
HAS_LIST_UNSUB(-0.01)[];
TAGGED_RCPT(0.00)[];
PRECEDENCE_BULK(0.00)[];
RCPT_COUNT_TWELVE(0.00)[12];
TO_DN_SOME(0.00)[];
DBL_BLOCKED_OPENRESOLVER(0.00)[tor.lore.kernel.org:rdns,tor.lore.kernel.org:helo];
FORGED_SENDER_MAILLIST(0.00)[];
FREEMAIL_CC(0.00)[gmail.com,vger.kernel.org,arndb.de,kernel.org,sholland.org,lists.infradead.org,lists.linux.dev];
R_SPF_ALLOW(0.00)[+ip4:172.105.105.114];
ARC_ALLOW(0.00)[subspace.kernel.org:s=arc-20240116:i=1];
FREEMAIL_FROM(0.00)[gmail.com];
RCVD_TLS_LAST(0.00)[];
MIME_TRACE(0.00)[0:+];
FORGED_RECIPIENTS_MAILLIST(0.00)[];
FROM_HAS_DN(0.00)[];
MID_RHS_MATCH_FROM(0.00)[];
ASN(0.00)[asn:63949, ipnet:172.105.96.0/20, country:SG];
TAGGED_FROM(0.00)[bounces-24781-noreply=patchwork.local];
RCVD_COUNT_FIVE(0.00)[6];
FROM_NEQ_ENVFROM(0.00)[allenlkml@gmail.com,linux-sunxi@lists.linux.dev];
RCVD_VIA_SMTP_AUTH(0.00)[]
X-Rspamd-Queue-Id: 75E401C22AF
X-MORS-Enabled: yes
X-MORS-DOMAIN: patchwork.local
X-MORS-HOSTING: hosting172546
X-MORS-USER: hosting172546
X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?=
|
| Series |
None
|
|
Commit Message
Allen Pais
July 27, 2026, 8:36 p.m. UTC
Use dma_chan_kill_bh() for virt-dma channel cleanup.
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
drivers/dma/sun6i-dma.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Client callbacks flushed during cleanup can reschedule the driver tasklet after it was killed and clocks were disabled, leading to a hardware fault and list corruption.
--
--- Patch [33]: [PATCH v2 33/64] dmaengine: sun6i: kill vchan BH on teardown ---
commit 0c78bc25a98ea85ad52645998923d5aa57383201
Author: Allen Pais <allen.lkml@gmail.com>
dmaengine: sun6i: kill vchan BH on teardown
Use dma_chan_kill_bh() for virt-dma channel cleanup.
> diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
> index a9a254dbf8cb9..9289c24dfcfaf 100644
> --- a/drivers/dma/sun6i-dma.c
> +++ b/drivers/dma/sun6i-dma.c
> @@ -1097,7 +1097,7 @@ static inline void sun6i_dma_free(struct sun6i_dma_dev *sdev)
> struct sun6i_vchan *vchan = &sdev->vchans[i];
>
> list_del(&vchan->vc.chan.device_node);
> - tasklet_kill(&vchan->vc.task);
> + dma_chan_kill_bh(&vchan->vc.chan);
[Severity: High]
This is a pre-existing issue, but could this cleanup sequence trigger a
hardware fault or list corruption if a client callback submits a new
transfer?
During device removal or sysfs unbind, sun6i_dma_remove() kills the
hardware tasklet and disables controller clocks before calling
sun6i_dma_free():
drivers/dma/sun6i-dma.c:sun6i_dma_remove() {
...
sun6i_kill_tasklet(sdc);
clk_disable_unprepare(sdc->clk_mbus);
clk_disable_unprepare(sdc->clk);
reset_control_assert(sdc->rstc);
sun6i_dma_free(sdc);
}
sun6i_dma_free() then calls dma_chan_kill_bh() which flushes pending work.
If a client callback runs during this flush and submits a new transfer,
sun6i_dma_issue_pending() is invoked:
drivers/dma/sun6i-dma.c:sun6i_dma_issue_pending() {
...
list_add_tail(&vchan->node, &sdev->pending);
tasklet_schedule(&sdev->task);
}
Because tasklet_schedule() is called unconditionally without checking if
the device is tearing down, it resurrects the killed tasklet.
When the scheduled tasklet runs, it accesses hardware registers without
clocks enabled, leading to an external abort. Additionally, it concurrently
accesses the channel lists while sun6i_dma_free() mutates them via
list_del() without locks.
Should the teardown order in sun6i_dma_remove() be adjusted to flush
callbacks before disabling clocks, or should sun6i_dma_issue_pending()
check a shutdown flag before scheduling the tasklet?
> }
> }
diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index a9a254dbf8cb..9289c24dfcfa 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -1097,7 +1097,7 @@ static inline void sun6i_dma_free(struct sun6i_dma_dev *sdev) struct sun6i_vchan *vchan = &sdev->vchans[i]; list_del(&vchan->vc.chan.device_node); - tasklet_kill(&vchan->vc.task); + dma_chan_kill_bh(&vchan->vc.chan); } }