From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9BE03437452 for ; Mon, 10 Aug 2026 18:13:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385601; cv=none; b=lHnA+CAaUDgQ0PbpoBtryOLW4olMG8nT9DJuCfuGBoyUveOTVsnNob0+u6OwlOstsvVPzfgo9rfy1HqU7C35+nPleQgIF2/2xL7PDxo8DGcb1hV1RBDxTR5Mlk4Y5XRZ7bjzVH/0mnDj3BC8ayzB0ZP0mqfdChcZ/gBppjOQ6p8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385601; c=relaxed/simple; bh=EppFRA+4UmcTGZnKZYK9FAbypj6sAWpbncg9JYXC4ws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=vERAymAgQjs11+nSaxoAGrUPTlEbjD7Aq+meDrAV/1FtNnPyoflYJw4cNpQftyIwlNiblT49gdVBe5KrOEzkhetLPm+Hkdy5KqPRXljBy89CKsCTI1GYhslw19vjeELfOl0l2A8PIn58/nl/8UljJLxqi8J7AX+mbfEXTJp0GNE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NB+TQvX5; arc=none smtp.client-ip=209.85.214.169 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NB+TQvX5" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2cf452def93so1544195ad.1 for ; Mon, 10 Aug 2026 11:13:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385599; x=1786990399; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RUMe+KZIIE0p4VSC/2SRazogG3ObTz60RXYC/ZPy2cE=; b=NB+TQvX5fxiPgrEcyvI/cGk8fHmwn0OZATDM6PKr/FfcL8qXnGCG6J1LzAOiOwH2ZD dMMSeXM/jEHCE0U9ofmWCnyOgZMTaiD7J+0J0NvKikguT1bVE4Oh7qyd8CGlL9rsPR/y p51cY85YTpRxjYcOR1NU7HyciAhGTdr6uFLW8jGk9HrFWTkGFBGQNdSgFS/NwOMgu5YL ktgBaR/tB0ePPHUI+zR/wCnLqhzJY5jng1lLx4uuL04POr4/z+qCB4s0IDqEx2YDTZSg gx7TCHwq3eDCoCX+U80672KYxSZoel+tRhBk6NOZAx0eY6mpmaCo0EZyjweiDohvpmz3 L0Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385599; x=1786990399; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=RUMe+KZIIE0p4VSC/2SRazogG3ObTz60RXYC/ZPy2cE=; b=CW1oVtSDEb6TkZltbVCtTbey1HwDU8OiwF8s9yTudPFdypSaO1JihNcRa7a6wyIUQO leLyZhnqMbc2PWdKYAGDV8b1N41+sMNxgATfGZ2IZWOH7D4b9nBEQT4vfKkB8KLvpID5 u6Ok42UdH5Jlj2ygsW0NbMkZSXdBZZj2+xspQQvUIsF62KBsxlWsTTa9k0d2WTZsGyVQ IZ3ug2Pc4EA3pzkAjtSy7p7otWWCTD9BPFBdWpIZa54/d268oAzAUAhYkAGUFOPprDli zVVOE/vXTzb+1g4bLH7Kl2OoVDb66IAnXhHYx2h5641/GBbhXOx+hGQKhDGbzByTU+f9 Cmfg== X-Forwarded-Encrypted: i=1; AHgh+RrqNJfh0jNjlSGNd80Wor6VSjqVxKMUx0M72h/vbg8AI4LSNx2GiueHdBAN0MxvWxF5IbmJNpgT33yMdlg=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6tDhmfb1UBSYiA7CiKhDHEf31kAAuEtZiSrjBX3eE8zWIXudb gat6PglpxMdMogIyu22YNBMoNL3VKcWmoVqm+XlwyjhL+Y47yNtC79KY X-Gm-Gg: AR+sD11TKVIU2e2NpPZQF/nd4+SZYYLycrjNXQxqhLN8N2KmRbTRJ6mEC8YRBOuHQDm AwreZ9QJD8MpAmXanXOGrpCmjaEWL+nM0ERXnRPmx5csshh2VP3pkr59DTz/nG/pdpMB0pUOwHL HG66IFP1p9GVTUjOChUaB5gnL1C0N+LIeLIXWIGHq/YHHWGN4SRyT7fVIdI+LDHQEAipmLMQeFc DqJh99ukbn6O+tmn/V5+MzVrBvrq+Aq5Wk2fG3kxS9XOf5KEPQtnR0Ab2KZ+AGXKZYeZnclZC3u 3nj86+n5YVansj2eiKLlxC/x9H3qXF6kIiHuoaOZ+qCN53n89fVPCGsIhODu2ozRP4Pv/aTMbt7 X83O6PUk+diahkE54iFKlpupbqkT+3WIdKGCdH3JU9eAKsYXIaTTkTKRPob7OrM5pqBIBA/9oTS Qm9XZSdyKhdtyfx+KaFt9jLwMVMbLVHk7D2VwEtadsSADeWDiT3OJf4dDdQUZK55c= X-Received: by 2002:a17:90b:2b45:b0:386:ca4b:16a9 with SMTP id 98e67ed59e1d1-392d61ce454mr128606a91.16.1786385598984; Mon, 10 Aug 2026 11:13:18 -0700 (PDT) Received: from cryptic.lan ([2001:569:7fa9:fa00:b1a9:6513:83c6:1d23]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-392d53b873asm472795a91.17.2026.08.10.11.13.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:18 -0700 (PDT) From: Allen Pais To: Vinod Koul , Frank Li Cc: Allen Pais , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann , Kees Cook , Paul Walmsley , Samuel Holland , linux-riscv@lists.infradead.org Subject: [PATCH v3 28/34] dmaengine: sf-pdma: route error callbacks through channel BH Date: Mon, 10 Aug 2026 11:09:29 -0700 Message-ID: <8538eed11abe0c92b1a5b2830baf7a3f06ac698c.1786384169.git.allen.lkml@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit virt-dma now dispatches completion callbacks through per-channel BH work, but SF-PDMA invokes the client callback directly from its error tasklet after exhausting its retries. Complete failed descriptors through virt-dma with an aborted result and the remaining transfer size, then start the next pending transfer. During removal, kill the producer tasklets before the channel BH so they cannot enqueue callback work after it has been canceled. Signed-off-by: Allen Pais --- drivers/dma/sf-pdma/sf-pdma.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/dma/sf-pdma/sf-pdma.c b/drivers/dma/sf-pdma/sf-pdma.c index a08ca355dadb..ab2029af0c0c 100644 --- a/drivers/dma/sf-pdma/sf-pdma.c +++ b/drivers/dma/sf-pdma/sf-pdma.c @@ -328,7 +328,17 @@ static void sf_pdma_errbh_tasklet(struct tasklet_struct *t) if (chan->retries <= 0) { /* fail to recover */ spin_unlock_irqrestore(&chan->lock, flags); - dmaengine_desc_get_callback_invoke(desc->async_tx, NULL); + + spin_lock_irqsave(&chan->vchan.lock, flags); + list_del(&desc->vdesc.node); + desc->vdesc.tx_result.result = DMA_TRANS_ABORTED; + desc->vdesc.tx_result.residue = desc->xfer_size; + vchan_cookie_complete(&desc->vdesc); + + chan->desc = sf_pdma_get_first_pending_desc(chan); + if (chan->desc) + sf_pdma_xfer_desc(chan); + spin_unlock_irqrestore(&chan->vchan.lock, flags); } else { /* retry */ chan->retries--; @@ -602,9 +612,9 @@ static void sf_pdma_remove(struct platform_device *pdev) devm_free_irq(&pdev->dev, ch->txirq, ch); devm_free_irq(&pdev->dev, ch->errirq, ch); list_del(&ch->vchan.chan.device_node); - dmaengine_kill_bh(&ch->vchan.chan); tasklet_kill(&ch->done_tasklet); tasklet_kill(&ch->err_tasklet); + dmaengine_kill_bh(&ch->vchan.chan); } if (pdev->dev.of_node) -- 2.43.0