From patchwork Fri Oct 23 23:38:20 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3712 Return-Path: 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 9EBE31C010E for ; Sat, 24 Oct 2026 01:38:36 +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-26837-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-26837-noreply=patchwork.local@lists.linux.dev; helo=tor.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by tor.lore.kernel.org (Postfix) with ESMTP id 604D42BE09 for ; Fri, 23 Oct 2026 23:38:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798714; b=rp1zPCxFsoONzySFhYSOtw6RAR5XLdZ/RIx0HdfAVITqE0JxVFUC4PCKezF/2foXGB0T VjyfkJrjJkIol55DVEK03/KobwL0RZBQjxCdBsRYWmNuB0AEuCYLRvH7l2v3d//DG0wvy dR0nhiNgPnL7/QRghjoCMbw71YY/JdIJDAsYvM7QUl03A1zPOEtl0fiZW53DMmXURWYSM nitQntpZe/UuM8t1JPBMqeZ16+4fosqZfAOkC7QYGK2g6EH32ciiylPel9222cHb2JFD/ VN0+pZX74mL6MReVSK4T7cDobTkjKl1TRftTVtUnkUpl9MJfXryAF+tLWn6gw8VGx7w== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798714; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=Yi+Mby52IcSMxw6Bb+wKdKUkb+i4YW8eVg++kxowvr0=; b=ig7YUa0OC9a9o0+uR9Mq5pQwRDXjIr7r0kEMF/lfR8bzHaFkz4QXbMWIevMUzcCJZxcC uRkX9SSk0xTClWD5RwXTK/VHHPdOerN3br3q8wniFYrQpk/2MmKe9JvPhYO6aPCwf89Qo kTpetDoKGynCCl0Qf2z9U7h9PtzpPW5DjQQPkPKW9A2WRE2IOPxPqIzEFjtCWTPLChcCH ot/rpcopSjywSfYcSLUg/wvAvv3hpxppADUbU7A5KNYdK6/Cuw2hrfsNeWJNqw3s4aMQU sE5UzsrCQmtzmkvuPwtY9Ort0LLB5km4DTsB3NK+II/A+vwuhXYYAti50n2sRhC7EQw== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=aAlFuimZ; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 252F4606A31A; Fri, 23 Oct 2026 23:38:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=aAlFuimZ X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.167.174 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798714; b=eQeNnB/iV64yMDDAmOtOr61dgX/0YVM2RLOgJZApML627vKbFqQMggXND6yt4XUr1eiF C3Y8YDbsZGr//uRFORGNyfUIjNEU0ivQSv1i5eprn6Ew6GPE44RRDwUWO4ZJ5YfhMtloU EGjYNAlFmCxbgEtepwprmRrn0+vrdCH5OtcFoDmcAtux+82Jr86I1OvHb38gS/x1ho/zT mvreOPYbKKM/4eDaIwpnRlagbeVM7GbwQYREsuIisnqvIXNDVAzCo32d5NWuOD9ku8Y16 1NFViD+FTc5f3cCZV0aistSWauPCckz52NXK2z00R3y/J4O2E4fKF/Mcvk2AezUL57w== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798714; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=Yi+Mby52IcSMxw6Bb+wKdKUkb+i4YW8eVg++kxowvr0=; b=fn4qYMTZz7S16A+QJBFu6UfXyuBGcTlZ1SjnsGg5IvYliOEiatN5Bf4T2KzJlY0Jra6T xJyaaLb22TqVBk1oSs4I/Z4WhtCHXhjx3AlgVImjvzp9jLLQdOvuTMpGzg0O4NLE6af9+ 8myj1isPth83kcSrVPDTHFNdfjuGBHi0duFnNJI50eWNrbFLcc2nF9r88ZDGCbNmlTkis IReQr67m4WmPV+yFVlfy7M+PMmzZN4vOaUPe7dnO0sSklkUUDM+b/lWT0UQfEPsVpFcAQ 2gK60ZywqyKfIdDmzD/Xow+Qqvp6ibHZtTb0D+KasiISCDpgtv1fN5tUCn0gAX5/vuw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=aAlFuimZ; arc=none smtp.remote-ip=209.85.167.174 Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE2D6606A31E for ; Fri, 23 Oct 2026 23:38:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org AE2D6606A31E 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-oi1-f174.google.com with SMTP id 5614622812f47-4b190cdc9feso784268b6e.0 for ; Fri, 23 Oct 2026 16:38:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798713; x=1793403513; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Yi+Mby52IcSMxw6Bb+wKdKUkb+i4YW8eVg++kxowvr0=; b=aAlFuimZhZncSqE0Q9BTF9TD7DLMEdaESF1btOiKsys8gpU4/49GD6TBWJFs+29Byt 2Ko+4U2GXhPbF/rLSfb/0zguU1UGcJDel6LF70i6QzYpFt64xCxk0HmKeMz6mx6nJmHE tP9f4klWDKCUC0HpiYtC5vV9S5NAGE8+o3TVDVZLACnzPFJKWi5BdwkJEZxP4uPWLkxi 7hKs1LLp00BKcqz59D3knbuDOuuaaPjkxBEM6FZHvE2BMYyUOpsVjufyCxrHEQ/d1Tbd phJlXl27wURh4OZ17miXa25GPjQykf4BlEkLT9HE6Abf2dxvC4+AwpCYkzoUMEYEDKnk xROQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798713; x=1793403513; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Yi+Mby52IcSMxw6Bb+wKdKUkb+i4YW8eVg++kxowvr0=; b=M5qcfQH/8xS0KcfcOkF6OsqO1Vpi4tfa49yI2sD6OCn5uoUddLXKvhNh6IxK+mlFOZ kCCD/PwE4NVUrgcFmCPknC1ZNLzxp1FgWu7f1LfrzzIxRMa9gPyJGqJCiKta0VoWRfqO zhkBUg9XiYNsAUt3PRFhDlEhopGS4WR3w816nrDCp13hw7EJH0BDQuKsOtELXAL3idYm muPrY2aN5tIX9+jq+n0spIgQEGO5OdhOZjaoou8+jhm10DX1IOO8YP1W2ZCCf9h7h9gI 1XnPjT7cmOHtcpSQZNUA2aEhULTpty0yT1N5TCXcizhietYTdHuJ+L/SPz2dnnR0aZ0P 0tDg== X-Forwarded-Encrypted: i=1; AKwUvByFlwUqrQcL/b546a95OnAhRsgbHK1QwRELWA+MBaEW5Pa2asa9IBcytLg2OSNhI6GoSDNkk8yfVG9VFg==@lists.linux.dev X-Gm-Message-State: AFq9FYKe8Sj68kLYp4+WnihwRDqnAxkOV7s6UOLj5pTgscC4b9PolXBZ 7lSS7ByIjQbzKg9RcuoPu0b8TWzVbQQp1u35DtGFuHqhSRmYadMH6IMf X-Gm-Gg: AYBFou35oOYsyyxrOn0BYQKd0q5uKrbjZalsJpp0xARNSB6WCv/dcO60vjlSbw9D8pw nYL+/LNszxiKSxV4iJ/jCvaD5+Xrja0O9pA5c6mp2yGAhz7w9anfqAXOQZ0L12efQlzLBntTNY3 4bC116RJTLrZRmiEKSnK0v4JJtlkY4evUisZTARmiFoohu38NVSg7myxXv0qaxYzUMWtkctIZme 5DSkVAdPxOlxjlVvKbGD4PtB/FFndb+IfHsmMofoeEdVjg8/jBQW02EbnVv0e2fnr+64xr31m2f DMLPrPogON55ZkRfihEVX2/UN/UB/fN1l44lvJm5oB8IwH3idLWkal2XlT/swVE6EIweaeS0a6P F2a/8tvNvTjL056bnH+zlU7L3fXq4p5VeyigGGr2yJ9V1n/1Ww+xjFaENgoo+E0CMLbUEMngcO6 iVsAreokEOsIsWgwl+Ji3Fy+xPgYWDq00HjXsGR4akkCeuRWtTwr6wSEiVvoyy9ZpMFDHFBIcVD IcRq/0c/C73IhF7goYE1sVSvCEdkHU8JoJ3GahGZrI0QILCJezS58RFC1n+1CbvRaBbcGOfOxFx N69Md2QtC/2fwqe58ytl9RQvVrHNcX8n/CQ7iv0gbjfDodloVKEv4MZBHdZcScVvIDPKaw18uuA SD5uVPnGaUINZ4I53kyOqNF7fWdSAwERdpSrCJqrdwDNpW955ynjVGNmELzCG77PaZScIct9/BM d8q4E= X-Received: by 2002:a05:6808:c1b4:b0:4ea:b0ab:b753 with SMTP id 5614622812f47-55c0028c346mr545139b6e.50.1792798712613; Fri, 23 Oct 2026 16:38:32 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:32 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:20 -0600 Subject: [PATCH v3 1/9] dmaengine: sun6i: fix physical channel index in interrupt handler X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-1-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard , stable@vger.kernel.org, Frank Li X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.19 / 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]; MAILLIST(-0.18)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; RCVD_COUNT_FIVE(0.00)[6]; FROM_HAS_DN(0.00)[]; FORGED_SENDER_MAILLIST(0.00)[]; RCPT_COUNT_TWELVE(0.00)[19]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com,nxp.com]; TAGGED_RCPT(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[tor.lore.kernel.org:helo,tor.lore.kernel.org:rdns,nxp.com:email]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; TAGGED_FROM(0.00)[bounces-26837-noreply=patchwork.local]; FREEMAIL_FROM(0.00)[gmail.com]; R_SPF_ALLOW(0.00)[+ip4:172.105.105.114]; TO_DN_SOME(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.105.105.114:from]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[100.77.114.92:received,209.85.167.174:received]; ASN(0.00)[asn:63949, ipnet:172.105.96.0/20, country:SG]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; MIME_TRACE(0.00)[0:+]; MID_RHS_MATCH_FROM(0.00)[]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: 9EBE31C010E 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?= From: Hongling Zeng The interrupt handler iterates over register banks in the outer loop, but the physical channel lookup uses only the inner loop index. It therefore handles every bank as if it belonged to the first channels. For controllers with eight channels per bank, interrupts from channels 8 and above are routed to channels 0-7. On A733, each bank covers one channel, so every interrupt is routed to channel 0. This can falsely complete descriptors for unrelated channels and corrupt their data. Use the absolute channel index, calculated from the bank number and the controller's configured number of channels per bank. Fixes: 555859308723 ("dmaengine: sun6i: Add driver for the Allwinner A31 DMA controller") Cc: stable@vger.kernel.org Signed-off-by: Hongling Zeng Reviewed-by: Frank Li [james: use the configured bank size and describe the A733 case] Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index 8752969366ff..9d94a37fcf10 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -603,7 +603,7 @@ static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) sun6i_write_irq_stat(sdev, i, status); for (j = 0; (j < sdev->cfg->num_channels_per_reg) && status; j++) { - pchan = sdev->pchans + j; + pchan = sdev->pchans + i * sdev->cfg->num_channels_per_reg + j; vchan = pchan->vchan; if (vchan && (status & vchan->irq_type)) { if (vchan->cyclic) { From patchwork Fri Oct 23 23:38:21 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3716 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id BE4841C097F for ; Sat, 24 Oct 2026 01:40:52 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=gmail.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-26841-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-26841-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by sea.lore.kernel.org (Postfix) with ESMTP id 62AE23E439 for ; Fri, 23 Oct 2026 23:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798724; b=AhvA26rr5Cq8QjpEgxfuU0Y0TGeZMarY+5NnOXE3PVGJFi8L0HeWLIf0dLA47r7VYAGW nu8NVpleo+W4/ipF+V7DBWkMDInRdy/lwnNZCG43dEWgmh97a70+YMcEz/6eMnuZhFwEp NeOiepDIStMlyM7f/eqYHCElgt0RoMnzc7HVQVPj9xcrXcZ0H+BZFm4COT+DpClSehSpI mdQg4jJNtsGpSnV4ohzyUEloH5OkUBHi7e4BEpv7ffXZwGQgzuMVqLYMRhsa/5e1vAcAq IQnZPUkoLW2PHU2mUcl8nnH1VOkHh2aAgtR9rfJcd9UsyZ0i9W+Nyq4MsjNIVjGrtwg== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798724; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=F1ArQRepK8gqW1fEvOkHLMAfG1V96lqFmDa0NrMk7WU=; b=iUW9KhoB0Fqoy9ZSaA2+ZEj1IoLdLVTPRPfD3QV8zDgwmOd2cSq9ys/l9fLUeHY58Wzd twaVNbU7Qms2iDOhM9MUDf1T3hKEdZP13GV9Tz5Zj2q5hBFgOuDokms3jchgG5xPsxJ2g jpQhr4cUgOWQnj4WHXPTS4ksuxVAcPoG9fcpw+dPivdTm/F6jIHxeCyipROdHdm0+Rqj+ Z4C7cDXXsD47Qe7HzDIyL4AJlD4ESHqQ5Z17IPcYruTPLJ1mwWB207tshn6YwgFBIsbes u0egarxSuYhL9uDl/hmtAKQaJnS3W2phXeRdGkYfQsrFhPq2gKlzlE8EBEEEu87LibA== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=HIwvbhrw; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DE2AF60A2628; Fri, 23 Oct 2026 23:38:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=HIwvbhrw X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.160.49 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798723; b=Xjm5a06ThLwjH/qps+U91dhmuyryURczxfT6rlPJA3RupQjHUfpugVX799c/aA8R3lyE 0BQmQeX2R39d8s8JGdRZWhaXln3UD35ri0r534vWBkFM3UCdsTMEzU+yekW7sZxHJklf0 FREriWOFdwpOzp0I2yOX4bIloX+51H1vaT8/h/IztkR8tuDaqiDVtN5D8g1dJd5nqw9EN KCpqz4BvgxkIC4s3fAF9a2XrDp4HftGqWqVAImVGleH1BqOnXKl9cuBihWkTqrnbv6LSg sGTAeFcKLu3DQY4zdGuzTHNG2QW6XQuuCV//S6tuagGAcOyX34O/DgY8OFuhkQOqKIg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798723; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=F1ArQRepK8gqW1fEvOkHLMAfG1V96lqFmDa0NrMk7WU=; b=iwOLVPSqDGY3Sb0j25ZhRNHLTgzYqGWPempcjrRpmtcb+PqbnLZLKJ9CSs7T2T/6k/Mn SYdemNjf+GUrcLm3eoaENyFgt7OSIZgXqulUASsLzPYr13pf9qcNymXldDS6hsmoVewLc BUQm8Rwj0AC8N1x0bh1aSQTBpDMyZSaT88PByYZnQCDmvKbasH1+J97+x9E7hVCbeTS1O Hnq31d6nFEhskHIPsZiWNVHLOFQ85LSPVNYYF+Ulf8frx/aAMWWOLaXFOqPdN4Ndud9Ty yn3HSUMqeh90/IpllbI6nAdL24G61fcvdQmYL5E5pNdQ7QlMbQ+oFqXDf3Ylo4AERPw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=HIwvbhrw; arc=none smtp.remote-ip=209.85.160.49 Received: from mail-oa1-f49.google.com (mail-oa1-f49.google.com [209.85.160.49]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72D93606A32C for ; Fri, 23 Oct 2026 23:38:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 72D93606A32C 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-oa1-f49.google.com with SMTP id 586e51a60fabf-46556b9e02cso877509fac.1 for ; Fri, 23 Oct 2026 16:38:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798714; x=1793403514; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=F1ArQRepK8gqW1fEvOkHLMAfG1V96lqFmDa0NrMk7WU=; b=HIwvbhrwRcJzO8lzeSaCboJIvWF8YGz0OHcdxf3sbRBAwpXSr9ekRHU4jl3QaqSIAg VNUYcEON1hAg94PvIHcUAJmIanhdik6bWNBtqYgtuN0YrKDDQB6csLhdQ1HDpKTjcidV j5E71oV8QULfsRMYviZif0kLLajNIcuTwUYZjFwVOXTfvtrEKr3izSPqpjRvB1ViQrOH gA2aRHr/JFtT+XCUND6WrYbEZGF08UIIojm8DJiSGPNGi3JKwuIT1/4DjecfpKJa2TP6 Xy6A2OxL9VEnAgapDApA5hZe1uitGHrz0hnN1EBuJq/rdsd2/UFOmC8Ed7D5qapaGF48 9Vvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798714; x=1793403514; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=F1ArQRepK8gqW1fEvOkHLMAfG1V96lqFmDa0NrMk7WU=; b=ITpldfG5ShvzsSWtJOWH8Qbg621dHsl/8zuBfEzpwE1dR5HCxBVUAwVXassKXaboBL sQMj6Oa6HCVNTP2DUgD5YMIrGns2G0u9Y6p28VtQt/U6F8QvjzKHlX+5ub/J4Nwm6s3X sV2aMo3CE3q7u2eKHrXkz95q+OvTvXDRrJayGedyEFdiZvcvZkltFOWPXA/O4ep9MhmO 9mgufSZrvl4ai0/pfHI9OajVPoVmYTUPCjPPEPFW0Vl0KaC6dULchtHfJ7D/GoiMQJ6E srY1QVYDeSw8qr8KtJdpI/SAxXfAJbQhk20eaKdxRjcFl3HEGda6dIjiyYZXfMEVL504 iGJw== X-Forwarded-Encrypted: i=1; AKwUvBwJAqdpO1bTz6QiWt6r1C2/kjWcuz8ILUTLNEA5sz7NxzRhCq7DDHW7kAQ/KdVxY+Scq4T+9bh11bf7yw==@lists.linux.dev X-Gm-Message-State: AFq9FYLrF8pSxCeUIVMW3/PGda66uc4neC9WwJOaEjBJW5T/TkyCRv+M DTtnFAlgJqopOOC5/NwJtXtPEAaz3S56xvLZ+tzxCSZzYfZ3PGkfkd7A X-Gm-Gg: AYBFou3Md+yrquoZDyXCAji/in3jv93LTWTGTqs4RQf5tHmg9XOfh37kDxsBJk7Ugz5 7RZ3XunU/b70jpY6XBDX0N0xVjIuZNALFtBvnXK4qeregmb5EKu+QoUQmRkLNmGmI3XteHGP/83 TpL+a8AR+XHeehKvQyfxv5iGv3b3WrNltr9VgSeqfJ5Ds5DAq1e9tkmAXq80Jg2qEXxaR5IBxf3 41+aoJNL3xFNTgjpj1L5uQhSMNKqLd1S8H3QZQms8buT6nmWIMDpb/0YWacRj5fF/Ra4xgy8YfU fOHwkoRWvp7xTSNkU/7KmKgWH0otImzO6C80SSHRPixilLe1kQizVLQ8ab7BlU5wKwO3Y14wPcB l5LWRMdsUi5n1E3aTfCc8as3h1x52JqeVqkbXxDO7pjoYCXdSso+0RwSk47Qm7Z+QgR5/3LgJ37 BJOsP3rVJrSuw+nWhxe0pAfpvVfYkl+wFSmiMd4JT0saB03CYSn13Lrk9Y5ABHWEKY8mhRuSBh9 M1eeaDH/l3whnfw9LovB498M6AlIbQfuy7uFNxKXPtDXc2CN72GX3iMlXcSpKi6LgcXsbclHhuI 06XrK+1ADg1q/XBLQmCqQhyEU/1OkG+bVi4m5oyt3yFvtqMF8ypBGnURSXcfL0qikPD4twnljnf KvJmNZutDjSiKpaKjtersSu0h29uXMk1Ve3vlhQV4RBAcMA3eBfr8NbqiCopRb2bQVy02DUaYca wqUMU= X-Received: by 2002:a05:6870:af4b:b0:467:e082:b93c with SMTP id 586e51a60fabf-4a83f053a93mr469646fac.2.1792798714477; Fri, 23 Oct 2026 16:38:34 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:33 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:21 -0600 Subject: [PATCH v3 2/9] dmaengine: sun6i: handle the last partial interrupt bank X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-2-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard , Sashiko X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.19 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed), No valid DKIM,none]; MAILLIST(-0.18)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; FORGED_SENDER_MAILLIST(0.00)[]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWELVE(0.00)[18]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com,kernel.org]; TAGGED_RCPT(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:helo,sea.lore.kernel.org:rdns]; RCVD_COUNT_FIVE(0.00)[6]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10:c]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.234.253.10:from]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[100.77.114.92:received]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; MIME_TRACE(0.00)[0:+]; TAGGED_FROM(0.00)[bounces-26841-noreply=patchwork.local]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: BE4841C097F 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?= The number of physical channels need not be a multiple of the number covered by an interrupt-status register. H3 has twelve channels and eight channels per bank. Rounding down the number of banks leaves its channels 8 through 11 without completion handling. Round up the number of banks to visit, and stop processing the last bank at num_pchans so unused status bits cannot index past the physical-channel array. Use the controller's configured bank size for both limits and the physical-channel index. Fixes: f008db8c00c1 ("dmaengine: sun6i: Add support for Allwinner H3 (sun8i) variant") Reported-by: Sashiko Closes: https://lore.kernel.org/r/20260706065650.34B131F00A3A@smtp.kernel.org Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index 9d94a37fcf10..3a6525dd3d32 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -587,12 +587,13 @@ static void sun6i_dma_tasklet(struct tasklet_struct *t) static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) { struct sun6i_dma_dev *sdev = dev_id; + u32 channels_per_reg = sdev->cfg->num_channels_per_reg; struct sun6i_vchan *vchan; struct sun6i_pchan *pchan; int i, j, ret = IRQ_NONE; u32 status; - for (i = 0; i < sdev->num_pchans / sdev->cfg->num_channels_per_reg; i++) { + for (i = 0; i < DIV_ROUND_UP(sdev->num_pchans, channels_per_reg); i++) { status = sun6i_read_irq_stat(sdev, i); if (!status) continue; @@ -602,8 +603,9 @@ static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) sun6i_write_irq_stat(sdev, i, status); - for (j = 0; (j < sdev->cfg->num_channels_per_reg) && status; j++) { - pchan = sdev->pchans + i * sdev->cfg->num_channels_per_reg + j; + for (j = 0; status && j < channels_per_reg && + i * channels_per_reg + j < sdev->num_pchans; j++) { + pchan = sdev->pchans + i * channels_per_reg + j; vchan = pchan->vchan; if (vchan && (status & vchan->irq_type)) { if (vchan->cyclic) { From patchwork Fri Oct 23 23:38:22 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3713 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id 7ECDB1C010E for ; Sat, 24 Oct 2026 01:39:36 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=gmail.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-26838-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-26838-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by sea.lore.kernel.org (Postfix) with ESMTP id B0D5E3A86B for ; Fri, 23 Oct 2026 23:38:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798717; b=ziOnj+s6Ir6RTFvm/t4WM3e0I85jo4U/zojxsa1QNGRZXZB+TDCiMoVOAA2phUXNO1Ey shhi083ojh/gkeI/dMKppRQUQfjOS+Mdb0QEREjS71/40jcDG2eFCewz6LyePDuN7/jBv iP+Nl6h/gm4rD4g7dBbgFc9085/gHWRSew/etDMllEi2rs3VLdMSeCcepaGLQu6U3Yb6I pU40IWMmp/Mr/yQU3UjoF/U+/7UGtDLk+zXUugrzkyYVBQTJGJDwv4NjVUM5YWJj1Gfzf AEZzIN2lHBbMxR5CGBZdjXcsyInKJwLOFHNl5ZKcHkGv+ZMZydL3MFa6mUgpOXO1myg== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798717; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=YfW4t08Q03X/zUbnd8o9mtH6qAgwrZpASG2xurECUh0=; b=sJo6nUb+w9eT6YarKMmF5F7IneZdu1TitdlDDemYCZAGXgXrteqOmXe5qbOiyTjzu0Q+ k5m+nRIWamf8W2cU0/b6X4p6DteJNI6jfTisKK68PCWb6mnZuiCTEuEdp4OnX+4ul0/4D LTIUCUIDj9EitAdRosDeKyiism19z7mSv/z0BDdEYD/cAZf61HRknQVgj++so75Q+In0q MWT9D1Xo8VAORDmQaAysyqfOtCqK7R5bC1bhSDNzAeyTdz/orgC/BI9iQGWKhibUolzQw AskLvg8/2FXjJjAniZRhOD3UW7TcyDni0MGsXIC6sjTJBwbqCP1An7+3QB6HFIvuIOw== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=XnnfYy5Q; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 80E43606A327; Fri, 23 Oct 2026 23:38:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=XnnfYy5Q X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.160.47 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798717; b=DVAA7+O5jxQORxrK9jJ1mTslVKBbbFv+ygf2bi+kbsvSML7Vsp/S2LKXzXVAG34HW7Tb TSr1MN1qS7oEx2EVxLpOC6BC2F8SHO9UNWvy1VXPlTfZIhbOjJlbHFSZn5gx1tp28UOAV RBoe265gnkAXDl0bUGPnpv8RXQV5t1BFvgZ+O/2SxawDeD+1ZANGCUz74cz0riVJw9IAh hBdq4+u/71GhV3Zkla0OO9jlUOVUTSlXMUi1CqKn+Mtpu/brBYHMj2FzjReBRKEttJCPO 6c5pgk8R9bCUp9MFcz0MiHq4e7rOg4IEWEwLYR1JUjr8XMKs1mD89YwwU9YngQPJ3qQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798717; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=YfW4t08Q03X/zUbnd8o9mtH6qAgwrZpASG2xurECUh0=; b=vKmaclwxLcmvnieIjAjfxZQeuyrWMxmrEehy6icjVwGi5EJQI88rjSYDIU2YrUbbdZv2 Nom8qKn0LTQkPHGq4e0rgJba+WdFCk6E3swzkYhLV5ymtv149EChJZdAVNgKsVn9NDc6E ff+j5mmTQ1PPv8L5djamYSWvXxHGME8k6rpR+qeGc2ecHUHqYriwUhc/1FcyIA722iWG8 TZ3XvhJ1a83eEpTM2QJJ7Gh/NEgft52DqAlLbTbM+3UJCLvvQ4K8a869pLaIwOubszAxj Y6P/mbwuy3lH+o66xCmpoZUNn45AMSe4TB4Oxg8pJajfRRw8rpdBqleL/8pf9XQzCzg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=XnnfYy5Q; arc=none smtp.remote-ip=209.85.160.47 Received: from mail-oa1-f47.google.com (mail-oa1-f47.google.com [209.85.160.47]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 13A20606A334 for ; Fri, 23 Oct 2026 23:38:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 13A20606A334 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-oa1-f47.google.com with SMTP id 586e51a60fabf-48e9476e26aso563375fac.3 for ; Fri, 23 Oct 2026 16:38:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798716; x=1793403516; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YfW4t08Q03X/zUbnd8o9mtH6qAgwrZpASG2xurECUh0=; b=XnnfYy5Q0YxTr0zfxo/RgjMmLrqGTL66B1NwxGM/dQkTI5TB7PuTduUXQtD7NatRkx 8xXvAPQ0iHiS1WhxTaN2SsWUB2xq2W2ViVLj/fzmmyAh2B5pkmwaBwdnVvQGHOp0jqGD lYvNIeHoyIarta2l3pJCT4b0QkIaKun6gUFo3yYEqwivbt+/zaz04ZpXSOkLccKwiVmp LmPCrnBoXNTSaCDbLTGuKQVj8voeWPOPX70NgQSh7PfWevEHygHQ3X5bdFXjcY+D9NTe ONHPexGkXZ5zgX6vLG6lgMZex7VtT3E4LgSQ/G51ECQSSO1/a4mceaptLBmocuAUgsPb FNPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798716; x=1793403516; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YfW4t08Q03X/zUbnd8o9mtH6qAgwrZpASG2xurECUh0=; b=yZpnhwlTKF+c4XnCNlkiG611SxsAT5G0uoTWrJg9jQ/Yhc+4MNjv+CZqKFqgivDH6M igFKjVEVUypq1h50vVg4gloV+J1Ud3dYjafINj8kLPc2W6TbFM7i0L7KbBCMppARlfTr wl5Ytv0gon4a37/mxkb5Z3r90iys7Mnt6onqKnBegc+thBvP3cwI+bGGJVKSNLrp+tAo hH0Dq+PV5Im0suKGfmWymu+LhWq9rYsjlBlBfajq17btV9JUqW01i5DhcqzqzwUk7c5G zBPlINWB9QkKiJPu7ghKrZHqX+echEhaKYuZX0Vqc45lH/65tpQh0CZdfeseIMnrajsz n74w== X-Forwarded-Encrypted: i=1; AKwUvBxrdSaiLbZ3SYmGZDXfpY5SLsHAp0Dksy/yGpNJ9XhxNCb1W+ZSICeheOYoaxsRmRD0H1GAafLzH9NwUw==@lists.linux.dev X-Gm-Message-State: AFq9FYLUIJb1YwDhIH0HKiqSjW7rfRGruChUeTkAy6slKhyVaZVn442J 1jJ3MZlqIbE39W2UkDhQHf5HvXJNsIRYeYd3I2IHyGXhqxTb3SesEoDQ X-Gm-Gg: AYBFou0hoNXePYLKXLbaDWjKp5O+/ertJFB+RU1pJibatpQ+nfsa+QU/urbBsUWe5GT TsQEpL29/dgZUxCho+IpZ9Z5mTZzSUf3uwq3yW2VcL9Ai5OevkOOleN7mm1w7QXcrlEJ/uK/TZN mObfBQOx9KNMUW7H8UXSes+pAAzOtOZ7qqFiuK8LA36XZtuvkyNmJcxHJin3hozr4xeIdT9h8yj TcxDykLggWxuVnzdxmfuEoystBeC96coyQ1z3bNz2seYsMIdohVrXx/HrW6dRjbtL64ekteSp2Q 0OK6AfO1Adfyvy6m1wtrN78J4UyLZMf7xAIq3tE6BXLuun0fdSnkgtKs8gK7/0Y+ELUyY4cE5hy JDVliXz4wm9faRmcqqq56VTeXhmjPnL3Dea6fPihjVucGnntZ6LwBu5H1wl+yZLfaeLCzpANfu1 VO737aQZji2PAn91P1U7xn0yN9Gyw9P5PHb6UJ5MSVG+pIU5UN+VJ9c2J04PSCWMm8BQNgMwI5t ZtHyjvGPjeSzK7VJuiOLSSGw7e/Mzps4VFH//cfMVO72B8P/2n3eLyLUjWZMg1Lu0bAcep6DOvp ch22OVJSuKIY3/KFpJGeUO+QEsIQvEqq17eThyYX5Z3Dg7CQI4NikrMHGZvbXXxU1JZhLCwzL1u sU90elQTeA/BPb7kaK8ORL5Wy19CKNnELneJXtP6yxCiHxbCmvN6G3S3OYowsj1f4XMOliw/egA AgBsUw X-Received: by 2002:a05:6871:878b:b0:4a7:443a:e6cd with SMTP id 586e51a60fabf-4a83f1d782amr611734fac.6.1792798716050; Fri, 23 Oct 2026 16:38:36 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:35 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:22 -0600 Subject: [PATCH v3 3/9] dmaengine: sun6i: take the device lock before the virtual channel lock X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-3-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.19 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed), No valid DKIM,none]; MAILLIST(-0.18)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; RCVD_COUNT_FIVE(0.00)[6]; FROM_HAS_DN(0.00)[]; FORGED_SENDER_MAILLIST(0.00)[]; RCPT_COUNT_TWELVE(0.00)[17]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com]; TAGGED_RCPT(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:helo,sea.lore.kernel.org:rdns]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; TAGGED_FROM(0.00)[bounces-26838-noreply=patchwork.local]; FREEMAIL_FROM(0.00)[gmail.com]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10]; TO_DN_SOME(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.234.253.10:from]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[100.77.114.92:received,209.85.160.47:received]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; MIME_TRACE(0.00)[0:+]; MID_RHS_MATCH_FROM(0.00)[]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: 7ECDB1C010E 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?= The pending queue is protected by sdev->lock, while virt-dma uses vc.lock for descriptor lists and cookies. issue_pending() and resume() currently take the device lock inside the virtual-channel lock when queueing work. Take sdev->lock first in both paths, and inspect the physical-channel assignment after acquiring the locks. This establishes the nesting order needed to keep allocation and descriptor startup in one critical section. virt-dma preparation, submission and callback processing continue to use vc.lock independently. Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index 3a6525dd3d32..435d7daa1c0f 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -952,23 +952,24 @@ static int sun6i_dma_resume(struct dma_chan *chan) { struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); struct sun6i_vchan *vchan = to_sun6i_vchan(chan); - struct sun6i_pchan *pchan = vchan->phy; + struct sun6i_pchan *pchan; unsigned long flags; dev_dbg(dmaengine_chan_dev(chan), "vchan %p: resume\n", &vchan->vc); - spin_lock_irqsave(&vchan->vc.lock, flags); + spin_lock_irqsave(&sdev->lock, flags); + spin_lock(&vchan->vc.lock); + pchan = vchan->phy; if (pchan) { writel(DMA_CHAN_PAUSE_RESUME, pchan->base + DMA_CHAN_PAUSE); } else if (!list_empty(&vchan->vc.desc_issued)) { - spin_lock(&sdev->lock); list_add_tail(&vchan->node, &sdev->pending); - spin_unlock(&sdev->lock); } - spin_unlock_irqrestore(&vchan->vc.lock, flags); + spin_unlock(&vchan->vc.lock); + spin_unlock_irqrestore(&sdev->lock, flags); return 0; } @@ -1057,25 +1058,23 @@ static void sun6i_dma_issue_pending(struct dma_chan *chan) struct sun6i_vchan *vchan = to_sun6i_vchan(chan); unsigned long flags; - spin_lock_irqsave(&vchan->vc.lock, flags); + spin_lock_irqsave(&sdev->lock, flags); + spin_lock(&vchan->vc.lock); if (vchan_issue_pending(&vchan->vc)) { - spin_lock(&sdev->lock); - if (!vchan->phy && list_empty(&vchan->node)) { list_add_tail(&vchan->node, &sdev->pending); tasklet_schedule(&sdev->task); dev_dbg(dmaengine_chan_dev(chan), "vchan %p: issued\n", &vchan->vc); } - - spin_unlock(&sdev->lock); } else { dev_dbg(dmaengine_chan_dev(chan), "vchan %p: nothing to issue\n", &vchan->vc); } - spin_unlock_irqrestore(&vchan->vc.lock, flags); + spin_unlock(&vchan->vc.lock); + spin_unlock_irqrestore(&sdev->lock, flags); } static void sun6i_dma_free_chan_resources(struct dma_chan *chan) From patchwork Fri Oct 23 23:38:23 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3717 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id 977941C010E for ; Sat, 24 Oct 2026 01:40:59 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=gmail.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-26842-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-26842-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by sea.lore.kernel.org (Postfix) with ESMTP id E2F7B3FE64 for ; Fri, 23 Oct 2026 23:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798724; b=Q52uKfiulhVZzqy/aR232bPUiOqMk/hm/dH9DU0ibRRAi0Ium81CKPx+mZvHkmo4JE10 FJzkTGdOvDG/q4tEYzgkWQtXWT0MNxNrehnFFfWjpC8Ksifdrha28X5U3E18XtItVW8QD PPeq2yLZ4+8Dgq6w3Qu5FgXQ3ZzOXsZY4EHKI0b7BNubWez4EamoKNAw6ss9g+3EjfZch 2tedJCuVbdcYuCAxj6guTYy2zCnCMqYnKPlRcVq7y2YaQbAAwcmnoWeVElZveFaB3vui4 9lHBpUz8nv+LT59i2115wrOb2W/WaYkyIPOoBJ6nbdz0v1MxphZN+K+ODCTRB0Px9JQ== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798724; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=GUQ9hlCoo6Dy1AIQut5SiYH7FfRIMv35mZmA2VeNSQQ=; b=r4HwOJ3B7JHDt7p09k8KEX98cfmw7ooLuy0cW0fRJUPIGEM9maPokGtASf1vRJ2wkb/3 D/yOhuLw23WxER48CMHN2Rlq4Cs4f1lQSaiIiwiaFDJkXp2JT6hUrHC2Tqus22DBWfXOL Vhb6FuXxK8r8mJBOHYSo2Wt+Nr4dVQcsInoZ8TBsEYyEekw5Bw7ZE4ewFivmMCa8hHHU5 Rg9nbi3m4Q5MVKQcHy94wTEcBjg8yUkMyz3zZi8kYrufw5l/ZjMzB6qc096g+jwc/1IUD qrS1iQctqT3vwpN65VkHDaOJ6Q6i+Ju1c65nt66yLGoYklQZozO7YURM5XLgifNTBEw== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=lrcEtnWZ; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3C99A60A262A; Fri, 23 Oct 2026 23:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=lrcEtnWZ X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.160.45 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798724; b=UA0YffW9vRXqlISpTGzMdjEs5hrfZX0fTuEyb9MIHZKG/F6NLWThDdIWWPSOqVRWew4u Nx0yEBhffga4cNIklNcYBiof+iDhM0jK1oApZX8zFGbxc2vCLjV4ESNP5KalXRuFVsmbt 6+hncr8FVa2NX8G5NLFsYm4sThB9OF61mO1bJIQIqgCQTKYDBzxiUki5b59n6lTaJKdIv sodXXCF+KsfCU4kJ6aDRwqVMR8h3gvqoT9fj51ndJIYve5RLnJ3T5uvIRw4FvHpa42EJ+ j6mM5tF4hH6v6N6xjwn+4E7grHSnP61lbLwMdob8bqHDuTY1Trbr5h0+JFSlBgMBI8Q== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798724; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=GUQ9hlCoo6Dy1AIQut5SiYH7FfRIMv35mZmA2VeNSQQ=; b=siFtp2x0FxRnaEj0wHaeUO10ZM/YA4+0YFKi4IBGLn8vOf8QTTLD9MmmWOFGoMMPwIe2 ZiJpavdzvclHBo5H6rzjRMl76XHu8/qxJH1CGx+yVHnZm591Vjkt/dYTXDY0CEZxUAHGo 9i0n28yo5Eex/BdocDMiqDFWDvS7Dvu7uLNHVs3CajBBk1fH2kbBGR5Qp/HFdVLOlKROX 73op6wnDcuDyYjBDzIsP14b5w12BNGNFSW3L4iw/1JGqRC6/RWPcAvOPHD4f23hidVEej HfzlJpNHMXvcYLO1JSF27Oqt37s6E9ymH85972nIjDCwYZ3V2gRRy1GCmsj4En/Pqog== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=lrcEtnWZ; arc=none smtp.remote-ip=209.85.160.45 Received: from mail-oa1-f45.google.com (mail-oa1-f45.google.com [209.85.160.45]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C6918606A33B for ; Fri, 23 Oct 2026 23:38:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org C6918606A33B 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-oa1-f45.google.com with SMTP id 586e51a60fabf-4a6bb779d13so743543fac.1 for ; Fri, 23 Oct 2026 16:38:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798718; x=1793403518; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=GUQ9hlCoo6Dy1AIQut5SiYH7FfRIMv35mZmA2VeNSQQ=; b=lrcEtnWZ/3zB+2P18o9xVPMlfDppOjyf3Q96T58IX0MmvVjWXJNBrDO+GmrRwgsrPy L4UzSSefw5XMYBWs+QbjOIjRmA8bRc9ziNlmwT7McU/K8vygoHUNl92NCuD0V2a81CtW hQ/DPdwnpRhXmzCOp2aFShl4cA56UTY43cr8yU7GJoldZ1M5lINLSlA5lii1hriTc5Nq J4i9v8UXkGJUMaAbDM6N7gnIJnoRipWJEJoDXJTRxaTE6woK7SKx6OsXTE3NwUbfddwl fkbcZ23VtPXSWkdmCG6w8re8jP2OUTT0fUUYd0SvapqNADO4FOS0/GxgfftQrxED11Tp EIYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798718; x=1793403518; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=GUQ9hlCoo6Dy1AIQut5SiYH7FfRIMv35mZmA2VeNSQQ=; b=1QNsdp2/5OKfsi3S5XhXCImu5ZWtGw/ehad/+Yfp6BKkxhO4FoaZp16b5kuQrTzm2l Fcc+KbZvGKU31VeRmIM7Epooxu00RYOETWjbEaRuTKTlGoYTJx2x6Wz2yh9JGULmpXW0 nM6ptrYlp3oHijFnV/575T7ubYwubYyTei3XQ3+Oo38yH/QQG+0DvNHyd4fwvdM1ThEM NaBrsrI9sC4gIPsyGIFe9C30JHrl9Tay4VSXbQQ2fK2NHt6GhpJoakxHxJMtdI0eRzP8 rGI9EveWbHQr+qA6edkq6z6CrFFIMERqozKvY+UC1EFpKDP0RWidiUv7/ve6p4x0FJ/g itAw== X-Forwarded-Encrypted: i=1; AKwUvBwD3p2PFKN2xAprA2HORJqMShuIFuCOHSTmsiA3JO4K5rj4LRBwonpdsaFe8m00CeltJ7R9pIkNIt+sEw==@lists.linux.dev X-Gm-Message-State: AFq9FYKBx4ljGE/L56NcsMbgJaP/ylRMQJkyPTr5dvuXuzcFCUML3pT9 iX5Ptiqt5CO2tksBNSZXRHAgG7QgXNZihWhZ7FoWljazXpM9xiyizHN2 X-Gm-Gg: AYBFou16u6ckMIIE4j516kijAz/h5ZoQvdvR8O8nehaNUGsMsKcIJHtjCsMs3ZS7uqC O5H0treo6BOIhHQV9KY1QS35NFbH5byM4Rry+av4NtSuvdbIs1eCxSDOsEa3sEaXhaxztnyFXw0 AOBKRtd3oxqZBRQWs1A/DcVq3z2o/CPzqDxlFtmgrgvXbTlSausIWuBRG4LOTAlF8iJ3zYy9j9j Bg0enKpOpOakUVZJvDeChZhMmHiMfWwLUXkbpqZ8UWm+gnZQTGbrhM9xXGbw/KuKl2v4N4qsz5B CRQCaPKVfEtrM4QduF2Z+pAZILzTY8v6Z7FDYdFBG7mqcZNZuxjQdwJH8GTcSBHYIf+3YvGiGqS 0btv42e5N6zQpfpDh00t9HM9GsfE1L4gVxzQ9gMjlM76XrbGVnsmanF6x3oSQtcbuGbdNkeHkWi pd9iEBx6WSLNkg67sYkGUVmYEJJhNeVh6C6cq/D5++6nIlRHkmrQE6D14McQfE3hd5K2oH2JFNy teuHesYuXhvJ796segf0iwR1hPH32UTYLen6IHhU5R6fk2z53ZhlegxK7yDA6Jp0/j0YLnEDyWK QaAPx6UP+fNredv+6F2wuGwFO7W4jCXTJuNz7ImHhPcKq6XTVVRMHFNLZzZyZ9lE3Iweob3uOfc Fuoy5jEYfZhryaIEwUPYaowCaNbK+z0aPzzdMazkZ8n6oPjh2gFTPaA/s+YQiB9kMIKW7Tz312O vZGMM= X-Received: by 2002:a05:6871:4715:b0:4a2:c175:d339 with SMTP id 586e51a60fabf-4a83f58e426mr639235fac.39.1792798717749; Fri, 23 Oct 2026 16:38:37 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:37 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:23 -0600 Subject: [PATCH v3 4/9] dmaengine: sun6i: serialize physical channel ownership X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-4-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard , Sashiko X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.19 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed), No valid DKIM,none]; MAILLIST(-0.18)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; RCVD_COUNT_FIVE(0.00)[6]; FROM_HAS_DN(0.00)[]; FORGED_SENDER_MAILLIST(0.00)[]; RCPT_COUNT_TWELVE(0.00)[18]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com,kernel.org]; TAGGED_RCPT(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:helo,sea.lore.kernel.org:rdns]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; TAGGED_FROM(0.00)[bounces-26842-noreply=patchwork.local]; FREEMAIL_FROM(0.00)[gmail.com]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10]; TO_DN_SOME(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.234.253.10:from]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[100.77.114.92:received]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; MIME_TRACE(0.00)[0:+]; MID_RHS_MATCH_FROM(0.00)[]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: 977941C010E 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?= The allocator changes vchan->phy and pchan->vchan under sdev->lock, but termination reads the physical channel before taking either lock. The IRQ handler also takes an unprotected owner snapshot. Termination can miss a new assignment or detach an owner while an interrupt is about to complete its descriptor. A sampled IRQ can also be applied after reassignment. Protect physical-channel ownership with sdev->lock across allocation, interrupt handling, pause, termination and residue queries. Read and acknowledge IRQ status under that lock, and allocate and start each pending channel in the same critical section. This also serializes updates to the shared interrupt-enable registers. Nest vc.lock inside the device lock when accessing descriptor lists or updating cookies, including cyclic notifications. virt-dma takes vc.lock independently when preparing, submitting and completing descriptors, so the device lock does not replace it. Client callbacks run outside both locks in the virtual-channel tasklet. Fixes: 555859308723 ("dmaengine: sun6i: Add driver for the Allwinner A31 DMA controller") Reported-by: Sashiko Closes: https://lore.kernel.org/r/20260706065650.34B131F00A3A@smtp.kernel.org Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 67 ++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index 435d7daa1c0f..d3a63c866645 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -217,6 +217,10 @@ struct sun6i_dma_dev { struct clk *clk; struct clk *clk_mbus; int irq; + /* + * Physical channels, pending list and registers; nests outside vc.lock. + * virt-dma also takes vc.lock independently for its lists and cookies. + */ spinlock_t lock; struct reset_control *rstc; struct tasklet_struct task; @@ -524,11 +528,11 @@ static void sun6i_dma_tasklet(struct tasklet_struct *t) struct sun6i_dma_dev *sdev = from_tasklet(sdev, t, task); struct sun6i_vchan *vchan; struct sun6i_pchan *pchan; - unsigned int pchan_alloc = 0; unsigned int pchan_idx; + spin_lock_irq(&sdev->lock); list_for_each_entry(vchan, &sdev->slave.channels, vc.chan.device_node) { - spin_lock_irq(&vchan->vc.lock); + spin_lock(&vchan->vc.lock); pchan = vchan->phy; @@ -545,10 +549,9 @@ static void sun6i_dma_tasklet(struct tasklet_struct *t) pchan->vchan = NULL; } } - spin_unlock_irq(&vchan->vc.lock); + spin_unlock(&vchan->vc.lock); } - spin_lock_irq(&sdev->lock); for (pchan_idx = 0; pchan_idx < sdev->num_pchans; pchan_idx++) { pchan = &sdev->pchans[pchan_idx]; @@ -557,31 +560,20 @@ static void sun6i_dma_tasklet(struct tasklet_struct *t) vchan = list_first_entry(&sdev->pending, struct sun6i_vchan, node); + spin_lock(&vchan->vc.lock); /* Remove from pending channels */ list_del_init(&vchan->node); - pchan_alloc |= BIT(pchan_idx); /* Mark this channel allocated */ pchan->vchan = vchan; vchan->phy = pchan; dev_dbg(sdev->slave.dev, "pchan %u: alloc vchan %p\n", pchan->idx, &vchan->vc); + sun6i_dma_start_desc(vchan); + spin_unlock(&vchan->vc.lock); } spin_unlock_irq(&sdev->lock); - - for (pchan_idx = 0; pchan_idx < sdev->num_pchans; pchan_idx++) { - if (!(pchan_alloc & BIT(pchan_idx))) - continue; - - pchan = sdev->pchans + pchan_idx; - vchan = pchan->vchan; - if (vchan) { - spin_lock_irq(&vchan->vc.lock); - sun6i_dma_start_desc(vchan); - spin_unlock_irq(&vchan->vc.lock); - } - } } static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) @@ -590,9 +582,11 @@ static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) u32 channels_per_reg = sdev->cfg->num_channels_per_reg; struct sun6i_vchan *vchan; struct sun6i_pchan *pchan; + unsigned long flags; int i, j, ret = IRQ_NONE; u32 status; + spin_lock_irqsave(&sdev->lock, flags); for (i = 0; i < DIV_ROUND_UP(sdev->num_pchans, channels_per_reg); i++) { status = sun6i_read_irq_stat(sdev, i); if (!status) @@ -608,14 +602,14 @@ static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) pchan = sdev->pchans + i * channels_per_reg + j; vchan = pchan->vchan; if (vchan && (status & vchan->irq_type)) { + spin_lock(&vchan->vc.lock); if (vchan->cyclic) { vchan_cyclic_callback(&pchan->desc->vd); } else { - spin_lock(&vchan->vc.lock); vchan_cookie_complete(&pchan->desc->vd); pchan->done = pchan->desc; - spin_unlock(&vchan->vc.lock); } + spin_unlock(&vchan->vc.lock); } status = status >> DMA_IRQ_CHAN_WIDTH; @@ -625,6 +619,7 @@ static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) tasklet_schedule(&sdev->task); ret = IRQ_HANDLED; } + spin_unlock_irqrestore(&sdev->lock, flags); return ret; } @@ -931,19 +926,20 @@ static int sun6i_dma_pause(struct dma_chan *chan) { struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); struct sun6i_vchan *vchan = to_sun6i_vchan(chan); - struct sun6i_pchan *pchan = vchan->phy; + struct sun6i_pchan *pchan; unsigned long flags; dev_dbg(dmaengine_chan_dev(chan), "vchan %p: pause\n", &vchan->vc); + spin_lock_irqsave(&sdev->lock, flags); + pchan = vchan->phy; if (pchan) { writel(DMA_CHAN_PAUSE_PAUSE, pchan->base + DMA_CHAN_PAUSE); } else { - spin_lock_irqsave(&sdev->lock, flags); list_del_init(&vchan->node); - spin_unlock_irqrestore(&sdev->lock, flags); } + spin_unlock_irqrestore(&sdev->lock, flags); return 0; } @@ -978,15 +974,14 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) { struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); struct sun6i_vchan *vchan = to_sun6i_vchan(chan); - struct sun6i_pchan *pchan = vchan->phy; + struct sun6i_pchan *pchan; unsigned long flags; LIST_HEAD(head); spin_lock_irqsave(&sdev->lock, flags); + spin_lock(&vchan->vc.lock); + pchan = vchan->phy; list_del_init(&vchan->node); - spin_unlock_irqrestore(&sdev->lock, flags); - - spin_lock_irqsave(&vchan->vc.lock, flags); if (pchan && pchan->desc && pchan->desc != pchan->done) { struct virt_dma_desc *vd = &pchan->desc->vd; @@ -1007,7 +1002,8 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) pchan->done = NULL; } - spin_unlock_irqrestore(&vchan->vc.lock, flags); + spin_unlock(&vchan->vc.lock); + spin_unlock_irqrestore(&sdev->lock, flags); vchan_dma_desc_free_list(&vchan->vc, &head); @@ -1018,8 +1014,9 @@ static enum dma_status sun6i_dma_tx_status(struct dma_chan *chan, dma_cookie_t cookie, struct dma_tx_state *state) { + struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); struct sun6i_vchan *vchan = to_sun6i_vchan(chan); - struct sun6i_pchan *pchan = vchan->phy; + struct sun6i_pchan *pchan; struct sun6i_dma_lli *lli; struct virt_dma_desc *vd; struct sun6i_desc *txd; @@ -1027,11 +1024,12 @@ static enum dma_status sun6i_dma_tx_status(struct dma_chan *chan, unsigned long flags; size_t bytes = 0; + spin_lock_irqsave(&sdev->lock, flags); + spin_lock(&vchan->vc.lock); ret = dma_cookie_status(chan, cookie, state); if (ret == DMA_COMPLETE || !state) - return ret; - - spin_lock_irqsave(&vchan->vc.lock, flags); + goto out; + pchan = vchan->phy; vd = vchan_find_desc(&vchan->vc, cookie); txd = to_sun6i_desc(&vd->tx); @@ -1045,9 +1043,10 @@ static enum dma_status sun6i_dma_tx_status(struct dma_chan *chan, bytes = sun6i_get_chan_size(pchan); } - spin_unlock_irqrestore(&vchan->vc.lock, flags); - dma_set_residue(state, bytes); +out: + spin_unlock(&vchan->vc.lock); + spin_unlock_irqrestore(&sdev->lock, flags); return ret; } From patchwork Fri Oct 23 23:38:24 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3715 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id DE2C91C010E for ; Sat, 24 Oct 2026 01:40:14 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=gmail.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-26839-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-26839-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by sea.lore.kernel.org (Postfix) with ESMTP id B75E63CEFB for ; Fri, 23 Oct 2026 23:38:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798721; b=rAwa08BO79kzHIzPph3ohhyM0IMigt2A8khygbK0H1XtD+jbXXzlURFuTflBpxHeC/3G Ij2pxYBO6Ugrp2T7KtWiHG/7e8oITxBzAT8KsscLnY0C+bbsVgMUqClCr+FhXLJBGnfOH zJpduNniA0TkBSayxlq6ZLuQK3oqAa1G0p3tNcmzS73/QElPo9JOS5MXTfL+7FjEnYnDn YtvLMKp7A1RYdI32LmSldTR6sjt9207mu4nHlAaCXLXEbFCqV6NBqfOQ00IyWSBIejtAZ cqRqieV5s8zUKSkDVlRcZdmlc57x/qkIQ8ksEaFgZWiPTtXq1VNyVSPffVzQzaBIKRw== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798721; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=vk26c3BTQSmOJJ6zClJ284dH3SqVTC5An1nrNJrjOFw=; b=NZ3A8yYvXe0C692JFBXKB2z1JDg9uzvgC9BYc5C/dmWdwiDal5BCdW1oKn5GnuQ3JXo/ wAuKp4gUgbhsAPHFH08GaP3sWC3ch0NjMUho71CQ2FxLx1xXJUgry4z4A0yCx4mE15EHs dGa5Uga27f4iRQQop1z71H6gaBKyZ0r2wMDoxgvKziESb5c1BMhT+hVfxYKaQPkmeEVaz T5PfKgGg5l4qjP/OHXTuOfZMLJCx/y4rn8F9VrfCvmpvSjpaZiN4QIm0fT8kzVXPwXGSA RwknBijAuJnvydWmClYb9N6RIOycsvhpLGm5pilS3GJjXTJr0zPr5Ds1yKMJVhqpYzQ== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=YUOpcbFM; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7357060A260B; Fri, 23 Oct 2026 23:38:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=YUOpcbFM X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.167.177 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798721; b=NJClIsJPXAu143F8SZN/y+blBgiWgv+KEfkuGniAP1ZcnDRxaoZX1QqR0XhkEbHEPET8 ARPLDNBycapekOLDgIzAUsN069IovEk0ymbE7XKPVGL0mAWBFg5/YlTQjFg+UbD67mnsc cvFn5y851DwdfSKwIugKQsLsCBJgwLnNGdO9MOgjetIP3hl2r3ThM35Hhh4aELWVYxxT5 OzxpWcN0ZA3bd0LuqDJ0c58TTg4RjfsxpjTRvbJ8iQ3Duh6YZl8bEqSKW8GEqoyHTqE0/ R0p3pwWwCVVIZ8SGkjBaeh/MGDRopmli1omfirbDR/x3GNWpECgGxc70gHwBYIsPI6g== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798721; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=vk26c3BTQSmOJJ6zClJ284dH3SqVTC5An1nrNJrjOFw=; b=MBWSXfQbyVhu7TvyAaJxx328kCrRp0JfMepZPYPjuuFto07w1Ie/ebSdzr4IBfmxGBtP xcD0ZUsuCWcgy6s2uBJMpdK0VaP5TBLt+01UC88cM9wCxvUVQDaU7iO5EJrd24lkMGntP f9bq9VFvcaydhJQrGzLuT03Zo1AaNYttZPQYwGhW2jUHyEh6RfLhdZosvVLul94U+Kf9Z GBycV9/Xsry0JDK0KfBtdrVkFEY9jT1o9K8+snLJshNRVjh6Wz1zFoOON9QYLaDT1t1wF /8SeTN4AUPhzCmuvhvUEP1NRQyTBnjvx5vC7DBNfNQps8qLTxiSrBdB8a2tzW3Rumww== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=YUOpcbFM; arc=none smtp.remote-ip=209.85.167.177 Received: from mail-oi1-f177.google.com (mail-oi1-f177.google.com [209.85.167.177]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 65E9560A2609 for ; Fri, 23 Oct 2026 23:38:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 65E9560A2609 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-oi1-f177.google.com with SMTP id 5614622812f47-55651e7de9bso776612b6e.0 for ; Fri, 23 Oct 2026 16:38:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798719; x=1793403519; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=vk26c3BTQSmOJJ6zClJ284dH3SqVTC5An1nrNJrjOFw=; b=YUOpcbFM+aErvs4u36vrzZFSCMd9mrIuB4ptO3MN3SrXRMggI1fVrY0XobPuLTXd6r jT8v5byoP19WDHlXhl5Oi0QBAfQEIoPFP6PICFU+Dt8qZBo6HfH/Ed3E5JbC59B2enpL 55KnzR+hWZydtYSvpwvhKISnLISulV4/FTwvfNQON+srtYr1uPWPULR4rcDWwnX4OwLF PlLuG8YLjb4srfdevVrcl89xYTdWgwDWoAYEHFVZJh96nrHKxL1rmjSEfNYLH2Uq2N1u YaBuWUjztOypUsem0oUlvGqlnLwhZsTrJjoQzjMdo7n6eHackBPv8R68vzQf7UPKFtc4 i8DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798719; x=1793403519; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=vk26c3BTQSmOJJ6zClJ284dH3SqVTC5An1nrNJrjOFw=; b=qOxEjk2YHh6rBKNWzlXIrc07/Qoqmr9sBoyTQi1NgFgXd3961OGkb/RkIEVaJ2l1gK ir/HIjSfDIPTeE4GwWd6B7GxAzT7cepk5z5TxklKp1EzXfrTkY0i4/dmBS8HBOu74tXV zIkRRw4DnwpWz8cTL5MMkUc02tW4psuq/Q3jBfmgjFO4n+IV8UWb3RjZJ+904K/5In0u zYw7na4lktDrC6chlQrrjgBgzsJidMwb9OCnQ5ybRXlQcHJw3Z4vax5bFDz2oN7eBYlN 7/dgBNbVja4dkqEm5rO9ToWy0t4cjcuJf4EM4G5mnrA17u7akljewxgtLPXgrZlHYzQY 6ytQ== X-Forwarded-Encrypted: i=1; AKwUvBwI04coBD7r/p+2NbuAcSAxrkf9uH0za9mdeHe6rUCmqmLvwiD18m2CkSMLQenSj/+9zwO/ewrAASQj+Q==@lists.linux.dev X-Gm-Message-State: AFq9FYKbr3Lr6blWWTByLA20ujPfSr9LbtAym8IxN7fAZqmDzgMgZlNx Wym8Q7slx+fH1WTFKq83baLyC2HDFEquSB8kKakXkIS9RAVdOZPF7WC2 X-Gm-Gg: AYBFou2DL7MkKDgSWRpVWttiBBzx04UTuO7Cx2Ba+mtAjDwZwSKTGAdmRX0Pxjtyai3 hOYBxT3IY/gT6eHGv/L42jWx5+W0GXSnVBNBsB0RQfsSKQykS3FpYqaqbfiBX2FSbKRTEZOQmiw x4SlAWLEqLz7kp7XuqnqBk82P7v/rqijke/sFHWcM+EOR/BOh/Oo2Cmx7SRUVw6bIQ/EQ6SBjqd eWKBBkzdvoB8Ps/3BpMBfXuXWjguxRsyQKn5kGZ7YgrI1PGR9bVwWNw5qSs1lsG60QLll3b80CU WGs7C9FER62+jjQM/XSlH7LP2bnKjWiFUaX33r8mgRwM7NAiZHy74+YTVTS3PDO5iQX6C4uKwmS 3Wmq2AA5Jk8BMUrL6ueId/RI57P20Cxi1OgGkw4P7t3NMS7D0boaDXrVXserti55lb2RidNglS/ /wEaSO8fFQO/jILezu+6ieITg6o7GcM4UAkmBN9y56yT2R7Pe6WOSY5XTOkCTYT+Qyeg9Me91ra on3Y3LKiXfxZ4lT2Hat7yn1D2luVLnDe66lK9qP5EhTIX2edEKJjZPqbMWungaoKy6KjxKe0JCZ MuH5vB05ukwcWGjTtTfnvIQ5L7YDgWKLLTFXXV+dmuDUvu+tUalL4xbnKOrG8t3hflPH3z4idEa 3x5nf0clEVk6wVNt38ZikMQicj22KCQqhZh4MvvbTvfR64YuUYPFFk8DMef7PF2r+b89YuIZJAk 2nnHUVAyTg4VeTwEFxYKRHZ4OT X-Received: by 2002:a05:6808:538b:b0:4d7:2721:cfb0 with SMTP id 5614622812f47-55c002e295emr491276b6e.31.1792798719329; Fri, 23 Oct 2026 16:38:39 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:38 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:24 -0600 Subject: [PATCH v3 5/9] dmaengine: sun6i: detach completed descriptors before invoking callbacks X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-5-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.19 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed), No valid DKIM,none]; MAILLIST(-0.18)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; FORGED_SENDER_MAILLIST(0.00)[]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWELVE(0.00)[17]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com]; TAGGED_RCPT(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:helo,sea.lore.kernel.org:rdns]; RCVD_COUNT_FIVE(0.00)[6]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10:c]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[100.77.114.92:received,209.85.167.177:received]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; MIME_TRACE(0.00)[0:+]; TAGGED_FROM(0.00)[bounces-26839-noreply=patchwork.local]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: DE2C91C010E 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?= Finite completion publishes a descriptor to virt-dma but leaves pchan->desc pointing to it until the allocator runs. The virtual-channel tasklet may free that descriptor first. A residue query for another incomplete cookie can still pass the retired descriptor to sun6i_get_chan_size(). Clear the active descriptor pointer before publishing completion. An assigned physical channel without a descriptor is ready for the allocator to start its next transfer or release it. Use that state in place of the completed-descriptor pointer, so residue queries and termination only consult descriptors still owned by the physical channel. Fixes: 555859308723 ("dmaengine: sun6i: Add driver for the Allwinner A31 DMA controller") Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index d3a63c866645..900bb629ba3b 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -198,7 +198,6 @@ struct sun6i_pchan { void __iomem *base; struct sun6i_vchan *vchan; struct sun6i_desc *desc; - struct sun6i_desc *done; }; struct sun6i_vchan { @@ -490,16 +489,12 @@ static int sun6i_dma_start_desc(struct sun6i_vchan *vchan) if (!pchan) return -EAGAIN; - if (!desc) { - pchan->desc = NULL; - pchan->done = NULL; + if (!desc) return -EAGAIN; - } list_del(&desc->node); pchan->desc = to_sun6i_desc(&desc->tx); - pchan->done = NULL; sun6i_dma_dump_lli(vchan, pchan->desc->v_lli, pchan->desc->p_lli); @@ -536,7 +531,7 @@ static void sun6i_dma_tasklet(struct tasklet_struct *t) pchan = vchan->phy; - if (pchan && pchan->done) { + if (pchan && !pchan->desc) { if (sun6i_dma_start_desc(vchan)) { /* * No current txd associated with this channel @@ -582,6 +577,7 @@ static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) u32 channels_per_reg = sdev->cfg->num_channels_per_reg; struct sun6i_vchan *vchan; struct sun6i_pchan *pchan; + struct sun6i_desc *desc; unsigned long flags; int i, j, ret = IRQ_NONE; u32 status; @@ -601,13 +597,15 @@ static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) i * channels_per_reg + j < sdev->num_pchans; j++) { pchan = sdev->pchans + i * channels_per_reg + j; vchan = pchan->vchan; - if (vchan && (status & vchan->irq_type)) { + desc = pchan->desc; + if (vchan && desc && (status & vchan->irq_type)) { spin_lock(&vchan->vc.lock); if (vchan->cyclic) { - vchan_cyclic_callback(&pchan->desc->vd); + vchan_cyclic_callback(&desc->vd); } else { - vchan_cookie_complete(&pchan->desc->vd); - pchan->done = pchan->desc; + /* Completion transfers ownership to virt-dma. */ + pchan->desc = NULL; + vchan_cookie_complete(&desc->vd); } spin_unlock(&vchan->vc.lock); } @@ -983,7 +981,7 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) pchan = vchan->phy; list_del_init(&vchan->node); - if (pchan && pchan->desc && pchan->desc != pchan->done) { + if (pchan && pchan->desc) { struct virt_dma_desc *vd = &pchan->desc->vd; vchan_terminate_vdesc(vd); @@ -999,7 +997,6 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) vchan->phy = NULL; pchan->vchan = NULL; pchan->desc = NULL; - pchan->done = NULL; } spin_unlock(&vchan->vc.lock); From patchwork Fri Oct 23 23:38:25 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3714 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id E39131C097F for ; Sat, 24 Oct 2026 01:40:34 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=gmail.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-26840-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-26840-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by sea.lore.kernel.org (Postfix) with ESMTP id 15C813DA97 for ; Fri, 23 Oct 2026 23:38:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798722; b=NZvZ9UD58yJlf9UwK9aqVQ3iz1BeGUmnzLx6UNdS+AGMYsouqmeZ5MIVomrjcoPCNyRo nNM6bz1nQ9yb4MuOnF/zJffR0Ksd8SGiyPnJSy4D1C9U1QlJPh2GSfEPutMv7wHp+MPjj 8isLw8Yba5dswz/5X+/Jg7qyTKlyHcmotsibXwN2qrfMfJo1HeDotM+LIXYquA/pkSVVo 778Gs+1QbaqATCJ0tNZXGxuF3U9B3AG+ynyN0cZVCfnnSfsfLzJ27/G7kvGMUUIsHxNJv uAnM0bZABjdawPNqwKQ3pIWsY2yNXKK0Dwv2fEatPmFCPwanwxFPmPQYlrUsyjJ+Eig== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798722; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=zkFWZrZqrOF0fJWX5siiys4KdKUOKCNqH6flFHqQFIY=; b=KiTNcmVf5jI8jGTggpHr0cZvBoIuGTmRzB4k+fzkJ7r8F9Roh7y84c1W7fuw3QbcfLmL +M45QSyRBn+1LSZTtMMc5BXvVy0pwqjODOffY9A1ob8K4Xw3+6oSyMgFsW3ObRaho+5fh s12SyNklv9h16X+gmWIak/yG7tX9fJ6ufPFyO6CD8DoJW/BSAIbQpbWgCFJSHF4VDPhA5 XmRT5C8M0UX/u+hurZ8I/9TYjHXjNr9CXYJ6xN2HaD/KyicndjqLilTUFssDnI9cJD6cQ 1CLfnbIGVDUSlwER+cS+BaBqhkcVOrn49mnB3R/qQNRoBJymKVONZ+Ia4TkxCPBbV8w== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=dJrYd7qi; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CC6F760A260F; Fri, 23 Oct 2026 23:38:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=dJrYd7qi X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.161.53 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798722; b=fKe8SsHnEKqjq9hUu7hz1QNcBwUz81LudPAvnRCUDq9Rw5GVfEmbGNdGLaiI7oDsvR3L 0kraFt8UvrLuCTvBnS+xXf6A0ZiXyiiF2+PSWHBtGIK/wl2VHDdqjGRbMnfahaWB+B6go UbNHg0Bri1BobLfYSqpeHbZPmJNyyqdhj9U8LIjXcQhrooq2j/SD6OhWqxeImcBm+wwZ+ xjQfSQcepgh+pB5eTG4NqQ8N6k6WWe3mHL1I+hPptdcxdpazrtOXlM2sAl1/n92pp4iwu AnFugZOWjPhUipr1A0yR1SFn2Cgpscax/XLnh9YELfrfwc+7xwxKbFouQjsfH4ZWQlw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798722; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=zkFWZrZqrOF0fJWX5siiys4KdKUOKCNqH6flFHqQFIY=; b=cWWn3RUdXMENcpvGeTEqBYe7MIqT0JJjs06m7JfJX/xsyDI0GuSZIL/dv8QSf45R3btF FMXVqH3iYDVeLnKfxdNN4HfDYieZo1aH1GxFUBnfPRWqdDcewM45gy8YfHqQEEKUP8xd2 Yc64Fr5LRoI75OBGLo00duLfSLK0RftMbaC5CuXyPhXs9FGVs/0FiI4/D8mdyoBxYIY5D L9xcqMQiK3kXjzp/CYpONDrXdm3GFWAw311ny9uYCNYh7QRqeDQCjOIbOZvYgijclc8Uk 0/VNkobE+K2aOaPmrZ9xc9LhO9GldoxycgWn/EN4JedRGmxpp+RMZakYTt9yf6paIEA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=dJrYd7qi; arc=none smtp.remote-ip=209.85.161.53 Received: from mail-oo1-f53.google.com (mail-oo1-f53.google.com [209.85.161.53]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C35E660A2613 for ; Fri, 23 Oct 2026 23:38:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org C35E660A2613 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-oo1-f53.google.com with SMTP id 006d021491bc7-6dd7070699eso992327eaf.3 for ; Fri, 23 Oct 2026 16:38:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798721; x=1793403521; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=zkFWZrZqrOF0fJWX5siiys4KdKUOKCNqH6flFHqQFIY=; b=dJrYd7qiU2bvcp2iIMqM4F60D4QnUEmfjAufiDQhaFWL9B0DjBLlbtHRfpSgIHWCsj 9jrO4ePfmqMVwFrUO77wgg8sbFK4nn6ozhffN/H6fq2Z0hqgNVhZWZo6z3hBrHjDlyjd a6aQSjVyST2bHaX9NjYa5Zoqme65hMerVFEYRRCP11fs0ShqVVOVuifWLobzmvulZawj DNZjpud/1HZnzBH3yDFa+23phj8hi1yxKL06gl8LCxNagcRFNshJIt+3j/jsuZn4JMfa UcPeSZAxjSn7TwhLBge6M/Zm3XneYMmvYMVAZbF6zfA8NxSQfxikglF0XHmqIlZkx5IS Affg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798721; x=1793403521; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=zkFWZrZqrOF0fJWX5siiys4KdKUOKCNqH6flFHqQFIY=; b=BEQXwLBA0cbKQYJjRWIKHmBpJaFv/NBHYf15AYK6s4TqEO8BZOd9+DnaAc75lygRdB eBZsIuotP43cxlznnj32MmshYfqo3gp1MA4cUtpWIHycb0e8Gc8QPeC9A1dHJVn0IeXN mGWzfDMJWNnAEZJzOvJMIhXBt0d5N630ZIo8LhfwLEI4RZ5Hs/q2/PY3TO2e+MousrvW 9ye7QHUkIu7MEQSP/OJLbOl5HrDTJmApVspNcODIDqbjg7sPyu1euq1Jk9Edqnnp5QBL GW6CWQMWlAUjHaJhPisJCX6tIllzMmgZXLeDR0LPuau1riH+IFxTDGC+nPSSXG9QsKUg XxHQ== X-Forwarded-Encrypted: i=1; AKwUvBxD24F2BOKG8UjL0H4aNH+b3SwRB1FhKoy/bF8V4b1N0NXkmeEbCr9IWYRc5Ful/dznsnX+wvRO5W/lwQ==@lists.linux.dev X-Gm-Message-State: AFq9FYKuFeFt8jEd+BaUsvrmPScEmTCBJ50ja9VRdAZOqAxukfbHuieB aj+PlutAKK2NVKf3Au1eFqETSp0tdmewoHuQZ+hQFEnih7qSMDYbz+IZ X-Gm-Gg: AYBFou2rP2kM31seswRqmf7BFJ5tVaJ4Zjcw8viC+W3II6mywICNah0/pA2Z4fUInvY b5JKCCyP+Fx9HjNOpJLx03j1SdwClLaFQ2X+XRzUcygL9oOpAbS++Y0TWczy8o+8lCVlHFF5zU4 eaxut8nfvhZQjVnbjD2p06UON5wzfFN0Dui1XhZ+h7lwiXPQ0S/wnew1QEEoZp+Gd5gzseKN5U5 L9YyHM/M++OigpzTyMvT0P1BB+saJMcemVFWg8T3rsfhHIA5fKHrBaXCdytsfI9lOMUShfNoGiD XuF3SvOoaDzgwq/jVQi7bPTUtPe9u294bEHEUqJ+jyxdm0a1VRVwl3yBGpQtkk+Ya5eWoY2uHoi sBy4KcNpIzZxMWGYtVHc+qU4W/IKIRGtOy0ESFWH3GMQa0PNQAbkqF1Dv2+PHMS6QHlHF5aNuAX uzybi7xmYkH48wRs/LuqsBDzwgaRKj+ugzm/8Q26qOwD6UDajtNw3S3UOBhzS8OpZZJc8knP3Gc n8qY/JCcj4TAywiDj9fImthutA3UuTYRPVZxOq8wkV0Q1hF0+cW5muDauWWKQR0uc98XfumBC5X ymkHEeaEwzjg/7Q2+9r1KBa5QcSSmGi9KZISZh49/6+KRWHwpdAXPQj80WuQtX3i2B/SuJC4+wY wqInI37OhoGFdCH26dROjOXykh8heXL5Ks29jHkqb3SWV/s94yt8nfUn27uHU+CXihsO5djXrsq pHV1E= X-Received: by 2002:a05:6820:7093:10b0:70b:8379:c145 with SMTP id 006d021491bc7-70ba0da0506mr162964eaf.28.1792798720713; Fri, 23 Oct 2026 16:38:40 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:40 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:25 -0600 Subject: [PATCH v3 6/9] dmaengine: sun6i: retire interrupt state before reusing physical channels X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-6-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.19 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed), No valid DKIM,none]; MAILLIST(-0.18)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; FORGED_SENDER_MAILLIST(0.00)[]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWELVE(0.00)[17]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com]; TAGGED_RCPT(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:helo,sea.lore.kernel.org:rdns]; RCVD_COUNT_FIVE(0.00)[6]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10:c]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[100.77.114.92:received,209.85.161.53:received]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; MIME_TRACE(0.00)[0:+]; TAGGED_FROM(0.00)[bounces-26840-noreply=patchwork.local]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: E39131C097F 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?= Termination stops a physical channel and drops its owner without masking or clearing its interrupt state. A completion latched by the old transfer can therefore be delivered to a descriptor installed after reassignment. Mask and acknowledge the stopped channel's interrupts before releasing its ownership, and clear pending status before starting a new descriptor. Keep these register updates under the same device lock used to sample and acknowledge interrupts in the handler. Schedule the allocator after termination so pending virtual channels can use the released physical channel even when no further interrupt occurs. Fixes: 555859308723 ("dmaengine: sun6i: Add driver for the Allwinner A31 DMA controller") Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index 900bb629ba3b..dab17b3863fc 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -501,6 +501,11 @@ static int sun6i_dma_start_desc(struct sun6i_vchan *vchan) irq_reg = pchan->idx / sdev->cfg->num_channels_per_reg; irq_offset = pchan->idx % sdev->cfg->num_channels_per_reg; + /* Do not deliver a previous transfer's interrupt to this descriptor. */ + sun6i_write_irq_stat(sdev, irq_reg, + (DMA_IRQ_HALF | DMA_IRQ_PKG | DMA_IRQ_QUEUE) << + (irq_offset * DMA_IRQ_CHAN_WIDTH)); + vchan->irq_type = vchan->cyclic ? DMA_IRQ_PKG : DMA_IRQ_QUEUE; irq_val = sun6i_read_irq_en(sdev, irq_reg); @@ -973,6 +978,7 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); struct sun6i_vchan *vchan = to_sun6i_vchan(chan); struct sun6i_pchan *pchan; + u32 irq_reg, irq_shift, irq_mask; unsigned long flags; LIST_HEAD(head); @@ -994,6 +1000,14 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) writel(DMA_CHAN_ENABLE_STOP, pchan->base + DMA_CHAN_ENABLE); writel(DMA_CHAN_PAUSE_RESUME, pchan->base + DMA_CHAN_PAUSE); + irq_reg = pchan->idx / sdev->cfg->num_channels_per_reg; + irq_shift = (pchan->idx % sdev->cfg->num_channels_per_reg) * + DMA_IRQ_CHAN_WIDTH; + irq_mask = (DMA_IRQ_HALF | DMA_IRQ_PKG | DMA_IRQ_QUEUE) << irq_shift; + sun6i_write_irq_en(sdev, irq_reg, + sun6i_read_irq_en(sdev, irq_reg) & ~irq_mask); + sun6i_write_irq_stat(sdev, irq_reg, irq_mask); + vchan->phy = NULL; pchan->vchan = NULL; pchan->desc = NULL; @@ -1003,6 +1017,8 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) spin_unlock_irqrestore(&sdev->lock, flags); vchan_dma_desc_free_list(&vchan->vc, &head); + if (!atomic_read(&sdev->tasklet_shutdown)) + tasklet_schedule(&sdev->task); return 0; } From patchwork Fri Oct 23 23:38:26 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3719 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id 200A61C010E for ; Sat, 24 Oct 2026 01:41:50 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=gmail.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-26844-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-26844-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by sea.lore.kernel.org (Postfix) with ESMTP id 0B694430EB for ; Fri, 23 Oct 2026 23:38:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798727; b=3D2F8zYPriLVb9wksyNbApHElpIcOl7VKLNY1NZnyZ+z34wdZWJVGeVYP3jxFOmW/T82 5flZRizU8CgJtipyvrG9mGIPBzS437dtP4ZrBnOaU6nZSnCKvqgCZETpV8A8u2MEDExu2 mjk9o4bHsqIyZRCiQv/t9wPdr0eG3k9RkdjBxr4UihX+neMMuJTWy2uEvl8bRtkl6ECuK NTfqucPP4dsg4vfSdc61jeTlltDKSvhOIExRvIDpFFvkcf0Zi7IxyDbcIuPNnB4ejlCf1 0kGyux1Z4TTw6AiyGAjHra61whbcwljgIGrHh9GKx5mx6XAsTYkemY/lhkfUng9E1Yg== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798727; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=sH7DjWiwuin5EerT2/8LAxO0bCdrNvcuXjPgNrPzpko=; b=HNivIsgIao59SQuxNqyHhZx/aTjRH5fjtXuOx5mgZQ+b/YMwxKKP6kOURUqYFY1Lq0wH TTfNy59PK/e4lVvk73QZoAC3P+Hbmr09VigfMLx2yxxJyiDofSGzLzFZlhzoiEvwQUOQV HPNUNIzq4Swbkw8jEXZYk5e7BuuVzGDNHKPJna4ySlUA0aSpbV/t+7BxGq1UQWNxlnAom OilE644SmkAoh6Y8c6KIzxEgcvhNE+cnOqQN35UR5INfDC+U+B3solKFenkfg7icelTj8 f7AzVTAUpA5de4EK97Ia7Auk8cYGkvreasZJ8DWQ1L4l0CSfxSo4bIzLIg8EcHlG5pg== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=DsgZw+3L; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F10D460A262A; Fri, 23 Oct 2026 23:38:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=DsgZw+3L X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.160.54 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798726; b=f3vZMiKyZugy6lH9zwvdUdAoDN9gAwmM3BjxkpEZDxaJkNQAojawCIMXcDa2uR9v8xKH uUYVRjUSlrpYEshFN7/qM05otLS18fSfXxDijn49NwnOkczJht2aX0oANNHsibprj6CBj UnvKaxpjia2MsRzSUWqC0rOKglUQhelKY1e3IqA1QpvEvfd3qhd/7ybB86I/EnatdQxti ZK7hXTvMiZRBKkF+PZjdQJnhiQIEKy66pzeMzPuebLi+LN8/NTFDgb7wFpI7nWTrY8Mle CF1fn2Sic1UvvYWerieu3fW1jTA2kGClVbdJxoCsK3GTguWj69nH+0+pV/hvWqwyJSA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798726; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=sH7DjWiwuin5EerT2/8LAxO0bCdrNvcuXjPgNrPzpko=; b=3+OAoMhrAiHLJJ4hoVaxtLOWFFVIOgx1C+TFXG2mg0N++lZTsjWN272ICy6lQmJVbVEw VT0NhGAbAOp4G57W5wHbVhk8k5Kd6OKA75Iu6FRPZNpWs7gU7mXLnKtC+GnnyE/uk9qGI /CUF63gypVyy7Xi1pwEeWEvWweMPDV7DUupXXK9Xk7mRoHCjxQvL8uzOlPDXdZHkHeJG6 gGtoM/rOFD0L9fJ7NXxth3RbtzRa6c3l9HzyEtgj8bz3TcV/VhikHz4qxXMg5ILK+bCEJ PM4lOJvSzSh/wglWBTZE1QthxpmWZhzGvHYyep+LjP3EIaUo/ef1PEO/Avvq6zcj4dQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=DsgZw+3L; arc=none smtp.remote-ip=209.85.160.54 Received: from mail-oa1-f54.google.com (mail-oa1-f54.google.com [209.85.160.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7224060A2621 for ; Fri, 23 Oct 2026 23:38:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 7224060A2621 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-oa1-f54.google.com with SMTP id 586e51a60fabf-46556b9e02cso877553fac.1 for ; Fri, 23 Oct 2026 16:38:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798722; x=1793403522; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sH7DjWiwuin5EerT2/8LAxO0bCdrNvcuXjPgNrPzpko=; b=DsgZw+3LxzwZDoaFo1AUYwM7RXrVwKzh1wSu0dpkSY3AHZ90VYQDzM4QDSuejUscwp wwoWrUnrR+f9I8Cbyu0lesVbmuYHy+pjyhwAhZTZqroDR3goqx7/ebCNVZpRuUR1ygD4 FVczFIVQ7HJYAlqT4JI+/UKRvYakjFAAf4uyTwsQyAR604a/1709p4pOV3r2jh2X6LhS 3B9TAc1imXXlJUT7AMHZc8ZvMpFAZYpXxInm2mJ+xj4Gm4GuUImGerVQ8PxpAYZbbFQR Q7LRwc6Aih7Y6OizJ4BQRA9sfkdk6tsx1kUOimP3BGvQKmkOI8Wgnhj92igNCW26p01z A5eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798722; x=1793403522; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sH7DjWiwuin5EerT2/8LAxO0bCdrNvcuXjPgNrPzpko=; b=QncacYSi7o1KvDrN0U7HIYpatYfA/2NvZ4AtylXdSCvxctJybMArwpZOkGrAHoKmKj Cidyxowop2l31wKJqbfocgYNbU27mOpkK2E3X73mfwtG14mtYTblB+vxmhDxwwAq7e+f aGTKlcHe/Z0v3T+5KwtSPtiwVfci4jffRVJM9WoZb5k42K/cDVdtEtMJwRhUvisyaRlQ KXuf12rd/oinFxx9n9sV+lUZHZKlO5ER+5y6Irnz+1QCV4uRpnF/b3AOYPhGAd7/s70q 6BOEv40vcQx7Qpbkyjc092iW0Lb4+xmrPp8V1EliUhv0bXVB3jqfZtNONbOiyNPu5OsE 5S3w== X-Forwarded-Encrypted: i=1; AKwUvBz2iJOcvOtAX1FEqkxk3gVBlk2p86qG8zv5oKRbtBInRxyCd2X7XNwuNW/dsGH+DqNtcOzrwmsIRSioqw==@lists.linux.dev X-Gm-Message-State: AFq9FYKVR1jw0zlxlBVXhPc1Ou0FGVi6g96TCCNzFYiZA9nqIuHKU/jl 3JBuEXob7IHWy8Q4SSPz/w2RYMxXkEJhI+8j8FD/LPBqsQAqpy9r8yo1 X-Gm-Gg: AYBFou30g1Vriasubg3Ey6pXBPrRDbwaBEv+XZkXRISzdSFsA6ninxe1zYbc6XFWgRG BI10VIiKoiwlThBtu40vqNnKoWPMLVZIAWkf26Cs0/+HezK4j8CR7hOWsUfI3OaUdVq2t1Zt1OK K+L5WLemKSAPKs72pZZsH9hO6c2pS3F4Lx1YZ4c541RsESftMgM5E4OAEfOC7X2NvmEj52nLLXj 8bOIHJX02o/zFF+y040Yj8/P0ol+MSckLF0bdqK5jENtDzaBnAIsYdyH66ndRxsoeQolcflj9ZW KYEcg4Dc1tEXd1zIezNv1ivJPyERYIhj9u4es4/wmNewccJaAiJthxl1CfIBNr5Qu6XkR059QBw DzMQllm5wgVYH+LXvth/aZKH9PU6Xdh02Z5pAKnylMVG1nsPrKJ40VwGH70bNbfDVdsyWk1z5AA vY2qtL24GK4NxWnYkHEv+L248axkVPZ/vEqadQPZDHXP2Y3VS7H7ejfe88twoInojyHwsQif8U2 G4fUs5BeuL77sDNsXMsH81PbKxSQfiaBAttRDw9r0H2uJrH0rK2aYJLgAfrWmPsEDpcJ/BeLkFu WD62DUopi6D3pOrtmbn3ExP2p1xxtVoHrskmdkeFaGpZ85QjUiHDGJuKD6y4hBwnSKNwLK7hUdO 8kFRPXOQAlwvBy40ab7xpvqWn1Q6KdSdauYf5p/WazTMhDlBFQjpB1VJvQ3/HFbOF6oSV/7vUd6 YpxdHdjlGPdlRRx7O05MNSRTvhyA== X-Received: by 2002:a05:6870:d61f:b0:4a7:2baa:8701 with SMTP id 586e51a60fabf-4a83f9aab83mr427138fac.15.1792798722385; Fri, 23 Oct 2026 16:38:42 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:41 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:26 -0600 Subject: [PATCH v3 7/9] dmaengine: sun6i: track paused virtual channels X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-7-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.19 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed), No valid DKIM,none]; MAILLIST(-0.18)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; RCVD_COUNT_FIVE(0.00)[6]; FROM_HAS_DN(0.00)[]; FORGED_SENDER_MAILLIST(0.00)[]; RCPT_COUNT_TWELVE(0.00)[17]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com]; TAGGED_RCPT(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:helo,sea.lore.kernel.org:rdns]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; TAGGED_FROM(0.00)[bounces-26844-noreply=patchwork.local]; FREEMAIL_FROM(0.00)[gmail.com]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10]; TO_DN_SOME(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.234.253.10:from]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[100.77.114.92:received,209.85.160.54:received]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; MIME_TRACE(0.00)[0:+]; MID_RHS_MATCH_FROM(0.00)[]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: 200A61C010E 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?= sun6i_dma_tx_status() only returns the cookie state, so a paused but incomplete transfer is reported as DMA_IN_PROGRESS. The 8250 RX flush path pauses the channel and calls its completion helper before terminating it. That helper ignores an in-progress transfer to avoid consuming a new RX operation. With sun6i it consequently drops the partial buffer and leaves rx_running set, preventing another receive from being submitted. Track pause state under the channel-assignment lock and report DMA_PAUSED for incomplete cookies, including status queries without a residue output. Flush the hardware pause request before returning. Completed cookies remain DMA_COMPLETE. Keep paused channels out of the pending queue and do not start a queued descriptor when a paused channel's previous descriptor completes. Release the completed physical channel so other virtual channels can use it, and clear its hardware pause request before reassignment. The paused virtual channel retains its queued descriptors until resume. Resume requeues an unassigned channel only once and schedules the allocator, so an idle controller does not require an unrelated completion to resume it. Clear the pause state when terminating the channel. Fixes: 555859308723 ("dmaengine: sun6i: Add driver for the Allwinner A31 DMA controller") Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index dab17b3863fc..25987f550707 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -208,6 +208,7 @@ struct sun6i_vchan { u8 port; u8 irq_type; bool cyclic; + bool paused; }; struct sun6i_dma_dev { @@ -537,13 +538,17 @@ static void sun6i_dma_tasklet(struct tasklet_struct *t) pchan = vchan->phy; if (pchan && !pchan->desc) { - if (sun6i_dma_start_desc(vchan)) { + if (vchan->paused || sun6i_dma_start_desc(vchan)) { /* * No current txd associated with this channel */ dev_dbg(sdev->slave.dev, "pchan %u: free\n", pchan->idx); + /* The next owner must not inherit the pause request. */ + writel(DMA_CHAN_PAUSE_RESUME, + pchan->base + DMA_CHAN_PAUSE); + /* Mark this channel free */ vchan->phy = NULL; pchan->vchan = NULL; @@ -935,10 +940,12 @@ static int sun6i_dma_pause(struct dma_chan *chan) dev_dbg(dmaengine_chan_dev(chan), "vchan %p: pause\n", &vchan->vc); spin_lock_irqsave(&sdev->lock, flags); + vchan->paused = true; pchan = vchan->phy; if (pchan) { writel(DMA_CHAN_PAUSE_PAUSE, pchan->base + DMA_CHAN_PAUSE); + readl(pchan->base + DMA_CHAN_PAUSE); } else { list_del_init(&vchan->node); } @@ -960,12 +967,14 @@ static int sun6i_dma_resume(struct dma_chan *chan) spin_lock(&vchan->vc.lock); pchan = vchan->phy; + vchan->paused = false; if (pchan) { writel(DMA_CHAN_PAUSE_RESUME, pchan->base + DMA_CHAN_PAUSE); - } else if (!list_empty(&vchan->vc.desc_issued)) { + } else if (!list_empty(&vchan->vc.desc_issued) && list_empty(&vchan->node)) { list_add_tail(&vchan->node, &sdev->pending); } + tasklet_schedule(&sdev->task); spin_unlock(&vchan->vc.lock); spin_unlock_irqrestore(&sdev->lock, flags); @@ -994,6 +1003,7 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) } vchan->cyclic = false; + vchan->paused = false; vchan_get_all_descriptors(&vchan->vc, &head); if (pchan) { @@ -1040,6 +1050,8 @@ static enum dma_status sun6i_dma_tx_status(struct dma_chan *chan, spin_lock_irqsave(&sdev->lock, flags); spin_lock(&vchan->vc.lock); ret = dma_cookie_status(chan, cookie, state); + if (ret == DMA_IN_PROGRESS && vchan->paused) + ret = DMA_PAUSED; if (ret == DMA_COMPLETE || !state) goto out; pchan = vchan->phy; @@ -1074,7 +1086,7 @@ static void sun6i_dma_issue_pending(struct dma_chan *chan) spin_lock(&vchan->vc.lock); if (vchan_issue_pending(&vchan->vc)) { - if (!vchan->phy && list_empty(&vchan->node)) { + if (!vchan->paused && !vchan->phy && list_empty(&vchan->node)) { list_add_tail(&vchan->node, &sdev->pending); tasklet_schedule(&sdev->task); dev_dbg(dmaengine_chan_dev(chan), "vchan %p: issued\n", From patchwork Fri Oct 23 23:38:27 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3718 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id 561C31C010E for ; Sat, 24 Oct 2026 01:41:25 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=gmail.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-26843-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-26843-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by sea.lore.kernel.org (Postfix) with ESMTP id 3F26033B2F for ; Fri, 23 Oct 2026 23:38:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798725; b=kVjFUNZVXZG86f/XA30ucfFwgXxQty8nnfJqZ/mSJzdHr5B2myq2PP/bBb3R/x636zs3 AfASVfVe4EJ00lMoL0JXV5TLUCaLwktu65/k2DXtr9kAldVBDFJyyOTaB7gY9kVh0i5uA 1sBi+hoTqZgir7CX9H502VY4CquKckS9hdlx4rgDwhXUQTG3LIH3rpO2ftYzgjqNCJGBZ PYxcHRguxlELfnABRAOPMN7yP+wcLAsPSYLNXmHdOF/dRN18+QbYpYNCk3pKHkHsBnLqE DZ33hM0xR8Tl8qJFz5rASpTEl9E/GNFnj6TmoNhMDadc/JAjDmnCI2EeRDMzm0abTMg== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798725; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=yK+VB9i3XnDuZ2aB6oRjlCMBfgt+FvmOgzszXtH8SUQ=; b=I8Z1lRmOrikFsNhAca0qyjnFgjcNHYEZZxxfV9MOplWTK3A6w1NYY5fwmc9AzOAkzYDV DsnPIyUEebaBiH3+T0v4ZeAQu4RLam6EropHtiiFA6wrToUU4qMfqn2rS+n9OE4jeiBBB 0e16LtCmiEj8r9GZhvHZMVHxOKEVaAteg89HAeSSJgTStw+CHsadIJumRlIGwmv+pwtav 22k2nMTfS6bYRAMrY1MACClI+EqnMvONh+LBI1iEdVlj5CO6UM9eRBQvmt7yVAoyzUTlA v4k7QwOP2wdnxUJZ4KrbyF6ngsUHM/VYQWZIS4y8fbXgti6Munvzenf9lMMAfjZuDmg== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=GRWoOMCG; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id ADCE960A2612; Fri, 23 Oct 2026 23:38:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=GRWoOMCG X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.161.46 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798725; b=cGZ8uNpOdfCq+M4arOxZq4bg44JFYYGvNoUuHCZLWVcl7blP6surLNEtZpOGvHmuOOAc E6LEW+KWI8EaBY1ekZF0Ay+lHCAjogKqTE3nPGqAXUrxDM3iJNMjTE5aPCEMe21eidLXV f5owukOOIsIwrWMB4T0EKQEjucsyogwl1aZZGiWawUpOrA1QpQ6qcnZNWt7puPbI1jPHe ZRWqebHfOQJt+RuyGw5Lp3YvtWahWeaLmCGKGyIhHLosCXFq3NvomyXbBaNJUG7CAj+eu 5jblmQG4UdjrZFrdn+YVf+HvctR+TXJsPG7hZZfn9O87q0KH10XSwlyLHgbvXv1av1A== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798725; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=yK+VB9i3XnDuZ2aB6oRjlCMBfgt+FvmOgzszXtH8SUQ=; b=ytGMDZarruMDSvMcAQsPh1rDPTVFCPfkgI2Ylcjh9R3bDDTuDAV59FdEoRq0MlTq0Zbl Rxnsz4FyG+vJ50kSCXobjsj19nAswiNauLq7/u/sUbPnvG9qtApNSdxaTZWHX+38JmkjB oT5x2ZkkyB9u1jmkmDDLRSbvRyoJwPDuBeoUN0eH1lUb6Fw533gap1mHoYbD4nAHariXk ld3jKCOoRncdJqGjl2sA0ZNV+lxg9Nv0eLiU0Y4wvu5sBr+kmypkXRi5LWz/w9F0ORQr8 dJQlc+YOFVBWIj1djSvU6MEUSEN7Pbf2AEpZae0nNCstMSbzrt3o+A+wPaG9mXSdv1g== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=GRWoOMCG; arc=none smtp.remote-ip=209.85.161.46 Received: from mail-oo1-f46.google.com (mail-oo1-f46.google.com [209.85.161.46]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3791160A2618 for ; Fri, 23 Oct 2026 23:38:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 3791160A2618 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-oo1-f46.google.com with SMTP id 006d021491bc7-6dd7070699eso992352eaf.3 for ; Fri, 23 Oct 2026 16:38:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798724; x=1793403524; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yK+VB9i3XnDuZ2aB6oRjlCMBfgt+FvmOgzszXtH8SUQ=; b=GRWoOMCG5a+S0Z+zRa9DUbCM/zKafj8GppEvawj7MhjSCgVLlpdZR+Q/rwjwc86qIE 8OjYcx2JQOsDopNf8hpwac4M41xzoWbqklXv+xWthucjf1n0y4OVLZS7BFqNhwb5Wy8J e+9OWg46LSthCiYIlD9i4IGa0HnI46vcfmooTu/692K/7K67Y/SA1XnHtc0YSIbc1qe4 ilzAlSej80v6DPoTdG/Bc21BGAKxqxodanW05utU2DMMkZN3CDWSZn3cJo4T44ijS0Pf hicYI6Lam9x19IfbHRguhIgj8G1RdooEz9TNkrEhL7+LVRHwhT3nPGwS9KePmE1h2Laa LHkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798724; x=1793403524; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=yK+VB9i3XnDuZ2aB6oRjlCMBfgt+FvmOgzszXtH8SUQ=; b=HEED9tc5dNOnNDO/BQZ/ajyoYSHtopv5skV4AJGQ7EcY8v5bUG4/+1iIhaT2iSY4Lu Rj+vAUepGgb3nWKAfCJIe84p7cXd4k7d/DdSctlZQt1mwxBd2tJge6PyFacArbADN9aC dt56Ym+fNPEt43WMh0INaxaJczDmF2tHi3ct/usrPZRH6U9B78N4vS51VUz1V9bLcFgo cjiccN95amaxVmdOGtmOV9vB9XYrWNH29c7ryKJrBe6a9BXEUeKl/OJrXJAdzrrQRSqf 48bzIA52i/sGEYeicbKui7rbs2mhZPnt2fWH1/yKTmLPPMOQV1IpgRSjK6pfLBmyJDXX pYwg== X-Forwarded-Encrypted: i=1; AKwUvBzIDSbq9scqJMWC9s2EladqmhsfVZCi7i9DTH4IZYD4IHD6/wnLaG/wCWSgyzuiLzyGpXkvu2l+bW52Cw==@lists.linux.dev X-Gm-Message-State: AFq9FYIhnm9xDWd6Fm2Gj2NZ6JgVQdpnPyfQ7LRpbze0rwekByj9WZXx 4lDp7y03GRMiBZnQPlpNnLmP45xuJshcmfVw/UMfLRzLDU9w22CgXCVf X-Gm-Gg: AYBFou25+P/VEZHRTl/UzQtcx2AP1LA6YC0hc50yozsrpQAH0+1sUZE8ePpg/L5mWzT UflkMJqUC3jQcwNPqFyodSdsQOBs5CTqPmdRvPcSOXVspyvOife+QLyvFOfdF+lwqotxPmxM36/ iqsvkdL9r2AqL0fQ9BlgAH//5NU2p7ZvRc98ID8JgNd7Y2ETc9TOC35MeSYdHDtTMUGthxXTxBV fsTqIvRtEzPc3vyj2t0VLha6DQXp6nhD2vm7tVURezbnGGAeFbVz5ozvM2pGqC7ATufjL/gO9C/ 87Jc+2RtRlVcfCrFWBIx5lUxVJUn/wp33TaL4j0xHY5pvRxaa5H0+THyazr2bzbT9Yqkc4x/hXS 4rU29waYbybe0h+75EBhgvmTx+uqEiG49H3kZ6u+SB4mxQwXNT1u/PnPXJlgYd+5c0WQDPQWN0h X9vGHKsSXC1bzQImmccYMMc1NG87bl7PS35ppBbTKOn+1rrDG/1P3ANYmyCIdAkVvHzXV/Eodto ZptiBAGXS71ITDY0NO9VpM2qg/fWHld+HUeZsQr4UbXJ3eDHWuZjkgThSmlD6dpyI/4S85HXQf+ O+W3oMubmFjuefBOCB8WHqtP3c5ozUeHKEzVmg/n8EpycxIDZittCDbZZ1p/cnyAr8lssvB5eX0 LcMOxKn29joYwSwcxXB2PjMQhRXzYBtbs2XbJjbu7JTH/HBFMMaCS2XCDRnOfdebfSbNfoUT96y JfAFhicBfe1sR7pAmYeCof99A8 X-Received: by 2002:a05:6820:83dc:10b0:709:244b:b4f8 with SMTP id 006d021491bc7-70ba0ebf5f5mr161408eaf.63.1792798724223; Fri, 23 Oct 2026 16:38:44 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:43 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:27 -0600 Subject: [PATCH v3 8/9] dmaengine: sun6i: synchronize callbacks before releasing channel resources X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-8-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.19 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed), No valid DKIM,none]; MAILLIST(-0.18)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; FORGED_SENDER_MAILLIST(0.00)[]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWELVE(0.00)[17]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com]; TAGGED_RCPT(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:helo,sea.lore.kernel.org:rdns]; RCVD_COUNT_FIVE(0.00)[6]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10:c]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.234.253.10:from]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[209.85.161.46:received,100.77.114.92:received]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; MIME_TRACE(0.00)[0:+]; TAGGED_FROM(0.00)[bounces-26843-noreply=patchwork.local]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: 561C31C010E 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?= The driver has no device_synchronize callback. dmaengine_terminate_sync() therefore returns after stopping the channel without waiting for the virtual-channel tasklet. That tasklet may already have removed completed descriptors from the shared list and be executing their callbacks. For example, serial8250_release_dma() frees the RX buffer and unmaps the TX buffer immediately after terminate_sync(), while those callbacks can still access them. Use vchan_dma_synchronize() for device_synchronize. Channel termination excludes the interrupt handler and allocator before detaching the channel, so they cannot schedule another completion for that transfer. Also stop the channel and synchronize when freeing its resources. Keep terminated cyclic descriptors on desc_terminated until synchronization finishes. vchan_complete() may retain that descriptor outside vc.lock. Ordinary active descriptors have not published a callback and can still be freed by terminate_all(). This avoids accumulating descriptors on each 8250 partial-RX flush, which uses the atomic termination API. Fixes: 555859308723 ("dmaengine: sun6i: Add driver for the Allwinner A31 DMA controller") Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index 25987f550707..b83138745bd1 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -999,12 +999,20 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) if (pchan && pchan->desc) { struct virt_dma_desc *vd = &pchan->desc->vd; - vchan_terminate_vdesc(vd); + /* A cyclic callback may still hold this descriptor outside vc.lock. */ + if (vchan->cyclic) + vchan_terminate_vdesc(vd); + else + list_add_tail(&vd->node, &head); } vchan->cyclic = false; vchan->paused = false; - vchan_get_all_descriptors(&vchan->vc, &head); + /* Leave terminated cyclic descriptors for the sleepable synchronize. */ + list_splice_tail_init(&vchan->vc.desc_allocated, &head); + list_splice_tail_init(&vchan->vc.desc_submitted, &head); + list_splice_tail_init(&vchan->vc.desc_issued, &head); + list_splice_tail_init(&vchan->vc.desc_completed, &head); if (pchan) { writel(DMA_CHAN_ENABLE_STOP, pchan->base + DMA_CHAN_ENABLE); @@ -1103,14 +1111,10 @@ static void sun6i_dma_issue_pending(struct dma_chan *chan) static void sun6i_dma_free_chan_resources(struct dma_chan *chan) { - struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); struct sun6i_vchan *vchan = to_sun6i_vchan(chan); - unsigned long flags; - - spin_lock_irqsave(&sdev->lock, flags); - list_del_init(&vchan->node); - spin_unlock_irqrestore(&sdev->lock, flags); + sun6i_dma_terminate_all(chan); + vchan_dma_synchronize(chan); vchan_free_chan_resources(&vchan->vc); } @@ -1483,6 +1487,7 @@ static int sun6i_dma_probe(struct platform_device *pdev) sdc->slave.device_pause = sun6i_dma_pause; sdc->slave.device_resume = sun6i_dma_resume; sdc->slave.device_terminate_all = sun6i_dma_terminate_all; + sdc->slave.device_synchronize = vchan_dma_synchronize; sdc->slave.src_addr_widths = sdc->cfg->src_addr_widths; sdc->slave.dst_addr_widths = sdc->cfg->dst_addr_widths; sdc->slave.directions = BIT(DMA_DEV_TO_MEM) | From patchwork Fri Oct 23 23:38:28 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 3720 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id 67ED41C010E for ; Sat, 24 Oct 2026 01:42:04 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=gmail.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-26845-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-26845-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.77.114.92]) by sea.lore.kernel.org (Postfix) with ESMTP id D383A4367A for ; Fri, 23 Oct 2026 23:38:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792798727; b=QalE4+63Lo2tB4lhg7RAuy7b9wbd0wtcArfrrOBzHwot+j3gp8ueLxzXjVyd2kN21S9R dP7UOA/e604Rk28He5eZN2J5WYvZkeoUvy1wfFXe7CYUzCGaCbVubyljiJj7wxEVlT+ev K+7DMukwjJOLbbAWH6I32gOVnKsXoPmCDb5RnnK2CQPUnVVJoBA8amtgTQujiZ6Q0KPMR 2W3p4vb5C5/ZoXHKGEyQ7mAZY1SvrGA06H4oCxw1WAgYM/e4vUo7T+jpeibbC1zIgT/kO 0VZqpgQPvpWq0358Az2yCsnFU2EE6PO3LthRlPNZWS9evts+U0tM85LbOf/VKR2LMzA== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798727; h=X-Original-To:Received:DMARC-Filter:Received:DKIM-Signature: X-Google-DKIM-Signature:X-Forwarded-Encrypted:X-Gm-Message-State: X-Gm-Gg:X-Received:Received:From:Date:Subject:X-Mailing-List:List-Id: List-Post:List-Help:List-Subscribe:List-Unsubscribe:List-Owner: Precedence:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=R5FazDKhThxOYInKBUow6UStlAet68U4bSmH8n3hkL8=; b=uligKC1uXFTP0xrsGgc3fQKJEUC/mZaYbnQThd6bqJ+GtWmlyYq6T1R09ECZJptYxEVM Swt8Bejzu7o+huDCcq9cyLrWTwmemJ9/8I0y2sJeQjcGontFIHVLvcPZG1agewYFmuqEr I4sAeqsEr7m8eU4le/2wttulg2X6HdRGwN3Q2ykPlavl09qRW5TwY+qjRmGn3LSkCE+eI biQFi3ydgsLren6NT+z1ZEMdE3wffLtQTQWzySgyADVyV58kveIgFWWp5vD7WqYgx+nLF adbq0yYiASp3UlmeBBvRCFehpUe3YHdzjgfhuIQbzz4JqqV51l6HQqGBFwUKrYeRaIQ== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=l9p4HIL5; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; arc=pass header.oldest-pass=0 smtp.remote-ip=127.0.0.1 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C7A62606A32C; Fri, 23 Oct 2026 23:38:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=l9p4HIL5 X-Original-To: linux-sunxi@lists.linux.dev Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.160.47 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792798727; b=y59dKX4lKlCkjMdarZ91JXYuZzfpMiLJLchiErv3fUfFRHag3Gq+Rksle1SzyOhiQsYZ tHqWa868trJ5Ndt5oNBhfVfBMPQGDAoD/ETEZwG30NsHd9N34oEqC7nkfljPIluwgpl2H +Ay0p5rsaot46g1gJ4VfghGeTrqdS1c2KKzjLp/xl1oClnZdYf5W2j2KzAxsoOsu2lGsG /J1uz0PL2/wZRAOZtCm9DFOMTrsiDxX0Fd2kY5UVBDCMt5mBgzWVqcbUK6etK+T2KDZ20 eerZ2ASyqMjSCtgbeylAG4F6eK9/m36hAJrxbtO3m03BIFedEBPghgANoH4Lq0NBaPA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792798727; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=R5FazDKhThxOYInKBUow6UStlAet68U4bSmH8n3hkL8=; b=Qtl83rvDTXoEKfG5bi7JdEjeKWXvFPtiZIH1EH1Owy5qSWibimjwswpb7eazln8B85Gg AGoNWk69IEU0CkeZTPgTHh6CoOZyVV7e6Fq/LtKKXRNAy9CAFdoO923eP5ly3BmgfkiGu wrHqQA081Erf3GWfUMtZVYZOZSukDJ7n/q4tCVXMOGbrlN1KJaT0W4X2d3uR2EMhPwOrd GZ2QnUowqweMrgNoJcZQHbADV1CKWQEBV9fynmocJu+ZMsoA4zWyZztprC1D2SBPwgTyB QId8qMJeGMvCb+JGcgOiHRpvlhR+omCysZdS+dlFlaQGkoBGpnmYkG0u6dfNURgo2Xw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=l9p4HIL5; arc=none smtp.remote-ip=209.85.160.47 Received: from mail-oa1-f47.google.com (mail-oa1-f47.google.com [209.85.160.47]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFB0C60A2629 for ; Fri, 23 Oct 2026 23:38:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org EFB0C60A2629 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-oa1-f47.google.com with SMTP id 586e51a60fabf-475920b9ca2so551948fac.1 for ; Fri, 23 Oct 2026 16:38:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792798726; x=1793403526; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=R5FazDKhThxOYInKBUow6UStlAet68U4bSmH8n3hkL8=; b=l9p4HIL5ctt8PrNbVV/rbbG4PPAXA9T73teybeEJn8ZM+LIlYx5ymjqLEGApXe94/y b3rrDI1m8czpGRafz7OASjVIhUPzvk4W1LPjj39ximq97qBEw0xUwerTDWdqioObktfn ZBp+ZO95sP91z+vWDzzU+kd9cIqwIcaxEZXFMNmHlrv6nfNkF9jN6YvdxFsnyaGxh5H6 a+6oKdiVud8NodLrXYVmZSkxnJYyXN9OHkDdr2kzd7Xmbv4HlliDNaIJRtWWYoMUUAkx d5LcKxOr1PT7eGnThVhckilbo0wkCz+nTNYZWHy/XccvT1m8LgevI1cBAQhBUlNmp0FE AOog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792798726; x=1793403526; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=R5FazDKhThxOYInKBUow6UStlAet68U4bSmH8n3hkL8=; b=qznlD5OYv+AfuBeuOqPkAXA9YYUyKfMBWmIbky273OA+s9wA6zf+56rlIJaQuOCCoF kR8RVh+7Ibie9wLu0S0iftCYEux0tqqI0uCsle1rDqMxXiPZFHRfJy4UL+sCplOG2PhW 1MgBrEVINSLaKXp2wp18fl31Atx1mQQ6v68NKjXs//KNQwjQsdeLRgvPyjLWgRBUmpc2 bw3bI2jonT9DSSGmkttwK4rP0RdkhSsBh2KhZJabB9+cTv5g4aCYaV/o/hcHLCdu7oW7 R/XBjnvnJhSq3k4HvKlDpPb+oLsMGQl01egYdQclKULcJsntqvvwAgo9kwr+tp+DVkQw ve2A== X-Forwarded-Encrypted: i=1; AKwUvBy6NOfXHDoxle+TgBtyoSC5ulo8R/MiWlTkx9M5RGV/0terhtaN2D4vp6+UZ/eZ4uJqK+BopX1JAoxwYg==@lists.linux.dev X-Gm-Message-State: AFq9FYKzulOd+SkiJrfiUiqfNiSrAmDJ6Hn6lWXWmeXi7lEk28l2yHIC 4rnTUg7ZPBpsDkv5zUqRzU+aq4uqhjAoCV4hpD2143F+BvIyEsS9GHFCqMyNMr8B X-Gm-Gg: AYBFou3fm4MGdkIuKUopzqpoTsYvd396i38CiKecB1y618grj2lcLzcjKzSO1NkM8hg 91CidPkIFtgr8fpTms769Ro0uv0Md4xAXdIdM2/1J/T0FKXOP92ZSS4g0mf475fpTZfL59bPvHJ 8cnJMFAvjnKrCbvu46Co4zdCtQOfYHXh3ue6aZLHc2ta6jXjOb539Zws2fqj/QVl6f/VGuLQ55O WWJkrn1BCr4nLA62G13MFNv6ZGwgym/Wxwa03lQuGYzCpRkiS/VTE5kU5tfyd1c2MU2WMnRMtYc dcVRvMs7MSJQSacllHLfs0hSPwv6zYdvNIBM9q4neEQnJCsuNkg0c2EczrAdYinrTrJ+NZbIjwe 7R6F3qhFzySGSm/t1BJgszl3M+4jXWZCkvVmjClgTPQEdDLcHCwmCqrsViRa0TYoIBrW+V0F4hq FigPfNkmC0bnQvYaINmxQUP8mJL19YhLVr/TkanzAX+WFQsdVD3RKJ6hf0ITM4rOdaWGZtK+0Gc ioMFiUAS00QDMUYPN3VY5GFFyxQMZxXSNYINQDQfClpXo/D821Rzh5cTulUlEfrA0YTwri8SXxN KcznrqYoxbHDgJjII90SLLXHsS7bYJj/DNACHzGnKkDlMjF0vTwmv7C2MmMrdwX94/eshEq0vwR JI8/CPBLl+tJCAkxJTj/MZSfvsF2GO7LwF4S07Plf8qCXzaRCPtNHDTreKeBeGqO88+ZV/hrzuR qB5Fg= X-Received: by 2002:a05:6870:8322:b0:4a7:5eb7:ab9c with SMTP id 586e51a60fabf-4a83f58e567mr601234fac.28.1792798725802; Fri, 23 Oct 2026 16:38:45 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4a843225d69sm284345fac.15.2026.10.23.16.38.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 16:38:45 -0700 (PDT) From: James Hilliard Date: Fri, 23 Oct 2026 17:38:28 -0600 Subject: [PATCH v3 9/9] dmaengine: sun6i: keep cyclic state with the prepared descriptor X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-Id: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-9-ef1acb0be768@gmail.com> References: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> In-Reply-To: <20261023-submit-sun6i-dma-lifetime-next-v1-v3-0-ef1acb0be768@gmail.com> To: Vinod Koul , Frank Li , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Arnd Bergmann , Maxime Ripard , Jens Kuske , Jean-Francois Moine Cc: Hongling Zeng , Chengfeng Ye , Nguyen Minh Tien , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [4.31 / 15.00]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[gmail.com : SPF not aligned (relaxed), No valid DKIM,none]; MAILLIST(-0.18)[generic]; MIME_GOOD(-0.10)[text/plain]; BAD_REP_POLICIES(0.10)[]; HAS_LIST_UNSUB(-0.01)[]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc20261015:i=2]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:helo,sea.lore.kernel.org:rdns]; FROM_HAS_DN(0.00)[]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; TAGGED_RCPT(0.00)[]; FORGED_SENDER_MAILLIST(0.00)[]; RCPT_COUNT_TWELVE(0.00)[17]; FREEMAIL_CC(0.00)[kylinos.cn,connect.ust.hk,embeddedlinux.blog,vger.kernel.org,lists.infradead.org,lists.linux.dev,gmail.com]; RCVD_COUNT_FIVE(0.00)[6]; FROM_NEQ_ENVFROM(0.00)[jameshilliard1@gmail.com,linux-sunxi@lists.linux.dev]; TAGGED_FROM(0.00)[bounces-26845-noreply=patchwork.local]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10:c]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[209.85.160.47:received,100.77.114.92:received]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.234.253.10:from]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; FREEMAIL_FROM(0.00)[gmail.com]; RECEIVED_SPAMHAUS_PBL(0.00)[174.29.1.49:received]; MID_RHS_MATCH_FROM(0.00)[]; FREEMAIL_TO(0.00)[kernel.org,gmail.com,sholland.org,arndb.de,free.fr]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: 67ED41C010E 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?= Preparing a cyclic transfer sets vchan->cyclic before the descriptor is submitted. A finite transfer on that channel can then select package interrupts and take the cyclic callback path instead of completing its cookie. Merely preparing an unrelated future transfer must not change the active transfer or the meaning of queued descriptors. Store the flag in sun6i_desc and consult the active descriptor when selecting interrupts, completing a transfer and terminating it. Finite descriptors retain their zero-initialized flag. This also makes callback retirement depend on the descriptor whose lifetime is being ended. The shared state was identified during the H616 cyclic UART RX review. Fixes: a90e173f3faf ("dmaengine: sun6i: Add cyclic capability") Signed-off-by: James Hilliard --- drivers/dma/sun6i-dma.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index b83138745bd1..2152979f72f2 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -191,6 +191,7 @@ struct sun6i_desc { struct virt_dma_desc vd; dma_addr_t p_lli; struct sun6i_dma_lli *v_lli; + bool cyclic; }; struct sun6i_pchan { @@ -207,7 +208,6 @@ struct sun6i_vchan { struct sun6i_pchan *phy; u8 port; u8 irq_type; - bool cyclic; bool paused; }; @@ -507,7 +507,7 @@ static int sun6i_dma_start_desc(struct sun6i_vchan *vchan) (DMA_IRQ_HALF | DMA_IRQ_PKG | DMA_IRQ_QUEUE) << (irq_offset * DMA_IRQ_CHAN_WIDTH)); - vchan->irq_type = vchan->cyclic ? DMA_IRQ_PKG : DMA_IRQ_QUEUE; + vchan->irq_type = pchan->desc->cyclic ? DMA_IRQ_PKG : DMA_IRQ_QUEUE; irq_val = sun6i_read_irq_en(sdev, irq_reg); irq_val &= ~((DMA_IRQ_HALF | DMA_IRQ_PKG | DMA_IRQ_QUEUE) << @@ -610,7 +610,7 @@ static irqreturn_t sun6i_dma_interrupt(int irq, void *dev_id) desc = pchan->desc; if (vchan && desc && (status & vchan->irq_type)) { spin_lock(&vchan->vc.lock); - if (vchan->cyclic) { + if (desc->cyclic) { vchan_cyclic_callback(&desc->vd); } else { /* Completion transfers ownership to virt-dma. */ @@ -911,7 +911,7 @@ static struct dma_async_tx_descriptor *sun6i_dma_prep_dma_cyclic( prev->p_lli_next = txd->p_lli; /* cyclic list */ - vchan->cyclic = true; + txd->cyclic = true; return vchan_tx_prep(&vchan->vc, &txd->vd, flags); @@ -1000,13 +1000,12 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) struct virt_dma_desc *vd = &pchan->desc->vd; /* A cyclic callback may still hold this descriptor outside vc.lock. */ - if (vchan->cyclic) + if (pchan->desc->cyclic) vchan_terminate_vdesc(vd); else list_add_tail(&vd->node, &head); } - vchan->cyclic = false; vchan->paused = false; /* Leave terminated cyclic descriptors for the sleepable synchronize. */ list_splice_tail_init(&vchan->vc.desc_allocated, &head);