From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 1A86043552D for ; Mon, 10 Aug 2026 18:11:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385475; cv=none; b=ONZ5xFXdAbvrCIg3CoZreQTdZP4/FxvMFdx7lVa8/J0Rw6HJZQnSdVhz4E8MPXyOBbAOCK5FvqVDg4fgpnu08PIU3/T2mSGHKvzv72tkVvckfZdz+77wIE8UUQ1usW+90bC+Pjc7e8zH8j3r5nzMdvpfMZn4B7DHF1svdXblylw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385475; c=relaxed/simple; bh=1e1W60VLhLVNCXV4mV3fSxqD4L/2jwh51vMAp+ppPdY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ETpYHIpjA7Vds7w5hNKueJL9DirMj7hcaj9NzWEKPxfF70lswpbyxo5oHsY39i64qBKbeX+bBFSucWeyX2QyLKI7bU7gvuaZSUEujTeIKV+sQDvCF4plhUbCdfSRjX3WECpazC0s7YLt0dgV5f0qenRnPYiBs82tJ1K5456b7Oo= 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=Sb1rI/Zl; arc=none smtp.client-ip=209.85.216.53 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="Sb1rI/Zl" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-3810c5d691bso1890554a91.1 for ; Mon, 10 Aug 2026 11:11:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385471; x=1786990271; 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=rHfyMg3ZXRZvT1DVo781MRRb99MTPvEFRM7vzLcRs/o=; b=Sb1rI/ZlX1t9zCnoaNOUApdz9RXWMi/ZqQOjQH1TX7yowe3U5IkFZdEo8qeexmwiAF io97xTSVL9o/+8dXV+7ZKhCk8Esnc9fza/U6FLCNOjIkY6IHx2lbuWIobldfcPxycEI7 pCsO5YEqSp6mL5iDWaTpSbn32zMSq3JV4172VUhHzCG8btssW5diUNL5riI8fPIeB+xy D3gBYE3pPPww2Kko5D2XXjgOts9R77WUuTkTC7OHE0epdr7ZJmLiWKx45Uc3AU3i7H4E Hl8I832llcgbJgSUIKugGLXNFnmLxPyd1adFNClgQlmQsjf36+7Rhk1S8SKJsmPFFDrB F76g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385471; x=1786990271; 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=rHfyMg3ZXRZvT1DVo781MRRb99MTPvEFRM7vzLcRs/o=; b=oUCWQXh+uaEaErUL1aNUAHQRL5aPBwAffEtbnT0qBySeTh7/nocTynvnkgXV6wIavG yS1LUaOvvqkbYqgrqBhyeIdDsJwa47dxQHgC08/ZXW2ZCEqjOsOnCthaawDDuaQFd6EL kd9eZt1ThIJYuribOURYsoRj4z4VuSP9G5DIvwjRqnnemcavNumXkUTJiNzqjIFslXPK /ulOSSIRnw80/BoZBckjiCOHZMZQEQpAZZDCL121xk25nbE5ckUV+gFKxUCP3wiehWf6 Dpcr0FtzYrb3wrS8boDpPXJ+PK/8fCfR7ZZZHcFN/wSKI8DjlQk6oJ4xwyu86uSQaj+U nBrg== X-Forwarded-Encrypted: i=1; AHgh+RpmD735ih+Wf0GEN5Svy6iANpRmVcxSN3y43VJDW+Z4tE9A1LRhB3j30pDgqDYAMBYEuPYllBMadYGQlnQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxwZLnjTSI+1HucOGA7yiN4uzqTzvV8O2Ssca+CiDxHtHYE0kiE wO8FZuccTB/asDV9x3GVbBUb/FpwfJeU6HiCR+zWxYaEzVrd4L1WN/2r X-Gm-Gg: AR+sD111pkuYLJpF+KJPrlsCl923aQ7i7efu4Ac9VyRTEBmuV5y4/G8I0+LSEDKqpBq zU2jRB/9mwrJc11130JyRoz4kZrxBjX+Wu0F3Nl4W1LTFQ8HwQvrWTysbSSR8wWAi+qFuvAapGu Ll1c8XZ4yVBNGXoEGvuij3qTcovAIHT043mqG1uaVdI0jztzanIM0lgRUPJe3qOmkWNvRxa08Xb WW9otyP5rAhrsRkOhkvm/BWJdUeuuYVZJAqF62di3ycfz4vofjvrhCvakyAzMm3KVrNS2JnMj93 B40kqviCLeFZPduTDtk4g+WeRr7ZeKZv9HUocAZG+41LP56PtY5rcz5P9LyfeY4tePz8h7GqYWu 9Xp7xwL2c+pxmTABa27B1Nemm5JnlfHYWhC1BAA/YYQzFbmgynNGhfxBRV4TR6t0Z47AnOzgvXI cz6utGAF9JtCEwyBFXQOw3EOFeW9XlW6BqQlxGeOIeeikU5usQKSqPNk6c/liKl5o= X-Received: by 2002:a17:90b:28c3:b0:381:bc4c:da56 with SMTP id 98e67ed59e1d1-3903c6128c6mr47954742a91.19.1786385471145; Mon, 10 Aug 2026 11:11:11 -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.11.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:10 -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 , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Lars-Peter Clausen , Paul Cercueil , Eugeniy Paltsev , Manivannan Sadhasivam , Zhou Wang , Longfang Liu , Andy Shevchenko , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Keguang Zhang , Sean Wang , Matthias Brugger , AngeloGioacchino Del Regno , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Daniel Mack , Haojian Zhuang , Robert Jarzmik , Paul Walmsley , Samuel Holland , Orson Zhai , Baolin Wang , Chunyan Zhang , Patrice Chotard , Chen-Yu Tsai , Jernej Skrabec , Laxman Dewangan , Jon Hunter , Thierry Reding , Vignesh Raghavendra , Bartosz Golaszewski , Konrad Dybcio , Bjorn Andersson , Kuldeep Singh , Stephan Gerhold , linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, imx@lists.linux.dev, linux-mediatek@lists.infradead.org, linux-actions@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-tegra@vger.kernel.org Subject: [PATCH v3 01/34] dmaengine: add tasklet-backed channel BH helpers Date: Mon, 10 Aug 2026 11:09:02 -0700 Message-ID: <2c62c39cafc0df59eb5381d3da82b1616a58fa20.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" DMAengine drivers commonly use a per-channel tasklet to invoke client callbacks. Add helpers that initialize, schedule, and kill a channel bottom half, with an initial tasklet-backed implementation that preserves the existing execution context. Convert virt-dma to the new API and remove its private tasklet. Update all drivers that directly kill or override that tasklet in the same change so no stale users remain. While touching the completion handler, avoid forming a result pointer from a NULL cyclic descriptor. This establishes a backend-independent API before changing how channel bottom halves are dispatched. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/bcm2835-dma.c | 2 +- drivers/dma/dma-axi-dmac.c | 10 +++-- drivers/dma/dma-jz4780.c | 2 +- drivers/dma/dmaengine.c | 42 +++++++++++++++++++ .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 2 +- drivers/dma/dw-edma/dw-edma-core.c | 2 +- drivers/dma/fsl-edma-common.c | 2 +- drivers/dma/fsl-qdma.c | 2 +- drivers/dma/hisi_dma.c | 2 +- drivers/dma/hsu/hsu.c | 2 +- drivers/dma/idma64.c | 4 +- drivers/dma/img-mdc-dma.c | 2 +- drivers/dma/imx-sdma.c | 4 +- drivers/dma/k3dma.c | 2 +- drivers/dma/loongson/loongson1-apb-dma.c | 2 +- drivers/dma/mediatek/mtk-cqdma.c | 2 +- drivers/dma/mediatek/mtk-hsdma.c | 2 +- drivers/dma/mediatek/mtk-uart-apdma.c | 4 +- drivers/dma/owl-dma.c | 2 +- drivers/dma/pxa_dma.c | 2 +- drivers/dma/qcom/bam_dma.c | 4 +- drivers/dma/qcom/qcom_adm.c | 4 +- drivers/dma/sa11x0-dma.c | 2 +- drivers/dma/sf-pdma/sf-pdma.c | 2 +- drivers/dma/sprd-dma.c | 2 +- drivers/dma/st_fdma.c | 2 +- drivers/dma/sun6i-dma.c | 2 +- drivers/dma/tegra186-gpc-dma.c | 2 +- drivers/dma/tegra210-adma.c | 2 +- drivers/dma/ti/edma.c | 2 +- drivers/dma/ti/k3-udma.c | 12 +++--- drivers/dma/ti/omap-dma.c | 2 +- drivers/dma/virt-dma.c | 12 +++--- drivers/dma/virt-dma.h | 7 ++-- include/linux/dmaengine.h | 28 +++++++++++++ 35 files changed, 125 insertions(+), 54 deletions(-) diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c index 06d830d36882..c8add249dbfb 100644 --- a/drivers/dma/bcm2835-dma.c +++ b/drivers/dma/bcm2835-dma.c @@ -829,7 +829,7 @@ static void bcm2835_dma_free(struct bcm2835_dmadev *od) list_for_each_entry_safe(c, next, &od->ddev.channels, vc.chan.device_node) { list_del(&c->vc.chan.device_node); - tasklet_kill(&c->vc.task); + dmaengine_kill_bh(&c->vc.chan); } =20 dma_unmap_page_attrs(od->ddev.dev, od->zero_page, PAGE_SIZE, diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c index d47ff27e1408..d245d04c3a27 100644 --- a/drivers/dma/dma-axi-dmac.c +++ b/drivers/dma/dma-axi-dmac.c @@ -1195,9 +1195,11 @@ static int axi_dmac_detect_caps(struct axi_dmac *dma= c, unsigned int version) return 0; } =20 -static void axi_dmac_tasklet_kill(void *task) +static void axi_dmac_kill_bh(void *data) { - tasklet_kill(task); + struct dma_chan *chan =3D data; + + dmaengine_kill_bh(chan); } =20 static void axi_dmac_free_dma_controller(void *of_node) @@ -1302,8 +1304,8 @@ static int axi_dmac_probe(struct platform_device *pde= v) * Put the action in here so it get's done before unregistering the DMA * device. */ - ret =3D devm_add_action_or_reset(&pdev->dev, axi_dmac_tasklet_kill, - &dmac->chan.vchan.task); + ret =3D devm_add_action_or_reset(&pdev->dev, axi_dmac_kill_bh, + &dmac->chan.vchan.chan); if (ret) return ret; =20 diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c index 6070dfdb7114..738801501e29 100644 --- a/drivers/dma/dma-jz4780.c +++ b/drivers/dma/dma-jz4780.c @@ -1019,7 +1019,7 @@ static void jz4780_dma_remove(struct platform_device = *pdev) free_irq(jzdma->irq, jzdma); =20 for (i =3D 0; i < jzdma->soc_data->nb_channels; i++) - tasklet_kill(&jzdma->chan[i].vchan.task); + dmaengine_kill_bh(&jzdma->chan[i].vchan.chan); } =20 static const struct jz4780_dma_soc_data jz4740_dma_soc_data =3D { diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index 9049171df857..d8fc7eb71b48 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -1428,6 +1428,48 @@ static void dmaengine_destroy_unmap_pool(void) } } =20 +static void dma_chan_bh_entry(struct tasklet_struct *tasklet) +{ + struct dma_chan *chan =3D from_tasklet(chan, tasklet, bh_tasklet); + dmaengine_bh_work_fn fn =3D READ_ONCE(chan->bh_work_fn); + + if (fn) + fn(chan); +} + +void dmaengine_init_bh(struct dma_chan *chan, dmaengine_bh_work_fn fn) +{ + if (WARN_ON(!fn)) + return; + + if (WARN_ON(chan->bh_work_initialized)) + return; + + chan->bh_work_fn =3D fn; + tasklet_setup(&chan->bh_tasklet, dma_chan_bh_entry); + chan->bh_work_initialized =3D true; +} +EXPORT_SYMBOL_GPL(dmaengine_init_bh); + +bool dmaengine_schedule_bh(struct dma_chan *chan) +{ + if (WARN_ON(!chan->bh_work_initialized)) + return false; + + tasklet_schedule(&chan->bh_tasklet); + return true; +} +EXPORT_SYMBOL_GPL(dmaengine_schedule_bh); + +void dmaengine_kill_bh(struct dma_chan *chan) +{ + if (!chan->bh_work_initialized) + return; + + tasklet_kill(&chan->bh_tasklet); +} +EXPORT_SYMBOL_GPL(dmaengine_kill_bh); + static int __init dmaengine_init_unmap_pool(void) { int i; diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index bcefaff03b5c..a2b688e7f47e 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1663,7 +1663,7 @@ static void dw_remove(struct platform_device *pdev) list_for_each_entry_safe(chan, _chan, &dw->dma.channels, vc.chan.device_node) { list_del(&chan->vc.chan.device_node); - tasklet_kill(&chan->vc.task); + dmaengine_kill_bh(&chan->vc.chan); } } =20 diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 89a4c498a17b..ade866fba2ad 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -1170,7 +1170,7 @@ int dw_edma_remove(struct dw_edma_chip *chip) dma_async_device_unregister(&dw->dma); list_for_each_entry_safe(chan, _chan, &dw->dma.channels, vc.chan.device_node) { - tasklet_kill(&chan->vc.task); + dmaengine_kill_bh(&chan->vc.chan); list_del(&chan->vc.chan.device_node); } =20 diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c index bb7531c456df..90ae678c68d4 100644 --- a/drivers/dma/fsl-edma-common.c +++ b/drivers/dma/fsl-edma-common.c @@ -915,7 +915,7 @@ void fsl_edma_cleanup_vchan(struct dma_device *dmadev) list_for_each_entry_safe(chan, _chan, &dmadev->channels, vchan.chan.device_node) { list_del(&chan->vchan.chan.device_node); - tasklet_kill(&chan->vchan.task); + dmaengine_kill_bh(&chan->vchan.chan); } } =20 diff --git a/drivers/dma/fsl-qdma.c b/drivers/dma/fsl-qdma.c index df843fad0ece..b0ace8bad498 100644 --- a/drivers/dma/fsl-qdma.c +++ b/drivers/dma/fsl-qdma.c @@ -1255,7 +1255,7 @@ static void fsl_qdma_cleanup_vchan(struct dma_device = *dmadev) list_for_each_entry_safe(chan, _chan, &dmadev->channels, vchan.chan.device_node) { list_del(&chan->vchan.chan.device_node); - tasklet_kill(&chan->vchan.task); + dmaengine_kill_bh(&chan->vchan.chan); } } =20 diff --git a/drivers/dma/hisi_dma.c b/drivers/dma/hisi_dma.c index 28bf818f9aa6..10eb98350b9f 100644 --- a/drivers/dma/hisi_dma.c +++ b/drivers/dma/hisi_dma.c @@ -720,7 +720,7 @@ static void hisi_dma_disable_qps(struct hisi_dma_dev *h= dma_dev) =20 for (i =3D 0; i < hdma_dev->chan_num; i++) { hisi_dma_disable_qp(hdma_dev, i); - tasklet_kill(&hdma_dev->chan[i].vc.task); + dmaengine_kill_bh(&hdma_dev->chan[i].vc.chan); } } =20 diff --git a/drivers/dma/hsu/hsu.c b/drivers/dma/hsu/hsu.c index f62d60d7bc6b..315d0ebecd57 100644 --- a/drivers/dma/hsu/hsu.c +++ b/drivers/dma/hsu/hsu.c @@ -500,7 +500,7 @@ int hsu_dma_remove(struct hsu_dma_chip *chip) for (i =3D 0; i < hsu->nr_channels; i++) { struct hsu_dma_chan *hsuc =3D &hsu->chan[i]; =20 - tasklet_kill(&hsuc->vchan.task); + dmaengine_kill_bh(&hsuc->vchan.chan); } =20 return 0; diff --git a/drivers/dma/idma64.c b/drivers/dma/idma64.c index 5fcd1befc92d..1d395fb735ff 100644 --- a/drivers/dma/idma64.c +++ b/drivers/dma/idma64.c @@ -617,14 +617,14 @@ static void idma64_remove(struct idma64_chip *chip) =20 /* * Explicitly call devm_request_irq() to avoid the side effects with - * the scheduled tasklets. + * scheduled BH work. */ devm_free_irq(chip->dev, chip->irq, idma64); =20 for (i =3D 0; i < idma64->dma.chancnt; i++) { struct idma64_chan *idma64c =3D &idma64->chan[i]; =20 - tasklet_kill(&idma64c->vchan.task); + dmaengine_kill_bh(&idma64c->vchan.chan); } } =20 diff --git a/drivers/dma/img-mdc-dma.c b/drivers/dma/img-mdc-dma.c index b3765ba15803..0c6024088444 100644 --- a/drivers/dma/img-mdc-dma.c +++ b/drivers/dma/img-mdc-dma.c @@ -1031,7 +1031,7 @@ static void mdc_dma_remove(struct platform_device *pd= ev) =20 devm_free_irq(&pdev->dev, mchan->irq, mchan); =20 - tasklet_kill(&mchan->vc.task); + dmaengine_kill_bh(&mchan->vc.chan); } =20 pm_runtime_disable(&pdev->dev); diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 36368835a845..4d13b9d2880d 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2399,11 +2399,11 @@ static void sdma_remove(struct platform_device *pde= v) int i; =20 devm_free_irq(&pdev->dev, sdma->irq, sdma); - /* Kill the tasklet */ + /* Kill the channel BH */ for (i =3D 0; i < MAX_DMA_CHANNELS; i++) { struct sdma_channel *sdmac =3D &sdma->channel[i]; =20 - tasklet_kill(&sdmac->vc.task); + dmaengine_kill_bh(&sdmac->vc.chan); sdma_free_chan_resources(&sdmac->vc.chan); } =20 diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c index e84f197fea76..3d73b391e42e 100644 --- a/drivers/dma/k3dma.c +++ b/drivers/dma/k3dma.c @@ -976,7 +976,7 @@ static void k3_dma_remove(struct platform_device *op) =20 list_for_each_entry_safe(c, cn, &d->slave.channels, vc.chan.device_node) { list_del(&c->vc.chan.device_node); - tasklet_kill(&c->vc.task); + dmaengine_kill_bh(&c->vc.chan); } tasklet_kill(&d->task); clk_disable_unprepare(d->clk); diff --git a/drivers/dma/loongson/loongson1-apb-dma.c b/drivers/dma/loongso= n/loongson1-apb-dma.c index 89786cbd20ab..52a360719644 100644 --- a/drivers/dma/loongson/loongson1-apb-dma.c +++ b/drivers/dma/loongson/loongson1-apb-dma.c @@ -552,7 +552,7 @@ static void ls1x_dma_chan_remove(struct ls1x_dma *dma) =20 if (chan->vc.chan.device =3D=3D &dma->ddev) { list_del(&chan->vc.chan.device_node); - tasklet_kill(&chan->vc.task); + dmaengine_kill_bh(&chan->vc.chan); } } } diff --git a/drivers/dma/mediatek/mtk-cqdma.c b/drivers/dma/mediatek/mtk-cq= dma.c index 80791e30aec2..7b44d3358cda 100644 --- a/drivers/dma/mediatek/mtk-cqdma.c +++ b/drivers/dma/mediatek/mtk-cqdma.c @@ -895,7 +895,7 @@ static void mtk_cqdma_remove(struct platform_device *pd= ev) vc =3D &cqdma->vc[i]; =20 list_del(&vc->vc.chan.device_node); - tasklet_kill(&vc->vc.task); + dmaengine_kill_bh(&vc->vc.chan); } =20 /* disable interrupt */ diff --git a/drivers/dma/mediatek/mtk-hsdma.c b/drivers/dma/mediatek/mtk-hs= dma.c index a43412ff5edd..75555fa41536 100644 --- a/drivers/dma/mediatek/mtk-hsdma.c +++ b/drivers/dma/mediatek/mtk-hsdma.c @@ -1020,7 +1020,7 @@ static void mtk_hsdma_remove(struct platform_device *= pdev) vc =3D &hsdma->vc[i]; =20 list_del(&vc->vc.chan.device_node); - tasklet_kill(&vc->vc.task); + dmaengine_kill_bh(&vc->vc.chan); } =20 /* Disable DMA interrupt */ diff --git a/drivers/dma/mediatek/mtk-uart-apdma.c b/drivers/dma/mediatek/m= tk-uart-apdma.c index c269d84d7bd2..8ce206a0ecc5 100644 --- a/drivers/dma/mediatek/mtk-uart-apdma.c +++ b/drivers/dma/mediatek/mtk-uart-apdma.c @@ -312,7 +312,7 @@ static void mtk_uart_apdma_free_chan_resources(struct d= ma_chan *chan) =20 free_irq(c->irq, chan); =20 - tasklet_kill(&c->vc.task); + dmaengine_kill_bh(&c->vc.chan); =20 vchan_free_chan_resources(&c->vc); =20 @@ -463,7 +463,7 @@ static void mtk_uart_apdma_free(struct mtk_uart_apdmade= v *mtkd) struct mtk_chan, vc.chan.device_node); =20 list_del(&c->vc.chan.device_node); - tasklet_kill(&c->vc.task); + dmaengine_kill_bh(&c->vc.chan); } } =20 diff --git a/drivers/dma/owl-dma.c b/drivers/dma/owl-dma.c index 7c80572fc71d..0d9f324adba0 100644 --- a/drivers/dma/owl-dma.c +++ b/drivers/dma/owl-dma.c @@ -1055,7 +1055,7 @@ static inline void owl_dma_free(struct owl_dma *od) list_for_each_entry_safe(vchan, next, &od->dma.channels, vc.chan.device_node) { list_del(&vchan->vc.chan.device_node); - tasklet_kill(&vchan->vc.task); + dmaengine_kill_bh(&vchan->vc.chan); } } =20 diff --git a/drivers/dma/pxa_dma.c b/drivers/dma/pxa_dma.c index fa2ee0b3e09f..2cca8c31929c 100644 --- a/drivers/dma/pxa_dma.c +++ b/drivers/dma/pxa_dma.c @@ -1215,7 +1215,7 @@ static void pxad_free_channels(struct dma_device *dma= dev) list_for_each_entry_safe(c, cn, &dmadev->channels, vc.chan.device_node) { list_del(&c->vc.chan.device_node); - tasklet_kill(&c->vc.task); + dmaengine_kill_bh(&c->vc.chan); } } =20 diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c index 1bb26af0405f..c23496c3ac69 100644 --- a/drivers/dma/qcom/bam_dma.c +++ b/drivers/dma/qcom/bam_dma.c @@ -1387,7 +1387,7 @@ static int bam_dma_probe(struct platform_device *pdev) dma_async_device_unregister(&bdev->common); err_bam_channel_exit: for (i =3D 0; i < bdev->num_channels; i++) - tasklet_kill(&bdev->channels[i].vc.task); + dmaengine_kill_bh(&bdev->channels[i].vc.chan); err_tasklet_kill: tasklet_kill(&bdev->task); err_disable_clk: @@ -1413,7 +1413,7 @@ static void bam_dma_remove(struct platform_device *pd= ev) =20 for (i =3D 0; i < bdev->num_channels; i++) { bam_dma_terminate_all(&bdev->channels[i].vc.chan); - tasklet_kill(&bdev->channels[i].vc.task); + dmaengine_kill_bh(&bdev->channels[i].vc.chan); =20 if (!bdev->channels[i].fifo_virt) continue; diff --git a/drivers/dma/qcom/qcom_adm.c b/drivers/dma/qcom/qcom_adm.c index 07fbe32d31fa..13f5ca8ff808 100644 --- a/drivers/dma/qcom/qcom_adm.c +++ b/drivers/dma/qcom/qcom_adm.c @@ -918,8 +918,8 @@ static void adm_dma_remove(struct platform_device *pdev) /* mask IRQs for this channel/EE pair */ writel(0, adev->regs + ADM_CH_RSLT_CONF(achan->id, adev->ee)); =20 - tasklet_kill(&adev->channels[i].vc.task); - adm_terminate_all(&adev->channels[i].vc.chan); + dmaengine_kill_bh(&achan->vc.chan); + adm_terminate_all(&achan->vc.chan); } =20 devm_free_irq(adev->dev, adev->irq, adev); diff --git a/drivers/dma/sa11x0-dma.c b/drivers/dma/sa11x0-dma.c index a6fa431530e3..e14566fa2d74 100644 --- a/drivers/dma/sa11x0-dma.c +++ b/drivers/dma/sa11x0-dma.c @@ -891,7 +891,7 @@ static void sa11x0_dma_free_channels(struct dma_device = *dmadev) =20 list_for_each_entry_safe(c, cn, &dmadev->channels, vc.chan.device_node) { list_del(&c->vc.chan.device_node); - tasklet_kill(&c->vc.task); + dmaengine_kill_bh(&c->vc.chan); kfree(c); } } diff --git a/drivers/dma/sf-pdma/sf-pdma.c b/drivers/dma/sf-pdma/sf-pdma.c index 6f79cc28703e..a08ca355dadb 100644 --- a/drivers/dma/sf-pdma/sf-pdma.c +++ b/drivers/dma/sf-pdma/sf-pdma.c @@ -602,7 +602,7 @@ 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); - tasklet_kill(&ch->vchan.task); + dmaengine_kill_bh(&ch->vchan.chan); tasklet_kill(&ch->done_tasklet); tasklet_kill(&ch->err_tasklet); } diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c index 087fea3af2e4..f90f5d8d5a1e 100644 --- a/drivers/dma/sprd-dma.c +++ b/drivers/dma/sprd-dma.c @@ -1253,7 +1253,7 @@ static void sprd_dma_remove(struct platform_device *p= dev) list_for_each_entry_safe(c, cn, &sdev->dma_dev.channels, vc.chan.device_node) { list_del(&c->vc.chan.device_node); - tasklet_kill(&c->vc.task); + dmaengine_kill_bh(&c->vc.chan); } =20 of_dma_controller_free(pdev->dev.of_node); diff --git a/drivers/dma/st_fdma.c b/drivers/dma/st_fdma.c index d9547017f3bd..cae0a7fe6ceb 100644 --- a/drivers/dma/st_fdma.c +++ b/drivers/dma/st_fdma.c @@ -733,7 +733,7 @@ static void st_fdma_free(struct st_fdma_dev *fdev) for (i =3D 0; i < fdev->nr_channels; i++) { fchan =3D &fdev->chans[i]; list_del(&fchan->vchan.chan.device_node); - tasklet_kill(&fchan->vchan.task); + dmaengine_kill_bh(&fchan->vchan.chan); } } =20 diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index f47a326dd7ff..4ddea3cdcd66 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -1094,7 +1094,7 @@ static inline void sun6i_dma_free(struct sun6i_dma_de= v *sdev) struct sun6i_vchan *vchan =3D &sdev->vchans[i]; =20 list_del(&vchan->vc.chan.device_node); - tasklet_kill(&vchan->vc.task); + dmaengine_kill_bh(&vchan->vc.chan); } } =20 diff --git a/drivers/dma/tegra186-gpc-dma.c b/drivers/dma/tegra186-gpc-dma.c index 64cedef1050a..3a27a83a3288 100644 --- a/drivers/dma/tegra186-gpc-dma.c +++ b/drivers/dma/tegra186-gpc-dma.c @@ -1284,7 +1284,7 @@ static void tegra_dma_free_chan_resources(struct dma_= chan *dc) tegra_dma_terminate_all(dc); synchronize_irq(tdc->irq); =20 - tasklet_kill(&tdc->vc.task); + dmaengine_kill_bh(&tdc->vc.chan); tdc->config_init =3D false; tdc->slave_id =3D -1; tdc->sid_dir =3D DMA_TRANS_NONE; diff --git a/drivers/dma/tegra210-adma.c b/drivers/dma/tegra210-adma.c index ceaee1e33e68..780863199224 100644 --- a/drivers/dma/tegra210-adma.c +++ b/drivers/dma/tegra210-adma.c @@ -811,7 +811,7 @@ static void tegra_adma_free_chan_resources(struct dma_c= han *dc) =20 tegra_adma_terminate_all(dc); vchan_free_chan_resources(&tdc->vc); - tasklet_kill(&tdc->vc.task); + dmaengine_kill_bh(&tdc->vc.chan); free_irq(tdc->irq, tdc); pm_runtime_put(tdc2dev(tdc)); =20 diff --git a/drivers/dma/ti/edma.c b/drivers/dma/ti/edma.c index d97db5af3555..c0ad0cdabb87 100644 --- a/drivers/dma/ti/edma.c +++ b/drivers/dma/ti/edma.c @@ -2560,7 +2560,7 @@ static void edma_cleanupp_vchan(struct dma_device *dm= adev) list_for_each_entry_safe(echan, _echan, &dmadev->channels, vchan.chan.device_node) { list_del(&echan->vchan.chan.device_node); - tasklet_kill(&echan->vchan.task); + dmaengine_kill_bh(&echan->vchan.chan); } } =20 diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c index 1cf158eb7bdb..fd428c26799a 100644 --- a/drivers/dma/ti/k3-udma.c +++ b/drivers/dma/ti/k3-udma.c @@ -4042,12 +4042,12 @@ static void udma_desc_pre_callback(struct virt_dma_= chan *vc, } =20 /* - * This tasklet handles the completion of a DMA descriptor by + * This BH handles the completion of a DMA descriptor by * calling its callback and freeing it. */ -static void udma_vchan_complete(struct tasklet_struct *t) +static void udma_vchan_complete(struct dma_chan *chan) { - struct virt_dma_chan *vc =3D from_tasklet(vc, t, task); + struct virt_dma_chan *vc =3D to_virt_chan(chan); struct virt_dma_desc *vd, *_vd; struct dmaengine_desc_callback cb; LIST_HEAD(head); @@ -4112,7 +4112,7 @@ static void udma_free_chan_resources(struct dma_chan = *chan) } =20 vchan_free_chan_resources(&uc->vc); - tasklet_kill(&uc->vc.task); + dmaengine_kill_bh(&uc->vc.chan); =20 bcdma_free_bchan_resources(uc); udma_free_tx_resources(uc); @@ -5627,8 +5627,8 @@ static int udma_probe(struct platform_device *pdev) if (!uc->name) return -ENOMEM; vchan_init(&uc->vc, &ud->ddev); - /* Use custom vchan completion handling */ - tasklet_setup(&uc->vc.task, udma_vchan_complete); + /* Override the default vchan completion handler */ + uc->vc.chan.bh_work_fn =3D udma_vchan_complete; init_completion(&uc->teardown_completed); INIT_DELAYED_WORK(&uc->tx_drain.work, udma_check_tx_completion); } diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c index 55ece7fd0d99..899c5eeeac88 100644 --- a/drivers/dma/ti/omap-dma.c +++ b/drivers/dma/ti/omap-dma.c @@ -1521,7 +1521,7 @@ static void omap_dma_free(struct omap_dmadev *od) struct omap_chan, vc.chan.device_node); =20 list_del(&c->vc.chan.device_node); - tasklet_kill(&c->vc.task); + dmaengine_kill_bh(&c->vc.chan); kfree(c); } } diff --git a/drivers/dma/virt-dma.c b/drivers/dma/virt-dma.c index 7961172a780d..d407af6cc1da 100644 --- a/drivers/dma/virt-dma.c +++ b/drivers/dma/virt-dma.c @@ -77,12 +77,12 @@ struct virt_dma_desc *vchan_find_desc(struct virt_dma_c= han *vc, EXPORT_SYMBOL_GPL(vchan_find_desc); =20 /* - * This tasklet handles the completion of a DMA descriptor by - * calling its callback and freeing it. + * This bottom-half handler completes a DMA descriptor by invoking its + * callback and freeing it. */ -static void vchan_complete(struct tasklet_struct *t) +static void vchan_complete(struct dma_chan *chan) { - struct virt_dma_chan *vc =3D from_tasklet(vc, t, task); + struct virt_dma_chan *vc =3D to_virt_chan(chan); struct virt_dma_desc *vd, *_vd; struct dmaengine_desc_callback cb; LIST_HEAD(head); @@ -98,7 +98,7 @@ static void vchan_complete(struct tasklet_struct *t) } spin_unlock_irq(&vc->lock); =20 - dmaengine_desc_callback_invoke(&cb, &vd->tx_result); + dmaengine_desc_callback_invoke(&cb, vd ? &vd->tx_result : NULL); =20 list_for_each_entry_safe(vd, _vd, &head, node) { dmaengine_desc_get_callback(&vd->tx, &cb); @@ -131,7 +131,7 @@ void vchan_init(struct virt_dma_chan *vc, struct dma_de= vice *dmadev) INIT_LIST_HEAD(&vc->desc_completed); INIT_LIST_HEAD(&vc->desc_terminated); =20 - tasklet_setup(&vc->task, vchan_complete); + dmaengine_init_bh(&vc->chan, vchan_complete); =20 vc->chan.device =3D dmadev; list_add_tail(&vc->chan.device_node, &dmadev->channels); diff --git a/drivers/dma/virt-dma.h b/drivers/dma/virt-dma.h index 59d9eabc8b67..0ba42fded2cc 100644 --- a/drivers/dma/virt-dma.h +++ b/drivers/dma/virt-dma.h @@ -21,7 +21,6 @@ struct virt_dma_desc { =20 struct virt_dma_chan { struct dma_chan chan; - struct tasklet_struct task; void (*desc_free)(struct virt_dma_desc *); =20 spinlock_t lock; @@ -106,7 +105,7 @@ static inline void vchan_cookie_complete(struct virt_dm= a_desc *vd) vd, cookie); list_add_tail(&vd->node, &vc->desc_completed); =20 - tasklet_schedule(&vc->task); + dmaengine_schedule_bh(&vc->chan); } =20 /** @@ -137,7 +136,7 @@ static inline void vchan_cyclic_callback(struct virt_dm= a_desc *vd) struct virt_dma_chan *vc =3D to_virt_chan(vd->tx.chan); =20 vc->cyclic =3D vd; - tasklet_schedule(&vc->task); + dmaengine_schedule_bh(&vc->chan); } =20 /** @@ -223,7 +222,7 @@ static inline void vchan_synchronize(struct virt_dma_ch= an *vc) LIST_HEAD(head); unsigned long flags; =20 - tasklet_kill(&vc->task); + dmaengine_kill_bh(&vc->chan); =20 spin_lock_irqsave(&vc->lock, flags); =20 diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index b3d251c9734e..a1437bdbda9b 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -12,6 +12,7 @@ #include #include #include +#include #include =20 /** @@ -295,6 +296,10 @@ enum dma_desc_metadata_mode { DESC_METADATA_ENGINE =3D BIT(1), }; =20 +struct dma_chan; + +typedef void (*dmaengine_bh_work_fn)(struct dma_chan *chan); + /** * struct dma_chan_percpu - the per-CPU part of struct dma_chan * @memcpy_count: transaction counter @@ -334,6 +339,9 @@ struct dma_router { * @router: pointer to the DMA router structure * @route_data: channel specific data for the router * @private: private data for certain client-channel associations + * @bh_tasklet: bottom-half tasklet stored per-channel + * @bh_work_fn: callback executed when @bh_tasklet runs + * @bh_work_initialized: indicates whether @bh_tasklet has been initialized */ struct dma_chan { struct dma_device *device; @@ -359,6 +367,9 @@ struct dma_chan { void *route_data; =20 void *private; + struct tasklet_struct bh_tasklet; + dmaengine_bh_work_fn bh_work_fn; + bool bh_work_initialized; }; =20 /** @@ -1529,6 +1540,9 @@ struct dma_chan *devm_dma_request_chan(struct device = *dev, const char *name); =20 void dma_release_channel(struct dma_chan *chan); int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps); +void dmaengine_init_bh(struct dma_chan *chan, dmaengine_bh_work_fn fn); +bool dmaengine_schedule_bh(struct dma_chan *chan); +void dmaengine_kill_bh(struct dma_chan *chan); #else static inline struct dma_chan *dma_find_channel(enum dma_transaction_type = tx_type) { @@ -1576,6 +1590,20 @@ static inline int dma_get_slave_caps(struct dma_chan= *chan, { return -ENXIO; } + +static inline void dmaengine_init_bh(struct dma_chan *chan, + dmaengine_bh_work_fn fn) +{ +} + +static inline bool dmaengine_schedule_bh(struct dma_chan *chan) +{ + return false; +} + +static inline void dmaengine_kill_bh(struct dma_chan *chan) +{ +} #endif =20 static inline int dmaengine_desc_set_reuse(struct dma_async_tx_descriptor = *tx) --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 8543E435A87 for ; Mon, 10 Aug 2026 18:11:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385478; cv=none; b=fEcl5rqiiuZEkimG/0RAolJACPz/fzyHk8jaF9w/zp3QGvBKSdjOF1ANcwnY5sfGNELB3WAxxywjsUzddGAwsu69qKPkRY3XUiGH0+D0K0l0lwkCFkHFYUMMD0r9peYGmiAC6ZQa0cH59EgUVhSpDPghNbExD2jVGp30TzmSIRo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385478; c=relaxed/simple; bh=A+wdVsonyIyCPvYO9b0+zZ8pAQxec+QpXwawuJGaBpI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DqJAdV/5VIJJP7Jl7F/jhiZ6DwyA+iB8AavbrnUKl/vzavlQlhRKoGuYg+n+/cQdJ4dmb5wUeoccWqdRcH0hgckfYF7nPDF5sabgT1UlKGeisVOd9xFw3Y5OMG+v1zd1xDLcTNmiQhAAFKl29j1KcSvyUoWVJ2v54GbuzbzqAjo= 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=bpFPjIWm; arc=none smtp.client-ip=209.85.216.49 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="bpFPjIWm" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-383cb94f742so2368016a91.3 for ; Mon, 10 Aug 2026 11:11:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385475; x=1786990275; 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=j1oXvCbOw5n+OU0mIPnphWs1BICFLSSH2Y3JAeFMT9Y=; b=bpFPjIWml4QJNSMDcYxnpxIFzWrUrn9Y5M2/CwDgTlyNTZ4FslTpz1+HmARCwkUAF1 8/yWCpxDTKhDBrSNu3zqER0XKRYeG5frA77VBVPg16SyE6iCW7QP7rE5fW2LT96YOMeJ r7qX5BQJm6Ayb/ehxNdeveyAJ0b85NOBi4k5xNQDyR1SPZfvvok71vAqshxEDoriVhpZ cEh1vBq2SvL/HBqbwv0UTXXdomZj8VPEaJFi4FGzvogKDxpUjH2MbTSJRcJ6Ht9+eygG SjMgob8sKzke1Iv/6wBPqrbHmTMNW1eH5aGaorxvcRZNcaMngXbMyDw6JLIfjH+4tXNF KdEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385475; x=1786990275; 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=j1oXvCbOw5n+OU0mIPnphWs1BICFLSSH2Y3JAeFMT9Y=; b=Lz8xM92xic1+Z6d+QcqDuhyyCISH3Pm17Q4eJf9ie0ldCpsW+//SR6lVgp1u6vFASn 3TSiQylH3a6UoN3TtgD/q9vpv90LgDKF8EqL05mpUUPfRWqk6wHO8BQkhGWdr6zb80ay rNavfKc6utmhfyQDGUsf1cITPeGSa2UL2+ykIGyQ2h6+voTPbOVM3i+maV2o/6umBTjb BICByW9LVPpecRFPd64Xiq/hPldpzX4Ykb407ZEZZN1bqcvrfhKUw7zD76WOAkBuC4gI NXd/AWfphSX3v4+cUGy45UDBvwS1qPcg+ysN/SicKXQrclVCq2CPj3tyQziE7AbUPzkN TzHQ== X-Forwarded-Encrypted: i=1; AHgh+Rqi+yogwkAJF7XK0NHuIiHvXqLx3H0FWBD++aE6vOM7fPN/cFg+S6bsh924n5mHKBHUnpP6uo3KavU/vtg=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4jP9brLgowIvAYseLQyj7FiBrW+k67RC90PXF5AiE10U3CaVB h06VALYPVrrfVhO5wXoQ+r7DdiNmHW/X17lxZ6QqSRJt1ljHLh3+G+0L X-Gm-Gg: AR+sD12x0LgOGi/7SfDp+rlMmfXcLyApsksOT6BM2qv49sQOG3ppKZ6VBOmx1GiYA2p Pj6iKnSVzNqnqQ6zG6E+NyvX3svqdfjc1ryHbgDBz9hPpFcHl2gS0U32mMlN0HpcQuT76kspZao 2x/BmuBAZwEfyH/isSKdcRkJEk6BBk1YntG6K225g/p7fG3doIidWEDFc2t7O1jm5uY1DzMYyIG Uo4UX7E1gLiLEE+j/A9/bv8Jfy66RkNzCloUnyWcA2jPVG+MO3UU8FXbCQKdVYuj5a5jiLcCa22 eRA80ryhJ9UMzpMFjqqh1SHcn6ic8poWV0ig7awV4AXUFN5eFe29zjqZFs3cOfjD7s+5EeVX8aq wV/eR2af9RVsMn7zYLvG60buE9HbwlQP1YVFcJZ5C6rdS26nytjG0GSwo0i/mf6FLMeFms0y767 xLiYl+98cBSmt7lbUri0uonk3E+pDVIfrsKuQmrcTcb8LcGoSQtRgakn9uh54pWBE= X-Received: by 2002:a17:90b:268f:b0:38d:c74d:29c5 with SMTP id 98e67ed59e1d1-392cca64db7mr3553763a91.19.1786385474709; Mon, 10 Aug 2026 11:11:14 -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.11.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:14 -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 Subject: [PATCH v3 02/34] dmaengine: back channel BH helpers with WQ_BH Date: Mon, 10 Aug 2026 11:09:03 -0700 Message-ID: <442747fea2d831d2d6257e15a984a494bd7ad6ec.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the tasklet implementation of the channel BH helpers with a dedicated WQ_BH | WQ_PERCPU workqueue. The public dmaengine_*_bh() API and its softirq execution context remain unchanged. Keep the workqueue operations internal to dmaengine. Drain scheduled work in dmaengine_kill_bh() to preserve the completion semantics of tasklet_kill(). Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/dmaengine.c | 59 ++++++++++++++++++++++++++++++++------- include/linux/dmaengine.h | 10 +++---- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index d8fc7eb71b48..e00f73a18e99 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -54,6 +54,7 @@ #include #include #include +#include =20 #include "dmaengine.h" =20 @@ -61,6 +62,7 @@ static DEFINE_MUTEX(dma_list_mutex); static DEFINE_IDA(dma_ida); static LIST_HEAD(dma_device_list); static long dmaengine_ref_count; +static struct workqueue_struct *dmaengine_bh_wq; =20 /* --- debugfs implementation --- */ #ifdef CONFIG_DEBUG_FS @@ -1428,9 +1430,34 @@ static void dmaengine_destroy_unmap_pool(void) } } =20 -static void dma_chan_bh_entry(struct tasklet_struct *tasklet) +static void dmaengine_destroy_bh_wq(void) { - struct dma_chan *chan =3D from_tasklet(chan, tasklet, bh_tasklet); + if (!dmaengine_bh_wq) + return; + + destroy_workqueue(dmaengine_bh_wq); + dmaengine_bh_wq =3D NULL; +} + +static bool dmaengine_queue_bh_work(struct work_struct *work) +{ + if (WARN_ON(!dmaengine_bh_wq)) + return false; + + return queue_work(dmaengine_bh_wq, work); +} + +static void dmaengine_flush_bh_work(struct work_struct *work) +{ + if (!work) + return; + + flush_work(work); +} + +static void dma_chan_bh_entry(struct work_struct *work) +{ + struct dma_chan *chan =3D container_of(work, struct dma_chan, bh_work); dmaengine_bh_work_fn fn =3D READ_ONCE(chan->bh_work_fn); =20 if (fn) @@ -1446,7 +1473,7 @@ void dmaengine_init_bh(struct dma_chan *chan, dmaengi= ne_bh_work_fn fn) return; =20 chan->bh_work_fn =3D fn; - tasklet_setup(&chan->bh_tasklet, dma_chan_bh_entry); + INIT_WORK(&chan->bh_work, dma_chan_bh_entry); chan->bh_work_initialized =3D true; } EXPORT_SYMBOL_GPL(dmaengine_init_bh); @@ -1456,8 +1483,7 @@ bool dmaengine_schedule_bh(struct dma_chan *chan) if (WARN_ON(!chan->bh_work_initialized)) return false; =20 - tasklet_schedule(&chan->bh_tasklet); - return true; + return dmaengine_queue_bh_work(&chan->bh_work); } EXPORT_SYMBOL_GPL(dmaengine_schedule_bh); =20 @@ -1466,7 +1492,7 @@ void dmaengine_kill_bh(struct dma_chan *chan) if (!chan->bh_work_initialized) return; =20 - tasklet_kill(&chan->bh_tasklet); + dmaengine_flush_bh_work(&chan->bh_work); } EXPORT_SYMBOL_GPL(dmaengine_kill_bh); =20 @@ -1666,15 +1692,28 @@ EXPORT_SYMBOL_GPL(dma_run_dependencies); =20 static int __init dma_bus_init(void) { - int err =3D dmaengine_init_unmap_pool(); + int err; =20 + dmaengine_bh_wq =3D alloc_workqueue("dmaengine_bh", + WQ_BH | WQ_PERCPU, 0); + if (!dmaengine_bh_wq) + return -ENOMEM; + + err =3D dmaengine_init_unmap_pool(); if (err) - return err; + goto err_destroy_wq; =20 err =3D class_register(&dma_devclass); - if (!err) - dmaengine_debugfs_init(); + if (err) + goto err_destroy_pool; =20 + dmaengine_debugfs_init(); + return 0; + +err_destroy_pool: + dmaengine_destroy_unmap_pool(); +err_destroy_wq: + dmaengine_destroy_bh_wq(); return err; } arch_initcall(dma_bus_init); diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index a1437bdbda9b..9f1a5405f6b0 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include =20 /** @@ -339,9 +339,9 @@ struct dma_router { * @router: pointer to the DMA router structure * @route_data: channel specific data for the router * @private: private data for certain client-channel associations - * @bh_tasklet: bottom-half tasklet stored per-channel - * @bh_work_fn: callback executed when @bh_tasklet runs - * @bh_work_initialized: indicates whether @bh_tasklet has been initialized + * @bh_work: bottom-half work item stored per-channel + * @bh_work_fn: callback executed when @bh_work runs + * @bh_work_initialized: indicates whether @bh_work has been initialized */ struct dma_chan { struct dma_device *device; @@ -367,7 +367,7 @@ struct dma_chan { void *route_data; =20 void *private; - struct tasklet_struct bh_tasklet; + struct work_struct bh_work; dmaengine_bh_work_fn bh_work_fn; bool bh_work_initialized; }; --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 6966F435526 for ; Mon, 10 Aug 2026 18:11:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385479; cv=none; b=OfK6E/awVClji0MLREA1WhY5kcJ8nB1Ex16zeSx+/Qz/Zt+ImUorfYBBBrCGwsdluQS80UrZpaa+jeWYdrVnQ89rvxoYaQJ5nPpa37EiqV0b5Ts+UG9qdLLEL/0gRvWr5d/QYWPgULKajI6KnXN9B2ObFKW8kqIUPeo486zCdbA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385479; c=relaxed/simple; bh=esXYBAfmKoYjtMYG1Fhxmw5GV454BNtliriMAheUUpU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oNMY3skB2ZL9hPxkiNJXX025gMxSjQIpx9iY7XNY3SesLj9I7GH7h81hzP+kye2s18LSkhOCLgRCDf42ArZVtmd/aCFEsvdODCXZxBEF3EQ3eTIw8olYSP7eB9emG/V7gP4r95Z2gq7WxcyBGcjKk4RB6x72ppnVuBA6nm7/SW8= 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=lVFEbffi; arc=none smtp.client-ip=209.85.216.47 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="lVFEbffi" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-38e69bdb0fcso1935685a91.1 for ; Mon, 10 Aug 2026 11:11:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385478; x=1786990278; 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=nkIvExABzzIA572IGBET5kLr9qvjxhndAMy4fFMeZZY=; b=lVFEbffisosuok+ptDfBQfSBdb0A2KwCgL7YHLxXDe5uM+4E/HReB7RDZI0s6ON7BQ ZZQ7/Y4XJ+Eiz572ziLsrutp7rNNZhFMLMZ/238nC7mjJfTfpBaNu1er2HRU5Jzp2oRG yd6kJRs9Ymf4mtsU2ZnjWX66O9OG+aktzwKe4LMQgZtzEPTqzZMAZk3riejfpJ/ZQdwc htTepJRm+34YUR7K6i3KeXNlCWIuYXpmnSRNrmBhpdvJm3YmNaS+TCBPVaKjZnYzlbBC vVINsJU6yp2avWSZUUxcN0aU1b67jJj73PZraEnzLoMv5J8UwCE8kgyLxsxmb20dWhav gbag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385478; x=1786990278; 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=nkIvExABzzIA572IGBET5kLr9qvjxhndAMy4fFMeZZY=; b=IBQVD69eIW0a+c97PSmGPHO+KEHE7NmV5DTO4bm8blSNgIvcC+vShVEgrGILW0Pme6 NWvmSOpMJEGNjy6SI1KPKK4pSB/y10gn2oHW6WRpD9Lw+i0giB4ZWr1zefTDnO93GaY9 Kwj7gupkLQgEo3es9s26KSv9iC5eSXXBi0mIidJ9zOHs4BEfXBnWeOa5/etX14MWD61G 1hnsAqjpRXvsDScPSjuOsi2NIdfkUOatv6fAFVVbi+rNPJfId8o/qBJDHoOOkMKRJh92 fDgJpgQ11BWxg6TWYosuM+gOVgXVsZjWdDputcUPK++CtuJTwiTN1jrBc4M6r5w+YFLF KRWg== X-Forwarded-Encrypted: i=1; AHgh+RqWPcm6Z5vMIhQG+rsJ0XwP31KSFFv2D8FnbgisqA1xEjHLCvOl2vKT56LjWtMX14w7SgcCbyD4VbZU3l8=@vger.kernel.org X-Gm-Message-State: AOJu0YwZpaEWCGm8VqiS07/wZe6djIMKLkctSSADJSUVZTtdQWJqmgRQ xohIlofCBp7y/GuWHObIjpl0CEZwD7SYTJnQw8dCBi6oxcS9s3WhR5En X-Gm-Gg: AR+sD13FxVGgCSs6GNklDSM3FBnXCpIl/ZRontyM3bjqi6qlKT9+qtN6wtmfdLqZp6Y Y22r2mmaU1S2p/ZY3vHLeKlRu375SgImkpnjEa9cWSUjwPNfVEXH6ELyurl1vrZ7DN3D3IoTr2C veInV3MB0Jmg6ckorRZjLgCV/8n3fc7gUowvkQgsqOeEtXgph8jLdxl1w0iL4WORJ8t/RaucgI6 FBCfZzLthP2iA+Cq6bJcAnbGMTX4fbNL0rJKtsOexjKewDlF10XjEf+c7j7z2tFAdt4YGWtK76A 32SwuIi5KF9yVXbhkj4ICnO+cps7JfCQKGRhG5/c6xXJkYOLF6R8PPzO+MMbIWtoAwNuREZGcsl enm4IOVBS3rQes1Eyov5HB0cEVBui0455mUtvhQrvKTwQC2nax+On7izPCEXvOoi3+Cp85HOVbN s3/mexqugf1MGVtV9HoPNOt2PmR/MpGHg4KmfJiGOvjI30cwrzHyQaqJVHBWhRfxU= X-Received: by 2002:a17:90a:c2c4:b0:38c:a59b:5189 with SMTP id 98e67ed59e1d1-392cca3507dmr3372142a91.15.1786385477700; Mon, 10 Aug 2026 11:11:17 -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.11.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:17 -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 , Sven Peter , Janne Grunau , Neal Gompa , asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 03/34] dmaengine: apple-admac: use dmaengine BH callback Date: Mon, 10 Aug 2026 11:09:04 -0700 Message-ID: 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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/apple-admac.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/dma/apple-admac.c b/drivers/dma/apple-admac.c index 14a5ee14a481..c5d4fb96d3c4 100644 --- a/drivers/dma/apple-admac.c +++ b/drivers/dma/apple-admac.c @@ -89,7 +89,6 @@ struct admac_chan { unsigned int no; struct admac_data *host; struct dma_chan chan; - struct tasklet_struct tasklet; =20 u32 carveout; =20 @@ -521,10 +520,7 @@ static int admac_terminate_all(struct dma_chan *chan) list_add_tail(&adchan->current_tx->node, &adchan->to_free); adchan->current_tx =3D NULL; } - /* - * Descriptors can only be freed after the tasklet - * has been killed (in admac_synchronize). - */ + /* Descriptors are released once the BH is flushed in admac_synchronize */ list_splice_tail_init(&adchan->submitted, &adchan->to_free); list_splice_tail_init(&adchan->issued, &adchan->to_free); spin_unlock_irqrestore(&adchan->lock, flags); @@ -543,7 +539,7 @@ static void admac_synchronize(struct dma_chan *chan) list_splice_tail_init(&adchan->to_free, &head); spin_unlock_irqrestore(&adchan->lock, flags); =20 - tasklet_kill(&adchan->tasklet); + dmaengine_kill_bh(&adchan->chan); =20 list_for_each_entry_safe(adtx, _adtx, &head, node) { list_del(&adtx->node); @@ -662,7 +658,7 @@ static void admac_handle_status_desc_done(struct admac_= data *ad, int channo) tx->reclaimed_pos %=3D 2 * tx->buf_len; =20 admac_cyclic_write_desc(ad, channo, tx); - tasklet_schedule(&adchan->tasklet); + dmaengine_schedule_bh(&adchan->chan); } spin_unlock_irqrestore(&adchan->lock, flags); } @@ -712,9 +708,9 @@ static irqreturn_t admac_interrupt(int irq, void *devid) return IRQ_HANDLED; } =20 -static void admac_chan_tasklet(struct tasklet_struct *t) +static void admac_chan_bh(struct dma_chan *chan) { - struct admac_chan *adchan =3D from_tasklet(adchan, t, tasklet); + struct admac_chan *adchan =3D to_admac_chan(chan); struct admac_tx *adtx; struct dmaengine_desc_callback cb; struct dmaengine_result tx_result; @@ -886,7 +882,7 @@ static int admac_probe(struct platform_device *pdev) INIT_LIST_HEAD(&adchan->issued); INIT_LIST_HEAD(&adchan->to_free); list_add_tail(&adchan->chan.device_node, &dma->channels); - tasklet_setup(&adchan->tasklet, admac_chan_tasklet); + dmaengine_init_bh(&adchan->chan, admac_chan_bh); } =20 err =3D reset_control_reset(ad->rstc); --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 7F2BC435526 for ; Mon, 10 Aug 2026 18:11:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385486; cv=none; b=oxKWxPdGjstArwN2kyNug+wk2zx6yWdwjFV2SMmo3ANIpwfV/Elyp+i5hCSQ2hYtiHHAjL/sqs9FUsbhGmfQH9cmyllqBtGyY4XR6tJCjLhhqLqVQM1yol+mtYcI0zciB+SWJYbOkNzA+2EjMWrf+tB+QABEm11taaNfZQEJT94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385486; c=relaxed/simple; bh=Z0855f1Ta+VEMIDJsjqYtSl5im3O4arPQPUi8a4259M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Byo2iynYkAfiqDhH+Y1F4S6NxKAGCLs6aBLx0S9E4MDSwmW3Gv17tU1vipl8kFjBuglY2uVkHc1p54KkQobzaxEWzr8oOgqxdemjoCLZfY/UQ2NVdueuMKoSnfLlYwJvPztgGLK5HeSAdM/NX9zX1okXTpUBDqb5h3wkphHbmUg= 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=lZ/bKql9; arc=none smtp.client-ip=209.85.216.52 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="lZ/bKql9" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-383b4a3755fso2262709a91.3 for ; Mon, 10 Aug 2026 11:11:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385483; x=1786990283; 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=z0Canle5rtkGjjXltqJt/4h8AMWrPL9Wd/WVDPCBLgc=; b=lZ/bKql9bWBDUr+qfJgnPvl/48GIicoEufrTZTn2qLoHJpXJMGSZnUo7T0QtkrquA3 ZhPO8RRpEAAYsKsEsTqB3mIO5nwwDtXjlllQr132Wvcbj2ax/pk4zwVErEBPvfoD2J1r WOXsvTgrhhaXxq7aq3w0uulubTXUIn2Tq78Jn3gpnQT0QJBEu3fDpzV5BOC/4pyXhso6 3d905T0ELs9wR1XDy1D/g9/I5kvNNbyqKHFGmnacFftaEJuXkv3BqU51DLdaFMR/l7Ft iFoW1GRjuy7s+QBiSSS3MkNkHhWkuJN1YovzqPM4CEY11fQGiKvfXXxPIkWveaxaYBdc M68w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385483; x=1786990283; 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=z0Canle5rtkGjjXltqJt/4h8AMWrPL9Wd/WVDPCBLgc=; b=mDhnUE+gv7xTQYDfDoRo+qLdvnLS3fkqMnw/DWEQ4iMJ7ruQXriuDCq24NCTD30HfN syqu71VG6eSgdWpOgLn7Q/3Xo90Pz7PLINVcemOFfsIjPw6fs9YNRDrzLNDrne9w7Ysy veXY5zn5ITmZ9ZTzXu2ia91IqNxzlESujdQY/WrUIAfXkkPx+3s5ORdv6Ew8Kutp9h+I cWAlsRLLjMf+N7sXb06KjRRm+HX9gfjw8CvS8rfHt303BhxM9MNGT9frxEU3shkY/osF xSpaxnRT5v9qoEPe7h9T6OIqq+rgKTgYcODtKu0I93XaLchlOOPkFj2wMToihJjkb+v9 aQ+Q== X-Forwarded-Encrypted: i=1; AHgh+Rpq9MkygeaKRHdXpfB210cuy6od9Ux1tSxxo307GirnQNjOxAB8v5B6FoZzMbSNcg2kjixdCmvahMk8Xpw=@vger.kernel.org X-Gm-Message-State: AOJu0YwYz487a7yto6bUrlQde386JNo4OJCkix5Nj9K40k60jzB7Fh+Y K5Dk/GPEC67U2ADc7YXl5k1oXHhiRKdXp05vL3kmMIK1wNcwjUZCrLt0 X-Gm-Gg: AR+sD12Ki0aKaUMvq7Pqdhk5qN8twytKvjBnyE2U+P9K29KECIRE+Bh5mQRxCZT0bpj uBhklvW1sOUKJItxeAWfYRlhtEzKHU40oMpIDphWt4C78jExgDp3eljRwfPtsGQ1fGlwk7IqB+5 kA74X2d0Pe0azq75Qiikx22lDZSQItVA/uUrB5awTdXI32KGvS+M3t5B+XMHK9Be3hzFjXocJLE WVGuGKQSrwNQ+y/SCELGAApBoImvtpRNQeWIi1kJA9DyoOaT8oQsl1pLgssqqrcPS8+fatsxhZo TtVD16plAcP31O+aokF4IJdkTfiO33QAi9GlKohhQu2bGeKIhYX6Xa62pvVjAjyqpiL88DT7ZsD lOV+jDsRY8lGV1Fkt5DiMsEn+jxCupvq7fBxJ+C69STgG9tP93UZp2FG13/Boq2SdfHM1ZeM/XQ IUPJcY9VdaU9mM1RAQShNjep5XRA3+PwLinH5hOf2VdihTxehSGDok9UJPY+NJ5Xs= X-Received: by 2002:a17:90b:3985:b0:38a:c3f:3b87 with SMTP id 98e67ed59e1d1-392620e6f9dmr23957113a91.12.1786385482746; Mon, 10 Aug 2026 11:11:22 -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.11.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:20 -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 , Ludovic Desroches , linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 04/34] dmaengine: at_xdmac: move irq bottom half to dmaengine BH Date: Mon, 10 Aug 2026 11:09:05 -0700 Message-ID: <452a0aad787e4d64a057f13f47302782e9b3752e.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/at_xdmac.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c index 901971e8bae6..5a970f9f3831 100644 --- a/drivers/dma/at_xdmac.c +++ b/drivers/dma/at_xdmac.c @@ -228,7 +228,6 @@ struct at_xdmac_chan { u32 save_cndc; u32 irq_status; unsigned long status; - struct tasklet_struct tasklet; struct dma_slave_config sconfig; =20 spinlock_t lock; @@ -1759,9 +1758,9 @@ static void at_xdmac_handle_error(struct at_xdmac_cha= n *atchan) /* Then continue with usual descriptor management */ } =20 -static void at_xdmac_tasklet(struct tasklet_struct *t) +static void at_xdmac_tasklet(struct dma_chan *chan) { - struct at_xdmac_chan *atchan =3D from_tasklet(atchan, t, tasklet); + struct at_xdmac_chan *atchan =3D to_at_xdmac_chan(chan); struct at_xdmac *atxdmac =3D to_at_xdmac(atchan->chan.device); struct at_xdmac_desc *desc; struct dma_async_tx_descriptor *txd; @@ -1865,7 +1864,7 @@ static irqreturn_t at_xdmac_interrupt(int irq, void *= dev_id) if (atchan->irq_status & (AT_XDMAC_CIS_RBEIS | AT_XDMAC_CIS_WBEIS)) at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask); =20 - tasklet_schedule(&atchan->tasklet); + dmaengine_schedule_bh(&atchan->chan); ret =3D IRQ_HANDLED; } =20 @@ -2317,7 +2316,7 @@ static int at_xdmac_probe(struct platform_device *pde= v) return PTR_ERR(atxdmac->clk); } =20 - /* Do not use dev res to prevent races with tasklet */ + /* Do not use devm resources to prevent races with the BH worker */ ret =3D request_irq(atxdmac->irq, at_xdmac_interrupt, 0, "at_xdmac", atxd= mac); if (ret) { dev_err(&pdev->dev, "can't request irq\n"); @@ -2397,7 +2396,7 @@ static int at_xdmac_probe(struct platform_device *pde= v) spin_lock_init(&atchan->lock); INIT_LIST_HEAD(&atchan->xfers_list); INIT_LIST_HEAD(&atchan->free_descs_list); - tasklet_setup(&atchan->tasklet, at_xdmac_tasklet); + dmaengine_init_bh(&atchan->chan, at_xdmac_tasklet); =20 /* Clear pending interrupts. */ while (at_xdmac_chan_read(atchan, AT_XDMAC_CIS)) @@ -2458,7 +2457,7 @@ static void at_xdmac_remove(struct platform_device *p= dev) for (i =3D 0; i < atxdmac->dma.chancnt; i++) { struct at_xdmac_chan *atchan =3D &atxdmac->chan[i]; =20 - tasklet_kill(&atchan->tasklet); + dmaengine_kill_bh(&atchan->chan); at_xdmac_free_chan_resources(&atchan->chan); } } --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 983CF35F60F for ; Mon, 10 Aug 2026 18:11:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385487; cv=none; b=ZxZ/nNPDvXCijEyvw9DK6S1dtmk0nmsK4R+LtJDcDA1qAr4m8e/LLdBnaNRsWBkZCr2xM+5OX6lv5JsLDsB8u8sbk75tTsEoLiAoEe7+fVFmCUPD8eVZBmjF95/cuIt8k5OsV8CeCM9ftqqjBwwHjmnuUGang0+DDi5KOs/i/Qo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385487; c=relaxed/simple; bh=g3kQp8gGQiIXrYX4sT5ueXQYYRV5nEUtIvP3IlYpajE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sIQisGrizq15BNGmFEG5Kaz5lAKRthFAYPq3lxqYi/q28GeYDoDq+IgD0okO07w4YQP/v2k70uFtCjWQfPL0C9ThnF/LVB277uZTzaWBBlZNQt263/rC0I8KHLcP81gzlaXaL4LdCwonB9ow21wVSSRhJgfmqiaO2ywtScEqL78= 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=TMrFm5ig; arc=none smtp.client-ip=209.85.214.181 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="TMrFm5ig" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2cc7e86e7aeso24638185ad.2 for ; Mon, 10 Aug 2026 11:11:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385486; x=1786990286; 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=L4Ymzks64fAO1V7KVTcq+phPVKZh8xNyMzo6gAaHxVg=; b=TMrFm5igAxgUXEyF3crAOJUjARaz4bTWF6sME7E4M5QIWqIgcm+rGYzC1m09vFTDEI dS/k5LlMQ1SoNUneKEN09KjHFMUjBieXy/2OrmhdGVC2R+05kvpEzrLYY8WHcjnOyXV2 EjAgWOB4w8rrvV3tqBXcKUH9KErHX2YLID7y2/WQkMlAP5L30exXvMDvZLF8+k8oudZT IkVr6DiO/YcD2mC4USrEKkCcKsJTDkvTQIuEJUccDICb/Iz3PVvkcwN+s9K2xL/8hEyV xzOWJ+g5bNMNlxKPh35FnVDRwP6fP5URAI8bcu5NENSNL7DzMIBYY1tDY8NDi92BvI8b Prhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385486; x=1786990286; 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=L4Ymzks64fAO1V7KVTcq+phPVKZh8xNyMzo6gAaHxVg=; b=MXiT9igMf2b/k1PD6TvxR1buGdLw1ii3M2wIKjsVDO/0uDJN3p1f5xXvvOBUy3rz7D bewveO37IxKWgKV6VFpdZ/TI1BFcWdrdTHFIyhoaYHOfZ+itNPY5eYESb31vVSGTtdCM Z4ppyOOMsNtsMrQC116QMENs+PVNIiEJK+RJRqEhh+SjLYYUNQ/7yzAxvyNTEG05FeX8 HGqHwjzDPoarkFC6eQDsE7bYFJrQpOwr5Mng8F4k8927NEmr9lv1zbHmLART7hugXNf+ SR+RHbb+esog3PoRKitL1GF/4fCftt6pbJa9dGdi6gEtWDph9GjpBvgWu4iEYONSGdb3 dgmQ== X-Forwarded-Encrypted: i=1; AHgh+Rotss0V5vTFG35I/dj4eq2FKXrVechZtl5AdwWT6tv86dftdO3bBDTY6aZZz8XhXkwtrCFA/zN75aY75SA=@vger.kernel.org X-Gm-Message-State: AOJu0YzpNs+q4vINwwhq5QDXNMxFRg1WROW35OXCx80sV1v47jXznMBl BdSPtPUrbCUiOiQV/5Mq39FkkYWjWuQu8X1bQn66sJ8vvwlVUxTVtr0Y X-Gm-Gg: AR+sD123zKZUF3MphWf0opBKgYb+7Mraw9gt+S37v3TKLjoY927vTeuVdvdbfhWx6Iv zNz+A6nqcZlGH/mtyA5/rMIM0ePt6u7UTMdyyEyKwuTzFhmFWjL0GjpcC7sWr5CysCc2z2Vv9uh SHptQSAhLO6rqm/NJTo22enYSGr+Qy1n+XTlg8051RPZy3/leh5gC9WUim4NBa5/FhMlrC7mFy7 6P/eUgoNsbrlbGmpK7KftC2tzJyhab6vaxxzB2/N0AU+Vyu/x6ergbhQQA/UI3y8kbMhL0kGG7G e3rUGAf5aYICUyS+CFkle7y1UYu0G1to4PSfWPzi5xF5r1wMvCP7vaIwEPtZ/kR64fYFhqA3PO6 d4qmhOSxC+xCWQB/rpslkE1O5Mqk0O4lpjZBHbmAzL4DLW62mIbKrbEZ1IG50xUm3axktxktRr5 3CKBHKC6BcZR0bZqoK3XidfrHXXNTGYTz35QReSEQ0g17HX0//hIVAxLSk6FW9Hwk= X-Received: by 2002:a17:90b:2b8e:b0:38e:2e86:ed02 with SMTP id 98e67ed59e1d1-3909d8c5a4emr31571301a91.14.1786385485962; Mon, 10 Aug 2026 11:11:25 -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.11.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:24 -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 Subject: [PATCH v3 05/34] dmaengine: ep93xx: hook callbacks via dmaengine BH Date: Mon, 10 Aug 2026 11:09:06 -0700 Message-ID: <69b17379bf3c78b6af96dbe3b76940520d491417.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/ep93xx_dma.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c index 311e55a97ba9..d79e278fb7ba 100644 --- a/drivers/dma/ep93xx_dma.c +++ b/drivers/dma/ep93xx_dma.c @@ -167,7 +167,6 @@ struct ep93xx_dma_chan_cfg { * @dma_cfg: channel number, direction * @irq: interrupt number of the channel * @clk: clock used by this channel - * @tasklet: channel specific tasklet used for callbacks * @lock: lock protecting the fields following * @flags: flags for the channel * @buffer: which buffer to use next (0/1) @@ -196,7 +195,6 @@ struct ep93xx_dma_chan { struct ep93xx_dma_chan_cfg dma_cfg; int irq; struct clk *clk; - struct tasklet_struct tasklet; /* protects the fields following */ spinlock_t lock; unsigned long flags; @@ -801,9 +799,9 @@ static void ep93xx_dma_advance_work(struct ep93xx_dma_c= han *edmac) spin_unlock_irqrestore(&edmac->lock, flags); } =20 -static void ep93xx_dma_tasklet(struct tasklet_struct *t) +static void ep93xx_dma_tasklet(struct dma_chan *chan) { - struct ep93xx_dma_chan *edmac =3D from_tasklet(edmac, t, tasklet); + struct ep93xx_dma_chan *edmac =3D to_ep93xx_dma_chan(chan); struct ep93xx_dma_desc *desc, *d; struct dmaengine_desc_callback cb; LIST_HEAD(list); @@ -858,12 +856,12 @@ static irqreturn_t ep93xx_dma_interrupt(int irq, void= *dev_id) switch (edmac->edma->hw_interrupt(edmac)) { case INTERRUPT_DONE: desc->complete =3D true; - tasklet_schedule(&edmac->tasklet); + dmaengine_schedule_bh(&edmac->chan); break; =20 case INTERRUPT_NEXT_BUFFER: if (test_bit(EP93XX_DMA_IS_CYCLIC, &edmac->flags)) - tasklet_schedule(&edmac->tasklet); + dmaengine_schedule_bh(&edmac->chan); break; =20 default: @@ -1420,7 +1418,7 @@ static struct ep93xx_dma_engine *ep93xx_dma_of_probe(= struct platform_device *pde INIT_LIST_HEAD(&edmac->active); INIT_LIST_HEAD(&edmac->queue); INIT_LIST_HEAD(&edmac->free_list); - tasklet_setup(&edmac->tasklet, ep93xx_dma_tasklet); + dmaengine_init_bh(&edmac->chan, ep93xx_dma_tasklet); =20 list_add_tail(&edmac->chan.device_node, &dma_dev->channels); --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 1AB24435A8F for ; Mon, 10 Aug 2026 18:11:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385491; cv=none; b=pmUB0JXseiaMnS2KCFXrSr1yir45i0ZKUdobT2AVhvrwH0xTMSV+YuCRnDcdJaAFcvyFEbjaZ+Q3BYQBDxKxwcKG3AD+B31nRp6xRg6NpZbhf2lBr0O5PmG56FjZqk5GZvnDieu/vg7yhPhIXUgrGhSUHl6eanDWQTwVXHRftVs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385491; c=relaxed/simple; bh=4tYVT9QqLmwTQUUuN/J5bGbv/2gfEO0sUizgH+taHNo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PvlKxXi9e0iJ03AQcaUMiQA4lkpeDd6fdpKym3F3C0Rmnp+RrQlkfFj9Iw5zx4FdnAGoBzsF9bCgDCKoa0ZOAGkHymDYv0nzY7fHSg9eU6AQIglfA03MWi6kjrqS1CttXIH4c4GMIwA55vKx1j9piCqaP+t8+rWxVN69ULI196k= 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=YA4wzzM+; arc=none smtp.client-ip=209.85.216.46 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="YA4wzzM+" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-3810c5d691bso1890830a91.1 for ; Mon, 10 Aug 2026 11:11:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385489; x=1786990289; 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=xHByj7whypjAGcgXNhTkpT6ldplRWJVWN4PSrjNWnv0=; b=YA4wzzM+vQu+qmHPKraQ34aYBVJZ8PoUv7ht6vjvVrCk8UFZTADDkwykpi5Xcv67pg 0AXcH+gWmaQU2+5zQILPKoodkaoGwpQzAMJU+NgygYkSekebXHqhiULD8CHbhNdLslAf NKU7kGLWTmtTB03bYHy48uRRlcOgjSW7yc3+ZjQwrFiwEwMBJ42gpHK/6aPMBsfveTfw P8HA+EpAT1TR4w9+auNGJe6KCf0GZWe4Sah10sb+ZNpmZYmmgtlzZhXe+zXSJgVpe/WN WOV0DEGJY0VymIH8taJyMNhjtr4RY5prT8NbXpqoMLTM0qor+luJS5bTWyl/g6OPjOFP CROA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385489; x=1786990289; 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=xHByj7whypjAGcgXNhTkpT6ldplRWJVWN4PSrjNWnv0=; b=IYyZF78C1RQDtzBAWe8ify0zt7kKqasLZF/Aeh3bDDrtlyAOnL+h/BWhjHHUj+H6Bj RzY//+mBMUkDDWxDQG0gFsbnwIS+Q+gQdX91K+wgeCnartVyRuZOr8zaIN8WjBbvR4+s 3MVDUoom5KBvsmGRzJoKL68HWzZQYJiiJXCgvcndP3yFd/66VAiOL7cuBj5zWFdrj2Mi 1fhZmHd+pOFO5ci2yr0Z/mbf0EnUGH2ln5STRyf+iozW4Cga/IcMTBlNBGAFGZAlRGA3 jfFGfMLZEObvI89bNX/j/MK9jweYJz1V8V2uWXngBFfuL2OOYES4uMIEee351ywe9wga Rmog== X-Forwarded-Encrypted: i=1; AHgh+Rq1JsnckBKhULL00FvYs71Qvvg+Wus0SubTcwaT9a3c0BTLujHhTawllEObI13Zlrg82ZDzZbbb3XgZFZ0=@vger.kernel.org X-Gm-Message-State: AOJu0YzLPTHHYX1YrNy6rrF1pYnRhrl5HFFtL2hDv9dRyCa20RzI20ZC SNcTvNGnAP7jedYMQnENTdSVGXoYzle6/KhjeyAUvtDSTWOzVr4johnf X-Gm-Gg: AR+sD13g267JekEqoShg/SS99fz89KvAMQV/kT0rqC/uRI5UsGCiuoYsD2hWUDIFIee 28unuvTHoTJbk7RJ7sHUb9bFQn244yNbm7aAOTo+36lt1oAg4vQa3Z8kHMxjJjo9tq9x4bhAgkm 6p3nutljy9oMeGv8Nq1l/fEl0xC3u+1N1mocuRtIh+e5HqWPGvaiIqVBwhDe6+rrnusAEuVbnz+ mQmu35vbfZWQTZ87hbr+N/aR2yGi9M+6somVu7/0/5hMObklE1qAGBkqBNnkIEswXkSyHdfGgiG UmNpRAheJc113HjIFjmB17k6q9s/xakmZ3bYT+/IUAD6GrVL+UvvHUrBzpZGOsH1Rzkh8/W6a7E pZajWO/FaFGsa8sg/dOoDEQWoY4FYESREeyB2f8tT7bGxBEyeLnIjWfUq0BezFXyLEdKNWFRAt8 cpFn4FCfP1BL0hgJZjmX39B7QeVBIKSYlRIC3OX+EZBBc4NBRY3IZ0WDLGLfwq4iVT3DxFeA0bj A== X-Received: by 2002:a17:90b:2785:b0:38e:bbf1:de3f with SMTP id 98e67ed59e1d1-3903c5d2f29mr48635260a91.12.1786385489431; Mon, 10 Aug 2026 11:11:29 -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.11.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:28 -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 , Zhang Wei , linuxppc-dev@lists.ozlabs.org Subject: [PATCH v3 06/34] dmaengine: fsldma: migrate tasklet to dmaengine BH Date: Mon, 10 Aug 2026 11:09:07 -0700 Message-ID: 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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/fsldma.c | 10 +++++----- drivers/dma/fsldma.h | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c index 22d62d958abd..f52547611db9 100644 --- a/drivers/dma/fsldma.c +++ b/drivers/dma/fsldma.c @@ -968,18 +968,18 @@ static irqreturn_t fsldma_chan_irq(int irq, void *dat= a) chan_err(chan, "irq: unhandled sr 0x%08x\n", stat); =20 /* - * Schedule the tasklet to handle all cleanup of the current + * Queue the BH worker to handle all cleanup of the current * transaction. It will start a new transaction if there is * one pending. */ - tasklet_schedule(&chan->tasklet); + dmaengine_schedule_bh(&chan->common); chan_dbg(chan, "irq: Exit\n"); return IRQ_HANDLED; } =20 -static void dma_do_tasklet(struct tasklet_struct *t) +static void dma_do_tasklet(struct dma_chan *c) { - struct fsldma_chan *chan =3D from_tasklet(chan, t, tasklet); + struct fsldma_chan *chan =3D to_fsl_chan(c); =20 chan_dbg(chan, "tasklet entry\n"); =20 @@ -1152,7 +1152,7 @@ static int fsl_dma_chan_probe(struct fsldma_device *f= dev, } =20 fdev->chan[chan->id] =3D chan; - tasklet_setup(&chan->tasklet, dma_do_tasklet); + dmaengine_init_bh(&chan->common, dma_do_tasklet); snprintf(chan->name, sizeof(chan->name), "chan%d", chan->id); =20 /* Initialize the channel */ diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h index d7b7a3138b85..cab33d010d51 100644 --- a/drivers/dma/fsldma.h +++ b/drivers/dma/fsldma.h @@ -173,7 +173,6 @@ struct fsldma_chan { struct device *dev; /* Channel device */ int irq; /* Channel IRQ */ int id; /* Raw id of this channel */ - struct tasklet_struct tasklet; u32 feature; bool idle; /* DMA controller is idle */ #ifdef CONFIG_PM --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 14D8E43550C for ; Mon, 10 Aug 2026 18:11:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385494; cv=none; b=s0Cs+I2i2lvGlHeKact16aGcCGw+ezxN8hHL9MN6XcrRZHWrta91uyiCP9GtcWYtL55e50F5EXzdg/63qNr2mAzOzaY+xkPwMWlfUt3BZvl2cwO751AXbCztCwitB6xI/TAmG4Pg+g4TCCYSDjeX00cjj3qWgmVrANAaQmQRrRs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385494; c=relaxed/simple; bh=LBzB92irw5KAqCLccNraecQzjq1lzupy3Iz7fMnTUNo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZOtGpr3hnntAWv3runC3o3hX3a4eIYvw77tGObNBNzDXmqc7Wu1y4qFNFmO7YuYFkO16YJtvU2KpG3G74N5kXPjUBZcFtzamFZePE9Y5l1LXz0nAvlUnPZbp5agKxbhrudknPGLAibFxjbg3rQtxO563vFVb4On8CNIbeBo9WPA= 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=lHWqptK0; arc=none smtp.client-ip=209.85.216.50 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="lHWqptK0" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-38759bcd877so2460245a91.2 for ; Mon, 10 Aug 2026 11:11:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385492; x=1786990292; 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=4yXuD2jr+8+yiFdSw8m0g6Y3dHN/pV7/GzguiUuuNTA=; b=lHWqptK0exBrJ25QbUPaRgP3cA/+y+a4XP5mPGups4nUFP+NRdxN9rvy+pVSlu3ux0 DLZIZ+hCHZOQ054VxgypBhy7DZz4Ra8p7W6/Yn3Z9Zyubb9UhxuprEkPG/i7yazFLzKa Q+jM74QbPSzlYy+e4TVq5dgUDfBnpGQSPMxVgmVzOvtq6hWVbUlsj2XqvV5v/iZMxN4E kGSXi+CGwwilsY+IlWzfyL2iIz7CiIZAq2ZSPRB9bPSIFyWMIArz5lIB1nAHlyMCUZgj oBhetjb+Mgp8DfgFtb1dH3XCVzgjzpaTdJq7eVB6J4n717fiyOMKY63lwTclGx3UmHsA S9wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385492; x=1786990292; 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=4yXuD2jr+8+yiFdSw8m0g6Y3dHN/pV7/GzguiUuuNTA=; b=MhRUw1TZbhZMg3nQdhcKdke9H4gAQJQEewlStgjkY2tnq3Y/Bt6khcdvEELN9jG4ge E6JjGXLaw5yvt46SHLHRXGHgtSKFpaTPYIxnSznO72WA/xlsSLhFq2gIa4rxtYQyYdz1 WX7DknC+dbKv1UKe0jqabp9hen5n1vhikCJ3RiMMzdOBjxD+FGAcUgHHld7UyWxIiZi3 jtSwX3AKZ4LPs9z7JFEp8BmC4oQP9VNNBXwcq1/UiOOZxznxNJtSXY+HlmadB73cxOnl k7eXZs1iL0eGVyPPH6tiYUc23mBzIyQYCJblCi6aWV2gaD/ktcZek+PLXCq0IlAqk4zK So3g== X-Forwarded-Encrypted: i=1; AHgh+Rqd5LA2Zemd7ecvMsSlTeEPdkn6Y30USEE3st9r98xoG2ZBcsrTLtBFvqwypq5v54zLL8xk4YutNwatYq0=@vger.kernel.org X-Gm-Message-State: AOJu0YzUxWpKq7gxDrbTP7/v9bNJcZRgSo3T+flxnAo5ScECd0eo2P+V NJrPy284so4ZYfK9xhVorAgPS/GJLUmZPQ8R95Dxt2ykXLpqe4mRbWIW X-Gm-Gg: AR+sD12EhLS4WkJFHe7oXrU/HnTVBiyadnsxKIjQh4ZldlNWKsw5K2x5Kug8gn2i9RY x2jtYyVVHejPL5LIqeRG9nvUWpXLLcScAYIIAPrtdlR5r4CLPAcxFj6ZL0A8pc8HGzxJBexbPx0 aCrmvhFTlFQWqhGRoUnSyLJU6P7jZ7VMtlXc9KEUuxylOpnTlj3GunZjSZTBmlQ3CkrG4OKbXO1 6U9GZmNmQarKx7tJlbHFWN7lTWvU8/BV+HSPUKTL8D8k5xOy4OTbMnDWp9Eam6ePl2zHjF5SwpU 7H9xmQ4K2eBFBBO89IVNH798SEQ76/ckjQ4j9ueuLWciD42ta6HmGpk8jJz4bJQktoTtmhSqrP1 n1/yVSIxMx7PL7fqUegSUP0BR8codq+5BSsNsxyx15qd26GhzRvn1cRaoeG3sfBKpqmpbeV6rd4 9ZZxcNOIC0+iENE6vzK17s+DtX98L7AgPF3l1J6ypFCRgiy7z67vEuMPb2FPoKWzU= X-Received: by 2002:a17:90b:510c:b0:380:540:d499 with SMTP id 98e67ed59e1d1-392cc936992mr3651691a91.6.1786385492418; Mon, 10 Aug 2026 11:11:32 -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.11.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:31 -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 Subject: [PATCH v3 07/34] dmaengine: fsl_raid: run completions via dmaengine BH Date: Mon, 10 Aug 2026 11:09:08 -0700 Message-ID: <5619f788f9ce69629aaa113d882ad3ec91dfd0be.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais --- drivers/dma/fsl_raid.c | 11 ++++++----- drivers/dma/fsl_raid.h | 1 - 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/dma/fsl_raid.c b/drivers/dma/fsl_raid.c index 99945845d8b5..0d0403945d91 100644 --- a/drivers/dma/fsl_raid.c +++ b/drivers/dma/fsl_raid.c @@ -155,9 +155,10 @@ static void fsl_re_cleanup_descs(struct fsl_re_chan *r= e_chan) fsl_re_issue_pending(&re_chan->chan); } =20 -static void fsl_re_dequeue(struct tasklet_struct *t) +static void fsl_re_dequeue(struct dma_chan *chan) { - struct fsl_re_chan *re_chan =3D from_tasklet(re_chan, t, irqtask); + struct fsl_re_chan *re_chan =3D container_of(chan, struct fsl_re_chan, + chan); struct fsl_re_desc *desc, *_desc; struct fsl_re_hw_desc *hwdesc; unsigned long flags; @@ -224,7 +225,7 @@ static irqreturn_t fsl_re_isr(int irq, void *data) /* Clear interrupt */ out_be32(&re_chan->jrregs->jr_interrupt_status, FSL_RE_CLR_INTR); =20 - tasklet_schedule(&re_chan->irqtask); + dmaengine_schedule_bh(&re_chan->chan); =20 return IRQ_HANDLED; } @@ -670,7 +671,7 @@ static int fsl_re_chan_probe(struct platform_device *of= dev, snprintf(chan->name, sizeof(chan->name), "re_jr%02d", q); =20 chandev =3D &chan_ofdev->dev; - tasklet_setup(&chan->irqtask, fsl_re_dequeue); + dmaengine_init_bh(&chan->chan, fsl_re_dequeue); =20 ret =3D request_irq(chan->irq, fsl_re_isr, 0, chan->name, chandev); if (ret) { @@ -846,7 +847,7 @@ static int fsl_re_probe(struct platform_device *ofdev) =20 static void fsl_re_remove_chan(struct fsl_re_chan *chan) { - tasklet_kill(&chan->irqtask); + dmaengine_kill_bh(&chan->chan); =20 dma_pool_free(chan->re_dev->hw_desc_pool, chan->inb_ring_virt_addr, chan->inb_phys_addr); diff --git a/drivers/dma/fsl_raid.h b/drivers/dma/fsl_raid.h index 69d743c04973..a40001a4db58 100644 --- a/drivers/dma/fsl_raid.h +++ b/drivers/dma/fsl_raid.h @@ -275,7 +275,6 @@ struct fsl_re_chan { struct dma_chan chan; struct fsl_re_chan_cfg *jrregs; int irq; - struct tasklet_struct irqtask; u32 alloc_count; =20 /* hw descriptor ring for inbound queue*/ --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 363A7435A9C for ; Mon, 10 Aug 2026 18:11:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385497; cv=none; b=OWKzAXmE99lj1sOSssr5kbRcUoLrNQmQjmjSw5cO+c3BqmiMDTUs0SXmc0rPbbDS18LJE8WaOV7bfLVIbZoNSPGpj2c9v+KlIYgUuj1Zv2LXygYoCTig5Merh0bzkEMC3fK3Zi+U6F9bltstroXzxR13JPYQqzD6UVSmTgj+L9g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385497; c=relaxed/simple; bh=yNW/T5FeMOjAddNqHQhDND7Stuqs/EAs9+VIYXSqtKY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gLEl4D8jiRFQ5ThMsTF2/eZQ3mXqs42eWl7GOP8GT4NNqQ0mMsaIJxLOuMg90C0jcTa9nqtC/Rfz3ipPb8dQ8zhenRy+PXhhH9keRLoLLO2a2k+POOt/1Q8Il2qLoLg2p9QumOb21MI5j75CdcRVFwsCEq0Zu8sZ1f8mHIeygmU= 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=ZecYkWU1; arc=none smtp.client-ip=209.85.216.50 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="ZecYkWU1" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-38dcbade417so9859a91.1 for ; Mon, 10 Aug 2026 11:11:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385496; x=1786990296; 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=ZhvQ0nLd8X2lUGK/yPjcMAYgujrbK07Er9DeXa2ehmE=; b=ZecYkWU1MxBukIQvCzrv7c+Fc442qKLxNtVvVNzflJVzMj+8Lh+YGRcu/aTk7FjxJK JynUCTiqDscc6Nf+GfyTcg1jYAhpDHVy/duYp67gQOMvqNoTJlmdFZGdzU6lf+3nzPFS m9wQlAQVZdrTV7oUVaFbjt6j1w2cH7R/sc022TVXDPDXeKO6nTz51ntWLpqunR60vlXA lw0DaKmvwdyRmz0xu1Ivzu+Ge7rVc9wkCbQM889CPrdPkJJ4kEW0Vlly74uwP6HhwbBQ VD3LNPKIQMtBbqDcDf2iuAJYP8LwgLNEd91LKbXeD9yhtZqX4Y2CUT6INl2sRKdXPEs1 QgFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385496; x=1786990296; 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=ZhvQ0nLd8X2lUGK/yPjcMAYgujrbK07Er9DeXa2ehmE=; b=LUtpvY1XRgBwkIJqJBVjJSWH6za4aa5CcY5hfIWxezplOinQJMbYvlJgnv5Vet0Afg UTxnvLOcXguygvbDCoIBhqStAIKtKD8RQ9YbDr32IqMGRjGXYg3rk06Ty2yZAr/482Jc yFJytXmUSStdNohP4qI9W26+xVrRvAnAXjcPCWP/6cGhxbtAXSIm4yuJiohtmmj+sGbl k2kvU9XsjONoKyCRhCNIqWF1hIYX+BxFHOvQ1dkhbNr66RM1K37Q79+Jrp4zSARXR8wS wG78D4RP9wayTnqKpnfZwJ3fqQAgpv3EQM7oNtrteQCnLXz3qJX6ec2gv0wD268KQvLo 9JAg== X-Forwarded-Encrypted: i=1; AHgh+RqC9liO9oAuBcBc7Br+f4p0xTyjf7ZJXY6Wnq/V5O7BrorZpe/FQJGfr9tTnWVNMkyvHx32v6ZyLDznXQc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy706vyoz3zMi+TuWoJ/IECFERhIPUud5cCUMMXkWj10HSWLwOc U7L3D9AHXJr/mRoeIJiZNw18UR4gGHJylbCC6Y/ug4LLx1/5gwgHGvHS X-Gm-Gg: AR+sD12vmpvCqST4XuR7VvwoC6+w5enTayj3DGMtQvjxxzsLq18nmcHEuAS4cR7VBg0 pxvfK8nyaQFUmOSx5VvEKM77x8jabKuwHkyo7N88yBiwbwQk9Iq5bU9tE/zSEeKyC6Otl4QRhvf GTX1rDun9iSRlnRn532n+RmxvxenrIetTc0s/2MsTioZ6iS3dbXxGOyYULiRn6NG6FakUUZSgWX tUPR4pmWmiqBRXu4C9goWh2QbI71ItzyMcCwRlSJgZbsOm1890BTvnW30Q+p6fwREXfz+dNXDRJ pMqjnKCFG+p7a9lODj9nC4mLDauNPe5kJFsjh9eOAznrgD6/X2F7vq3B5kmZ3+s0BaFNaP9TvxK 1zg111LOwNCjkn+dEFoKGS7kBIjarT31fHBSF2t9AgNVfGq0GVhRBVmcSc/T0iRdWV8e0wdPv+9 INFNZ2D7zlBvMQxBsfsInG4WmZwTUzWElIRDwYhbem9sl3vjXNmtKIKMO3QqFU3s/gtu8Vv40Ar w== X-Received: by 2002:a17:90b:1811:b0:38e:c7b0:84ad with SMTP id 98e67ed59e1d1-3903bb0ab77mr40673994a91.0.1786385495692; Mon, 10 Aug 2026 11:11:35 -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.11.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:35 -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 , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 08/34] dmaengine: imx-dma: flip per-chan tasklet to dmaengine BH Date: Mon, 10 Aug 2026 11:09:09 -0700 Message-ID: <787938bdaef4c3530b4bf0296386a33928b877f0.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/imx-dma.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c index 81c6276436f8..308fe407fe16 100644 --- a/drivers/dma/imx-dma.c +++ b/drivers/dma/imx-dma.c @@ -145,7 +145,6 @@ struct imxdma_channel { struct imxdma_engine *imxdma; unsigned int channel; =20 - struct tasklet_struct dma_tasklet; struct list_head ld_free; struct list_head ld_queue; struct list_head ld_active; @@ -344,8 +343,8 @@ static void imxdma_watchdog(struct timer_list *t) =20 imx_dmav1_writel(imxdma, 0, DMA_CCR(channel)); =20 - /* Tasklet watchdog error handler */ - tasklet_schedule(&imxdmac->dma_tasklet); + /* BH watchdog error handler */ + dmaengine_schedule_bh(&imxdmac->chan); dev_dbg(imxdma->dev, "channel %d: watchdog timeout!\n", imxdmac->channel); } @@ -390,8 +389,8 @@ static irqreturn_t imxdma_err_handler(int irq, void *de= v_id) imx_dmav1_writel(imxdma, 1 << i, DMA_DBOSR); errcode |=3D IMX_DMA_ERR_BUFFER; } - /* Tasklet error handler */ - tasklet_schedule(&imxdma->channel[i].dma_tasklet); + /* BH error handler */ + dmaengine_schedule_bh(&imxdma->channel[i].chan); =20 dev_warn(imxdma->dev, "DMA timeout on channel %d -%s%s%s%s\n", i, @@ -448,8 +447,8 @@ static void dma_irq_handle_channel(struct imxdma_channe= l *imxdmac) imx_dmav1_writel(imxdma, tmp, DMA_CCR(chno)); =20 if (imxdma_chan_is_doing_cyclic(imxdmac)) - /* Tasklet progression */ - tasklet_schedule(&imxdmac->dma_tasklet); + /* BH progression */ + dmaengine_schedule_bh(&imxdmac->chan); =20 return; } @@ -462,8 +461,8 @@ static void dma_irq_handle_channel(struct imxdma_channe= l *imxdmac) =20 out: imx_dmav1_writel(imxdma, 0, DMA_CCR(chno)); - /* Tasklet irq */ - tasklet_schedule(&imxdmac->dma_tasklet); + /* Schedule the IRQ BH */ + dmaengine_schedule_bh(&imxdmac->chan); } =20 static irqreturn_t dma_irq_handler(int irq, void *dev_id) @@ -592,9 +591,10 @@ static int imxdma_xfer_desc(struct imxdma_desc *d) return 0; } =20 -static void imxdma_tasklet(struct tasklet_struct *t) +static void imxdma_tasklet(struct dma_chan *chan) { - struct imxdma_channel *imxdmac =3D from_tasklet(imxdmac, t, dma_tasklet); + struct imxdma_channel *imxdmac =3D container_of(chan, struct imxdma_chann= el, + chan); struct imxdma_engine *imxdma =3D imxdmac->imxdma; struct imxdma_desc *desc, *next_desc; unsigned long flags; @@ -1142,7 +1142,7 @@ static int __init imxdma_probe(struct platform_device= *pdev) INIT_LIST_HEAD(&imxdmac->ld_free); INIT_LIST_HEAD(&imxdmac->ld_active); =20 - tasklet_setup(&imxdmac->dma_tasklet, imxdma_tasklet); + dmaengine_init_bh(&imxdmac->chan, imxdma_tasklet); imxdmac->chan.device =3D &imxdma->dma_device; dma_cookie_init(&imxdmac->chan); imxdmac->channel =3D i; @@ -1211,7 +1211,7 @@ static void imxdma_free_irq(struct platform_device *p= dev, struct imxdma_engine * if (!is_imx1_dma(imxdma)) disable_irq(imxdmac->irq); =20 - tasklet_kill(&imxdmac->dma_tasklet); + dmaengine_kill_bh(&imxdmac->chan); } } =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 DA99E41168B for ; Mon, 10 Aug 2026 18:11:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385512; cv=none; b=l32ETtA2KyN0yF+YPaXtnAdi311+hVwBD6V89FSAfIhbAd7HTtAhtx8y534rAhzbpYIl26G1YyjZTFEzcfFxbWtDD1TwUEKOaPYP/BszmxRb/hfd65ymVt2pTtbSRjegZ9W1464/3PHU2z3lk8JLdJ8uD9hcMh4X/KlK/cLU7yU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385512; c=relaxed/simple; bh=Aqbd7GzBuzE8rI9O2NgJ3ZT7ebKglGTUt9a1gqEF4hM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tsR0dOIxoD78ZHPlCQUDHygW8ZNoTyA5XBPW60m0JFBMbEHWs/9lKkYV5DRJ2GVxYxCBsUYOhzYhhJAxJFUBk/YOSmLG2Mvj0JCkSca8m2HPYETKoOElR1rOREwd0vPgqGzfYGFhheESmBilmzukbZInkOmnsBuTyD4chcO6GMU= 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=WUcYvuaY; arc=none smtp.client-ip=209.85.216.48 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="WUcYvuaY" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-38de840f2f0so1559424a91.0 for ; Mon, 10 Aug 2026 11:11:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385510; x=1786990310; 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=uvni5rvIbNookZfZcgjA1SBuMYV8QNEvigVrBM/wZOg=; b=WUcYvuaYcvWfZ9AheS4omq7+Zivvo+2G+ApDGybFhD36iVvVlXY9rtVOqVHUmVXd0a Y4NkVf04GjfBWm/pr5t+kHk0CWe8HqNJJ8DcseU2Az0KVgQwi7lbDk7jD+C1nCpEnY7h Ac23k5r7f3CimFtm2AkQj820Izj3YJDFipsnBiz4qNfL/WsPm+l/aaoAQjBDXjIQhj8b P1fTEvSRiHMVs4EwVLxqgUkHdx4Jj3Pl20/N5i0oolGIhALFB2K77OhFFEWuBG4NWfmh FczKJbv1BZPgd9dRv+bDXTYYS+zGmvElsDtfU0M8Me/GStqT1Bplm9+TlPXV9yIGJ07S IuDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385510; x=1786990310; 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=uvni5rvIbNookZfZcgjA1SBuMYV8QNEvigVrBM/wZOg=; b=X/s9d1da7TCm57KYsVn4uEEy0oR0BCvTnR9P9bO3ZdDnyO0h+bajcIPdRHh8j8T0FL gWHUIXUQk4BJNhZ0fb8QPUhdIfM5ysdbO9SN0JBvknbPdjU6yH/QWZP336l6dJQklje2 uqTtCvKHo0IfY3K1W5uJdg57vlzpw9h8hvpbtQ4CwcTy47vUs4AWAhbPsyLUinrJbTEb wa6wwmzkU3V2HAsHJLeCerOPbIW0o3iCe7nYJr0xTeXRuwgbD2mhy/WStwcN3y3GUphT 8Eu6e8wRNBtpjvJa93O7B7MZjBHI1/czFbhEDmNgZ+jl/3VYCAWKCttEfOx76OT+NIDt wQzg== X-Forwarded-Encrypted: i=1; AHgh+RouHIzKLiCuj8z6a1sWqZkh9/ETulCIeLolZFid5VtLP+WVzdfG7HcCdKicLnBx999krjaOQ/OremmbgFQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yx39frJ0BUa34SQilSjMAVoTk7W6QlWw+PjYSlGP6zpFRKKgLQj KfOvrpN7igkrWYMwpfYqppZA+Cys7uxqhlYyrpQ8lbGiTScbr23c4JdU X-Gm-Gg: AR+sD13DOH5NakdH975BGMPz2eJE4pDVSFkGhgYULg0TuHNMSyOBrI6LsaLg1DoPMTb Fbv5fOIiZ03wFkKk5C+CSsHxMQxe/TNNSW2D9Y/MKAKULv4hQaiKhhF66p5xtEuNJzsSkY2tOqt JPEniSbL9BtM4/SsLeZUToeL5p+hUWH1NbJBOxm4PqsNCcZcBgoTh3VzRI6boOOCTFewEzyxq66 yKeGs8N/6sZM1HKideoTvyxTyOgcNLo9IidGLxkne+34RFEv/zbmr9VjdDyOLFFAAlEycpcqSJw pLYET13Zynvdi5aI8Mz0fg4oIYmx5SNHSMBQ4R/336U+VayVHRHknMVKFcaFKriLxMpOuq0+Vmc awup/OYtpJYeknP+q1cUBUSXQqb0+T9NMo0UpNKqKfdjzlGTzyc4hYPotXHjPqhazb7G9Ma0Q2t gdAE1FU2dTl90p1OAELcMi4+HDV57/GSRSbBrd+HQdzXR1k49KNXgWMEVBFORNNwQ= X-Received: by 2002:a17:90b:3b4e:b0:38e:5c6:4db9 with SMTP id 98e67ed59e1d1-392823702d4mr16298190a91.11.1786385510167; Mon, 10 Aug 2026 11:11:50 -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.11.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:49 -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 , Dave Jiang , =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= , Alex Williamson , David Matlack , Lukas Wunner , Bjorn Helgaas , Giovanni Cabiddu Subject: [PATCH v3 09/34] dmaengine: ioat: convert cleanup tasklet to dmaengine BH Date: Mon, 10 Aug 2026 11:09:10 -0700 Message-ID: <00e0c9c2fea2a0b00a2f3a91bcea240c6021648a.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Acked-by: Dave Jiang Reviewed-by: Frank Li --- drivers/dma/ioat/dma.c | 14 +++++++------- drivers/dma/ioat/dma.h | 3 +-- drivers/dma/ioat/init.c | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c index ee93b029f9e3..c7a63dbac6e2 100644 --- a/drivers/dma/ioat/dma.c +++ b/drivers/dma/ioat/dma.c @@ -110,7 +110,7 @@ irqreturn_t ioat_dma_do_interrupt(int irq, void *data) for_each_set_bit(bit, &attnstatus, BITS_PER_LONG) { ioat_chan =3D ioat_chan_by_index(instance, bit); if (test_bit(IOAT_RUN, &ioat_chan->state)) - tasklet_schedule(&ioat_chan->cleanup_task); + dmaengine_schedule_bh(&ioat_chan->dma_chan); } =20 writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET); @@ -127,7 +127,7 @@ irqreturn_t ioat_dma_do_interrupt_msix(int irq, void *d= ata) struct ioatdma_chan *ioat_chan =3D data; =20 if (test_bit(IOAT_RUN, &ioat_chan->state)) - tasklet_schedule(&ioat_chan->cleanup_task); + dmaengine_schedule_bh(&ioat_chan->dma_chan); =20 return IRQ_HANDLED; } @@ -161,11 +161,11 @@ void ioat_stop(struct ioatdma_chan *ioat_chan) /* flush inflight timers */ timer_delete_sync(&ioat_chan->timer); =20 - /* flush inflight tasklet runs */ - tasklet_kill(&ioat_chan->cleanup_task); + /* flush inflight BH runs */ + dmaengine_kill_bh(&ioat_chan->dma_chan); =20 /* final cleanup now that everything is quiesced and can't re-arm */ - ioat_cleanup_event(&ioat_chan->cleanup_task); + ioat_cleanup_event(&ioat_chan->dma_chan); } =20 static void __ioat_issue_pending(struct ioatdma_chan *ioat_chan) @@ -690,9 +690,9 @@ static void ioat_cleanup(struct ioatdma_chan *ioat_chan) spin_unlock_bh(&ioat_chan->cleanup_lock); } =20 -void ioat_cleanup_event(struct tasklet_struct *t) +void ioat_cleanup_event(struct dma_chan *c) { - struct ioatdma_chan *ioat_chan =3D from_tasklet(ioat_chan, t, cleanup_tas= k); + struct ioatdma_chan *ioat_chan =3D to_ioat_chan(c); =20 ioat_cleanup(ioat_chan); if (!test_bit(IOAT_RUN, &ioat_chan->state)) diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h index e8a880f338c6..4bdb1ae937e4 100644 --- a/drivers/dma/ioat/dma.h +++ b/drivers/dma/ioat/dma.h @@ -111,7 +111,6 @@ struct ioatdma_chan { struct ioatdma_device *ioat_dma; dma_addr_t completion_dma; u64 *completion; - struct tasklet_struct cleanup_task; struct kobject kobj; =20 /* ioat v2 / v3 channel attributes @@ -385,7 +384,7 @@ int ioat_reset_hw(struct ioatdma_chan *ioat_chan); enum dma_status ioat_tx_status(struct dma_chan *c, dma_cookie_t cookie, struct dma_tx_state *txstate); -void ioat_cleanup_event(struct tasklet_struct *t); +void ioat_cleanup_event(struct dma_chan *c); void ioat_timer_event(struct timer_list *t); int ioat_check_space_lock(struct ioatdma_chan *ioat_chan, int num_descs); void ioat_issue_pending(struct dma_chan *chan); diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c index 737496391109..788927820d86 100644 --- a/drivers/dma/ioat/init.c +++ b/drivers/dma/ioat/init.c @@ -765,7 +765,7 @@ ioat_init_channel(struct ioatdma_device *ioat_dma, list_add_tail(&ioat_chan->dma_chan.device_node, &dma->channels); ioat_dma->idx[idx] =3D ioat_chan; timer_setup(&ioat_chan->timer, ioat_timer_event, 0); - tasklet_setup(&ioat_chan->cleanup_task, ioat_cleanup_event); + dmaengine_init_bh(&ioat_chan->dma_chan, ioat_cleanup_event); } =20 #define IOAT_NUM_SRC_TEST 6 /* must be <=3D 8 */ --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 D5E09435531 for ; Mon, 10 Aug 2026 18:11:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385518; cv=none; b=qdYzueEXyzmuEoUjwmdoG1sr1D3r7KRmHNST1uaSxb1kTtp7m78a1bkdWdRf8Xbxb5YlpbVjGMe1c32+HiTUwmpquNZ4UZNJZa5b5cXPCc0YxYH2NN9L/G56+qyj0P5zce1yjium9FyMuSaV6fAGX5oeNFupI/y6975TXBPS3fE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385518; c=relaxed/simple; bh=Z6aHSn9/shJEJCFIZp3kbMKlw0y+VH/BXUaNgVp99Pc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YE5Ls3Lb8SaAQ4E4azcKUGD5TRr6KIZcLFXyWMD8SJKp/0ciOm2thzqmRuC5lIw4Dlix0nOfbxCjScoRl9X2nz1/FD7/EKcDReRM2dQbnoZGw7beQe37iQo30pp1It4eA+Oey8zsTvzayk6VFp4HmsMXgT7hYOrmO8uDu1YG1K8= 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=Dd3FKD4n; arc=none smtp.client-ip=209.85.216.48 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="Dd3FKD4n" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-38f0f132f56so170139a91.0 for ; Mon, 10 Aug 2026 11:11:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385516; x=1786990316; 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=58obnPPYteuUQx4U+Rlg5+ZCM5vWRX2xfuOQL5uhRvk=; b=Dd3FKD4nipvpYVnnxKXOqEUBLF5BWsso04UnOWTGUBh/5t9xeQJ07e6BwJXvxhL8rT 86QPrZi+o4hU8PM3qhHIBcCgW/PHMDGUEZbyl/hsxp/G68VhXBKuJtF8osEEuu99t+5I d0gc5JdTteLpj4jRBGeokJsYiaBPUfTPzzPWayYNTa3eDiWAbo0hxCAD1eoppR3WGAaH Iq84amsRk18OP4znl34n2G1EA+PcXJvoUvVEsx80Vh+Rex6c3sdLswW2Ck4a13MvbTWj yCsuyhUSZWEqWqndQ9IGuRxJHkaG2Ak+I+SXc5PagMMldUwbPVEOGDJJj1wgu9/jzTuj 0XqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385516; x=1786990316; 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=58obnPPYteuUQx4U+Rlg5+ZCM5vWRX2xfuOQL5uhRvk=; b=HU5lRz6ssOBOdpnuxh4teSYXYqN+Y9yFzfzxMEb/I7XrvfUHjqohbnQKNNQCFUfM+l ymtudy6rxxoPSP1spruJg+eugSS4SYy9P2YVGtEJ0OfaJAHIdCn1iAwbxXYGThsDhLp4 cKWG4MTKW2eeQDXukHIq5XNVlemvtGBS+JNM5LG6kb2jILVgxdO4SWAm0sxKSK5La8oa 8S5eX7rGWyCXKVy1/Jr40jTLTu1VuJBDUmu86W0HnQiIiJRRIldKxy2k3PtRbKfRyvJg 0om0tehr5fCQg7TI90jk2Y+FngiQclvPvJ6/Ey+8HUtA9vIPx8lAig/BfXF6fbDf85dI hVXw== X-Forwarded-Encrypted: i=1; AHgh+RqDtB2roqm7Q9c8bHij95+0FajZSDW556wLuLz/izeEe9U+3aj9N0TRNxaBQHu9Y+nimuNoar17P8FWTPg=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+rpDjzxj9eDyeuiw3mjiwa1AcY5e2fMbeErnWsteii1e5f/2F ay2MfQ/crRZdratR8zeu73wPFduSSpFPnq7HRIfMWVjUC//MDUPehj4yhvtg3Q== X-Gm-Gg: AR+sD13PpCZMA9ZZN+QuWKTyjA4z34UJsYlW3zbvsovj0mQyk8Aw55u74OGZ5EGuDx3 gNyfuQnks2EKbhrzaIP/itjSXtSvshxHrCkIjmYLEEvWJWz9wvSjveXTqxqHkf4amJmimhtE3/b c1BPWydku6s9XwzfREYml86q3TSMGzT+2/ZAonKsXJQx83Lgu5YBlq6yrLU7OfUtENvd7lAOmAQ 2GWVobDSje8c7oQ79X4SAS/GSw+7B4xSAvPT9SNHnCoI/Z7JxSOf3z8rxtIl+D6SSbW090HiRnU WRbMa46LozP1VxEt81Tuxy1dySi/m/ZaN5n0H2S68sAoHmlSt1cQBE3VDlSvxipnyMPjjpKMyWQ g96DIJZnAKS0VjI57KIGC7p6V0fRZFaaZ0Nbr3x71ZVlYoCw9hakQjbeCNQY2150JkszZqCt7uo rQ4zwZ1dXegi4CjbHQ3mgbPQQdWWeSCJdmZAGCV0w9KvH1LahCRDwww/+x6QQJs7A= X-Received: by 2002:a17:90b:1e0d:b0:385:3ab:fecb with SMTP id 98e67ed59e1d1-392d610c22fmr145266a91.4.1786385516113; Mon, 10 Aug 2026 11:11:56 -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.11.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:11:55 -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 Subject: [PATCH v3 10/34] dmaengine: mmp_pdma: replace per-chan tasklet with dmaengine BH Date: Mon, 10 Aug 2026 11:09:11 -0700 Message-ID: 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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/mmp_pdma.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/dma/mmp_pdma.c b/drivers/dma/mmp_pdma.c index 386e85cd4882..4f7d3193d7a3 100644 --- a/drivers/dma/mmp_pdma.c +++ b/drivers/dma/mmp_pdma.c @@ -116,7 +116,6 @@ struct mmp_pdma_chan { * is in cyclic mode */ =20 /* channel's basic info */ - struct tasklet_struct tasklet; u32 dcmd; u32 drcmr; u32 dev_addr; @@ -374,7 +373,7 @@ static irqreturn_t mmp_pdma_chan_handler(int irq, void = *dev_id) if (clear_chan_irq(phy) !=3D 0) return IRQ_NONE; =20 - tasklet_schedule(&phy->vchan->tasklet); + dmaengine_schedule_bh(&phy->vchan->chan); return IRQ_HANDLED; } =20 @@ -1047,13 +1046,11 @@ static void mmp_pdma_issue_pending(struct dma_chan = *dchan) } =20 /* - * dma_do_tasklet - * Do call back - * Start pending list + * dma_do_tasklet - BH worker to process completions and kick pending work */ -static void dma_do_tasklet(struct tasklet_struct *t) +static void dma_do_tasklet(struct dma_chan *c) { - struct mmp_pdma_chan *chan =3D from_tasklet(chan, t, tasklet); + struct mmp_pdma_chan *chan =3D container_of(c, struct mmp_pdma_chan, chan= ); struct mmp_pdma_desc_sw *desc, *_desc; LIST_HEAD(chain_cleanup); unsigned long flags; @@ -1170,7 +1167,7 @@ static int mmp_pdma_chan_init(struct mmp_pdma_device = *pdev, int idx, int irq) spin_lock_init(&chan->desc_lock); chan->dev =3D pdev->dev; chan->chan.device =3D &pdev->device; - tasklet_setup(&chan->tasklet, dma_do_tasklet); + dmaengine_init_bh(&chan->chan, dma_do_tasklet); INIT_LIST_HEAD(&chan->chain_pending); INIT_LIST_HEAD(&chan->chain_running); =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 DFA3138CFED for ; Mon, 10 Aug 2026 18:12:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385523; cv=none; b=T6jLUV6toZsWKhrbpnvUeG4yv7zw7CRufSkTTsi6rUj7UyG7ec96mXvNwxQdSw3FcGDIqCH2ungn+q+SPAUG1v2zidZVSH6vTf3U70grxy1pyc0NwsFveFNw2hJdTm/tAV+sU2ap8PRpN6pq4uJ84cVxEXzrsc9eNlMeLGGvXuY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385523; c=relaxed/simple; bh=CMjPhRzimXiJ4Ot2/V9TB1hstuEfE53UMzRmsp3oe+0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YmJW39rlt5m0ZGGrmw4V9mFpivrX/tl1PAyKxTfJZtbMcHdijXeGKq1xQWuDx0jDli3Sbk3fotigLVBTafxoP1Jfhv9jkHFv+XdZEJFYCf40KcTa9+Jowft5HnujdFo1Rt2yBQkZG6VbGzZvS0lJUia6xkQUHdWYRqj17TpbRWo= 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=esL4NvSq; arc=none smtp.client-ip=209.85.216.42 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="esL4NvSq" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-38e041ea211so2536546a91.0 for ; Mon, 10 Aug 2026 11:12:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385521; x=1786990321; 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=APzX/5lv2veYBVlKY7NW4DLHfap6IRfZSwMiuZKOhFM=; b=esL4NvSqpdY/TVde5vodONVOujRJUa17fEQHfbXqC+d+UJLVYZDIinJVa2fxAaQo2V wZqmNkFgrg9Zx5tq+ZeYcaRVbx2L9SYHrcRLDExnjW4HAQ0FNnTNYNwuylOK0j7ShE7P zOiqv+jH1WVFN5WS+0S4WnEmz+rPJETbqZeHPR3kI/imDEEypXTUK8cSM7CP6jMxJLhl gW9jOql+dQIAtwRpoKjYqk5jUOSrBw3KRoaCjaibkLtjizPre+cqjRbndp5UficuqoAr 38dh7/D6RY5eLuZTpMo621MQMPJgnd0cHOVvs4CIq89yhf3vZballaEgbNDyYVEv+JYu M8aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385521; x=1786990321; 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=APzX/5lv2veYBVlKY7NW4DLHfap6IRfZSwMiuZKOhFM=; b=fOjtsrc7h7YjPRsLDGV7qeNTFtcKu8YmDWEavQe59HwyMzWCbAqf8hN6aG9uE8JNmk sUw23JCIECBz9IsauGnlUpviEnALvXImzJxH+nL0uI0HBhRRE4DWtsUvdA9MAU/Y7Jdq ziYMEjBh2Oi765JQcpfIst02qpIKZp1RHLg9iQMBMewpjD1gHu1CmbBXzO6ftJ9vZCxr SuFPjdaX6JdHU7VmaM7S8bhwJzM7Wgc+Krqs6L1J00cYxc0ObE0+8XsCnL0XobjthwrY 9HCU9u+nKp3BEmx0DBBjbqaEWaSab2tggRv2TsGRRT6MX72LY8a6PbHhTuogZMi7tJQs TzOA== X-Forwarded-Encrypted: i=1; AHgh+RrO+YztLBirUqkWfGs0m/iLco5emvrvv/f6ipXuVYWYhqzYdl9E9L2ss04HgpXleL60nD8g9RPINosWmcE=@vger.kernel.org X-Gm-Message-State: AOJu0Yxg8v8LNjb2/kezhU9W+VIeMY1Of7v/fNYjrGrLdkRAqleHFP8O yH0P1CiklCuV6yV3RdixhRqCsecbFi6l/lPa8L0J+GH2qFwAER7Obvg4KPqV1Q== X-Gm-Gg: AR+sD12oPvgAWWMLp3FFoRa4qYNRxR5kig8ZXmM122RB11LpZBNVqQ14a6IqORE9+j9 O62tSeiBN1rlA4p3hVNGeirQJd5FBYhM1AQz0eulz083G7SF/K3PMZxSZK0fCa/0cbWmUkdHp8d 6MFkpWKKthx/hD11cOVpbGgYvA05PTinHeBVnK+xlJOrl3U/FNwjFLsBAtPeG/ZsSN77n/0Ubks uwQiHiUEYhS5bhy0mRlNYOX5cmG5IMFIckTL4mad9GXY545TS70YI7L1t0/v6Oc8e1XexuJmXUQ 30zRW0UZHjERUHs9wy7oYQA60nbfXqmc0Wd2WLhMkA7IMDUoKxf+gHF2o9ylQDpfa2oy3TbS3R3 nfqvpkARTCtTAERmAlm2WQ1EZSI5rqRbWm5dOwoGc86M/ZcZxrNFio9v33UBma0Ogz3+pJ/IRDC 8u6/2FcRd6lp49cDBHv/pyOMfPly5BB7AdqB/KS9eqr/FGoIfZFXlu22BX97tu33bV X-Received: by 2002:a17:90b:1d02:b0:37f:fdc8:71b4 with SMTP id 98e67ed59e1d1-3903c599356mr46360025a91.2.1786385521315; Mon, 10 Aug 2026 11:12:01 -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.12.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:00 -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 Subject: [PATCH v3 11/34] dmaengine: mmp_tdma: hook completions to dmaengine BH Date: Mon, 10 Aug 2026 11:09:12 -0700 Message-ID: <3cd07c8bcab908e352bf1570fb7a3c24cc0fe516.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/mmp_tdma.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/dma/mmp_tdma.c b/drivers/dma/mmp_tdma.c index ba03321eeff7..d20aaa7567a6 100644 --- a/drivers/dma/mmp_tdma.c +++ b/drivers/dma/mmp_tdma.c @@ -102,7 +102,6 @@ struct mmp_tdma_chan { struct device *dev; struct dma_chan chan; struct dma_async_tx_descriptor desc; - struct tasklet_struct tasklet; =20 struct mmp_tdma_desc *desc_arr; dma_addr_t desc_arr_phys; @@ -320,7 +319,7 @@ static irqreturn_t mmp_tdma_chan_handler(int irq, void = *dev_id) struct mmp_tdma_chan *tdmac =3D dev_id; =20 if (mmp_tdma_clear_chan_irq(tdmac) =3D=3D 0) { - tasklet_schedule(&tdmac->tasklet); + dmaengine_schedule_bh(&tdmac->chan); return IRQ_HANDLED; } else return IRQ_NONE; @@ -346,9 +345,9 @@ static irqreturn_t mmp_tdma_int_handler(int irq, void *= dev_id) return IRQ_NONE; } =20 -static void dma_do_tasklet(struct tasklet_struct *t) +static void dma_do_tasklet(struct dma_chan *c) { - struct mmp_tdma_chan *tdmac =3D from_tasklet(tdmac, t, tasklet); + struct mmp_tdma_chan *tdmac =3D container_of(c, struct mmp_tdma_chan, cha= n); =20 dmaengine_desc_get_callback_invoke(&tdmac->desc, NULL); } @@ -583,7 +582,7 @@ static int mmp_tdma_chan_init(struct mmp_tdma_device *t= dev, tdmac->pool =3D pool; tdmac->status =3D DMA_COMPLETE; tdev->tdmac[tdmac->idx] =3D tdmac; - tasklet_setup(&tdmac->tasklet, dma_do_tasklet); + dmaengine_init_bh(&tdmac->chan, dma_do_tasklet); =20 /* add the channel to tdma_chan list */ list_add_tail(&tdmac->chan.device_node, --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 15B5C3E44EE for ; Mon, 10 Aug 2026 18:12:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385529; cv=none; b=deKP80ItMCQmI1zrytq2jHzQy27YQ8+RHaGM+vtKzJU2QYRQgYBHhW+MRkhs4f3Ps/q3XPiOK7t3HFSCX5ImSxAW6O8QFlWqxUGA296jTu6zMSqTppLwnn1i15f6lfaH3WOImU+IYmLPSk1FEJMwOKeT3ZtiVva8je7c7AKRXRI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385529; c=relaxed/simple; bh=EcSxs//NX9CKu+93ObJADpDk68KdQCGvlmly0gYzB98=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z6fmiZRLD0VDJI1vmsengCN3LkixK0DKUlpyZWyxBu7OphSm3ADE8WGWJ68Qw9Ma6Zly54F4tHsSUihrhI0QL7MGhk2PpNDh10WTAK6Lo8sItZtxrMgUiIYSC4ajuIDvff1UiUVm2Ut7cSU5b9nEltwnRLBAlVKtTwMOhdHES2o= 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=Lx/qeSvm; arc=none smtp.client-ip=209.85.214.176 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="Lx/qeSvm" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2ce87c7e3bbso24944295ad.1 for ; Mon, 10 Aug 2026 11:12:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385527; x=1786990327; 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=Izpb3U85IQFL8r+2WgcI27OJDxEjSqNL13Ea+z3kRO8=; b=Lx/qeSvmO0xd5m4Vi0ZsY1OWqcguqeh+dy2aXMt7LzFiPnMODDoMmKhX4JpRn6DS0W qJ31kKwPjHq35K7rjC5pCrcjX9PaCZ2QyCkVG4trxzIeQUNf3ujHxJQ7MOfDi9TdZgDL R+ieXqBPMPl7ar7CWZG37l9G5p/SWUvEjlD6uYGzMvD+KssFbdTog6CHOYF5zp2CDL4s tNnaFDg9UC5V80OGXWRlcEuGQjS3mVnpxMWJb1anV/UccwvNGEIQxB+U2LjpSamXz/dN 9gPUOJCYR8v0JyXhzOCgV0CX6ldjAQ/9IFJmY2t2bQabYdO3GAOJg39/7vGYLFkBDh4S RgRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385527; x=1786990327; 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=Izpb3U85IQFL8r+2WgcI27OJDxEjSqNL13Ea+z3kRO8=; b=qh0uk8NVj9seO6z2JvYkeJAuAv6iRUuhZiWKyPerVWPtufDdaT6hLMzMs97enk32jw o6LtUb7ddI9ywNuxWYzcwtnFcCk5GlQntJu+fmN2CXBKxjnxMUh6BEJnCo6Y2INtusK2 8VDARgI7yCdlYylHZVyYTC4fQFuquvbr7BEvPNbpbrVQqGZZsuL0ku7bx9uB9jrmQbKg XJIUg32SQlnaUPNwKGRhHGNIqC5b8Yh6r8XKr2WQrzInAEXeJjBo/IwbcJEJU0wLaKlE BREYZl9lR05STXtIwMZ3vBPm3Tufe++dlWHgTUUruy6+UTwa6RxqWx2etyQolwF2Lbt4 9TbA== X-Forwarded-Encrypted: i=1; AHgh+Ro5CG9pYUjEBkNNCjJ+fLUJURxDcuvyjI/lIYlyGoQdfzU9rWUIp0hBAJU74HVuWcz9EXLcaoLlw4HsZsQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzevTHvVZTiGivtTTWANWALBaIgxezQy4oL5nZ6dPbGn1BmwNGN DXfa4/BUpNrry8w8TPUhQUYnenb8iHyCPDqIv4EzlotNZzIre02u3Tl/ X-Gm-Gg: AR+sD10wDJeS7EKM9xzHOik0yEilWlFaRpKjJK8qIgWfQMl2c41PCsLV++nB/rg2lsw 9ojL4zPSGEqMACHkoqvZAMZZxuimSF3NHeS7YErA4LNtz2PAWpludDR0Thl3ZkkOknCv+pHz+EB qUDh4noz2lid3wpAY3D6wgLP4sVhffA5CVuBEMjQgSjWY1NwCtsVxzLwFjt+xk4ABOQoxTXzuMa o++T/JNupBaTf1Nj3PiYn4q4EDqaHGclgWZNBCdl13G7C6h6jvP3ntPzL4euBrO/d3KZxlevmF9 zLiJIaHXpzQaYlTf/SFBjMR3ePEPf5ahcxtYIQ1hjHgmcElnZlXnGKeNPneF7JIrOUT0FBdnwoa fv68+sGPr/4BgIuwvQBHP9kXf6ROSxViiWHPWyCqbNw2Ty+gOZvpZPJQM78T4x2l2ZgLlA4i6GE oM2RZB2bdIqBeUgRT16xmZ1QAv4mRsLg3Xfpe2qBeVEQjd36gs+SusLvPoQwQYrFY= X-Received: by 2002:a17:90b:3f43:b0:37c:6130:7a5b with SMTP id 98e67ed59e1d1-3903c54302bmr47214837a91.8.1786385527404; Mon, 10 Aug 2026 11:12:07 -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.12.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:06 -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 Subject: [PATCH v3 12/34] dmaengine: mv_xor: convert irq tasklet to dmaengine BH Date: Mon, 10 Aug 2026 11:09:13 -0700 Message-ID: <75cb0e6cfddfcf5655fae89f58a06cdeca02f831.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/mv_xor.c | 12 ++++++------ drivers/dma/mv_xor.h | 2 -- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c index 25ed61f1b089..752e30ca5fa8 100644 --- a/drivers/dma/mv_xor.c +++ b/drivers/dma/mv_xor.c @@ -327,7 +327,7 @@ static void mv_chan_slot_cleanup(struct mv_xor_chan *mv= _chan) * some descriptors are still waiting * to be cleaned */ - tasklet_schedule(&mv_chan->irq_tasklet); + dmaengine_schedule_bh(&mv_chan->dmachan); } } } @@ -336,9 +336,9 @@ static void mv_chan_slot_cleanup(struct mv_xor_chan *mv= _chan) mv_chan->dmachan.completed_cookie =3D cookie; } =20 -static void mv_xor_tasklet(struct tasklet_struct *t) +static void mv_xor_tasklet(struct dma_chan *c) { - struct mv_xor_chan *chan =3D from_tasklet(chan, t, irq_tasklet); + struct mv_xor_chan *chan =3D to_mv_xor_chan(c); =20 spin_lock(&chan->lock); mv_chan_slot_cleanup(chan); @@ -372,7 +372,7 @@ mv_chan_alloc_slot(struct mv_xor_chan *mv_chan) spin_unlock_bh(&mv_chan->lock); =20 /* try to free some slots if the allocation fails */ - tasklet_schedule(&mv_chan->irq_tasklet); + dmaengine_schedule_bh(&mv_chan->dmachan); =20 return NULL; } @@ -737,7 +737,7 @@ static irqreturn_t mv_xor_interrupt_handler(int irq, vo= id *data) if (intr_cause & XOR_INTR_ERRORS) mv_chan_err_interrupt_handler(chan, intr_cause); =20 - tasklet_schedule(&chan->irq_tasklet); + dmaengine_schedule_bh(&chan->dmachan); =20 mv_chan_clear_eoc_cause(chan); =20 @@ -1107,7 +1107,7 @@ mv_xor_channel_add(struct mv_xor_device *xordev, =20 mv_chan->mmr_base =3D xordev->xor_base; mv_chan->mmr_high_base =3D xordev->xor_high_base; - tasklet_setup(&mv_chan->irq_tasklet, mv_xor_tasklet); + dmaengine_init_bh(&mv_chan->dmachan, mv_xor_tasklet); =20 /* clear errors before enabling interrupts */ mv_chan_clear_err_status(mv_chan); diff --git a/drivers/dma/mv_xor.h b/drivers/dma/mv_xor.h index c87cefd38a07..27774abe34a6 100644 --- a/drivers/dma/mv_xor.h +++ b/drivers/dma/mv_xor.h @@ -98,7 +98,6 @@ struct mv_xor_device { * @device: parent device * @common: common dmaengine channel object members * @slots_allocated: records the actual size of the descriptor slot pool - * @irq_tasklet: bottom half where mv_xor_slot_cleanup runs * @op_in_desc: new mode of driver, each op is written to descriptor. */ struct mv_xor_chan { @@ -118,7 +117,6 @@ struct mv_xor_chan { struct dma_device dmadev; struct dma_chan dmachan; int slots_allocated; - struct tasklet_struct irq_tasklet; int op_in_desc; char dummy_src[MV_XOR_MIN_BYTE_COUNT]; char dummy_dst[MV_XOR_MIN_BYTE_COUNT]; --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 BAE2D306B3B for ; Mon, 10 Aug 2026 18:12:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385533; cv=none; b=aWdhuH3N+L9W2reCHIIhfZS2SgYVez54OFua16htjZorgwNrurUZIbyIdR5U2UkEdABJIduk47raNp6kqUaerL59tmNWq5Y8Akv29s/vDGbckjsIToRGXqXbQHEO3pE4EYS13SCQP5OAWZ5dOfnSffFb08Mllud+RZyqj/gnT6w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385533; c=relaxed/simple; bh=iDQocSIDsAlV/ALE+AarkKKauy6yJDgGIKOSWbkIszs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N+5/NuN06GSu8CEQGYDCLKtCBNaCNVmEMlpiXXbd9+DPTF4Vn6/JCiR0JBgMCtl43wOCKlRDtQ1LVpFFa7ydtFB4/ZrdCmDQIA5/5rDRdIbbaY8an8cqbShQnIWuNviE1R05cpQGJTIBUs+nZxrdmjMiLNAQ/DUxbSK8rsCRt/4= 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=QQx4U5rf; arc=none smtp.client-ip=209.85.216.49 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="QQx4U5rf" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-3810c5d691bso1891514a91.1 for ; Mon, 10 Aug 2026 11:12:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385531; x=1786990331; 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=P1heC4kdbiOKopjs0B6gQi+UwOdRbZzbCNzgmPlgldM=; b=QQx4U5rfhv/DON+PcHuzsZvmTxTDzBdwB8u1LFFQSiLRHI0jlggLfFSOgE4XwNIP9/ rIQGKHK6E+62UxqWYnccX1boo47am+5rnm+PI5noXLrAgePkcuG9j8Est1mHlzIbajRm vNwT1fb2HgmBDF6YmumV5gSg5bnMc5Yvx8/avWhgPkmeKRe39wYwPh9zT1enx5qQfn+8 2xc2pnXP7a6deKc1u8rIztPmb7I13trQz5BJpEweUNCn/kWiBvrY0r6zxn03qIzCppSz lXlPhzxlA2P6lHcVTjYkRvOqY/u+dqQYKnE+TpVhZdjCpgk3GwgScBmpVqcEo73DiKGL UBCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385531; x=1786990331; 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=P1heC4kdbiOKopjs0B6gQi+UwOdRbZzbCNzgmPlgldM=; b=B7erO1Q85eNx43lm1EqPDamYfCJVwzAPvUqIvrVwM1GfUDVdPzlh177HVu95M8QnKa pnHmNMDy7nzYqJ/Q55DQD8dCGYTSYlAqIkAPBvh7IcECqGf2z7eH7RXcc6MUO+gOJ6Ic c7E2KTZh+gjsNZvhsVppjB6ii9o9aB4UBDHWtYhthizS2B9uH49HBYIHdnCdjshMASxE vvgReCy+XwK4kcL/NKlFodzORS/yKPKBAP7lcL42NVu1FcC4PLPuQitO192fpWHwmrPA dl708S5GIIYLVThZNOK2xtgp6pXF7rteE6mKUryTlqUcDe617GvAEo/U6qld6KnF//Ar mBag== X-Forwarded-Encrypted: i=1; AHgh+RpGxO7b4JhOfjJhmYOcaIvu2B6hvolK05DeFvI9SkowPIpbaztebbdx0VnDQzeUcUCkKfnOnbAPQZ0Sw6c=@vger.kernel.org X-Gm-Message-State: AOJu0YzccidSKSeJSMjU3L8VKIawAhynJdwgO5iVe31GNVFJHHw7zkow DsvDxi3be4Fbjk7y2MLhZZhC2C//ClbgeHTYobXJ5P8xtzoqH0d4bpbu X-Gm-Gg: AR+sD10e1+kCR2VhIq9VTAdk5UrNxjJ/mnXn6Jnbea7AJqG5cMDfDuKSaLOJ0VsDndr UAZMGujkzxQ3Oqxo4epegLRmE/JnpTbDPHmSiI9xHGC8fVO0T0IxyGPxw8EA5pcD83IurCPMYOH 7tIJO5PsEaerW0mIv8zjjkamtRcAezl33Trkz9W48Iv6QWv3aLxITdp2AjTzITI7uhdnAEYXAAW qD/XruDIgIHBfjvnJMpKcNhWyNM6oSYj8K5+e04TL/D2zKyhEWR236fWda7CzG1AFA+mk067jue LxqGcpoPcX6uzgGQk2EGTLEcqPTnTOlLdPR4YQYtyr8bF5w+Y1zEAo1XLGymwcRt8vVz4mQhL3k 3xQxEWJls/iM7PPKNYJUBmx6GoeW7p/BtMxdvz655nTU6GC9Usw3ZtWS56NYjMp6o1wcz6604Im CUDlSs9t7utxPZHSAST1ttI1q0335985EYGMmDqxAcEAl/oesAwziGJSgNv4Ul1Oc= X-Received: by 2002:a17:90b:3806:b0:38e:7080:b4c0 with SMTP id 98e67ed59e1d1-3903c5cfbccmr42496378a91.10.1786385531037; Mon, 10 Aug 2026 11:12:11 -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.12.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:10 -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 , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 13/34] dmaengine: mxs-dma: use dmaengine BH scheduling Date: Mon, 10 Aug 2026 11:09:14 -0700 Message-ID: <3dec314c8878181bbf9bd8bdf6d222c435643fc0.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/mxs-dma.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c index 7acb3d29dad3..149ac402f7b4 100644 --- a/drivers/dma/mxs-dma.c +++ b/drivers/dma/mxs-dma.c @@ -109,7 +109,6 @@ struct mxs_dma_chan { struct mxs_dma_engine *mxs_dma; struct dma_chan chan; struct dma_async_tx_descriptor desc; - struct tasklet_struct tasklet; unsigned int chan_irq; struct mxs_dma_ccw *ccw; dma_addr_t ccw_phys; @@ -300,9 +299,9 @@ static dma_cookie_t mxs_dma_tx_submit(struct dma_async_= tx_descriptor *tx) return dma_cookie_assign(tx); } =20 -static void mxs_dma_tasklet(struct tasklet_struct *t) +static void mxs_dma_tasklet(struct dma_chan *chan) { - struct mxs_dma_chan *mxs_chan =3D from_tasklet(mxs_chan, t, tasklet); + struct mxs_dma_chan *mxs_chan =3D to_mxs_dma_chan(chan); =20 dmaengine_desc_get_callback_invoke(&mxs_chan->desc, NULL); } @@ -386,8 +385,8 @@ static irqreturn_t mxs_dma_int_handler(int irq, void *d= ev_id) dma_cookie_complete(&mxs_chan->desc); } =20 - /* schedule tasklet on this channel */ - tasklet_schedule(&mxs_chan->tasklet); + /* schedule BH on this channel */ + dmaengine_schedule_bh(&mxs_chan->chan); =20 return IRQ_HANDLED; } @@ -781,7 +780,7 @@ static int mxs_dma_probe(struct platform_device *pdev) mxs_chan->chan.device =3D &mxs_dma->dma_device; dma_cookie_init(&mxs_chan->chan); =20 - tasklet_setup(&mxs_chan->tasklet, mxs_dma_tasklet); + dmaengine_init_bh(&mxs_chan->chan, mxs_dma_tasklet); =20 =20 /* Add the channel to mxs_chan list */ --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (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 B64953FDBEA for ; Mon, 10 Aug 2026 18:12:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385536; cv=none; b=F6qBnMYI8lS2mIGax3bYw+bXbAImcqSF+p6Ap5lSK2/VrRsVrQygv9cIGWEGrsaofQ5RQKlUXBP05F9hfzOXjcuU6ZqPQIKmcNd5YVOVKVrVrgyqe+IrnvyLEM6Ef1AGTcOf/wD9TDhLtDiI1SmlbwewcSKVtAAAhLRxbZo7e3A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385536; c=relaxed/simple; bh=Ig/1w3EhJGHkFtqnBVPKsssBgUok5xYMLMpIf8SMxu4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G6mGqVEmZKzH73gphGOyuvu+EVmGVpdc4kenUdHjOQoP1HZ2PdW2RpHQpZVuow/oJDGfNp/N0lkNu7eOZOatEphb4J0X9Qx7+HAfqcGKCyKcd8RfRht+J8hpJ++k6pUJcbmQNBib5GLHfo7MLMBCBcSr/BzD577ciGXDca+Hut0= 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=aeNDYg7d; arc=none smtp.client-ip=209.85.216.45 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="aeNDYg7d" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-38dfe7eb825so1848671a91.0 for ; Mon, 10 Aug 2026 11:12:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385534; x=1786990334; 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=T/4gAs3IWqMAs/xTmYl6h6Ls6/U+dnIqpId4Zr1VebI=; b=aeNDYg7dbduNaaJJCqTfL8HCAzBZVDhjiKSPrWjc0eTVUDVSRNHwIXqsnvTeYCajfm hgzngL4rpJfGQNuKXj+nNVihw9nqg6g6oVY6BUU8fhJUBgniQRbX3O16htpVPSkCop+G DcPicZkE6tIkcJZoVOSkB7dN114iNLQJQ6vjPkdARv73Zt0CvjJdmhhtf13qn3WtvFfI RTrBS6Qr8Xxz1UYwcI43XWJDv59Jeu5NOstm+EK2dIV8kBWywUdqaa8nSdQFseQlwVOA LYHaHjhUiWNV3wr201tOBHwJQEWce1de44bs7kjYK0TQAvViYqUYktUq/nDuS/BxCX/E Dc6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385534; x=1786990334; 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=T/4gAs3IWqMAs/xTmYl6h6Ls6/U+dnIqpId4Zr1VebI=; b=CEQLpubpCGTgPQeXcF7/8YFVm7CWSOzDSmsXgBygVoqTo5AYdCBps88JP+i8pkWnFc Wd6RmIAJoyZyGSHwqBkGbuLL3pN3wuRuFIwJrospggtGcVbaF+DCYl4GebFMZ3iNA5E+ au/3L9R1vFStgKUQyluk/+kQ9eCLKUiCwZGd1KjGxzp/lResloUj67oQNaNFIldnheZV teaqY7yjrccef7tuLPkaCsojsDQ6DaQxppmao3ag/Xw5yatZtWDF19M8xy+UJEHCh1sj veAbBVnNeiu01zMOZeOM/XIz1k4aBhN1hWts2rYcSeD5qo0B38CqSvB7hNw0zwoc8Qol VWew== X-Forwarded-Encrypted: i=1; AHgh+RpH/g08+qfqm/tvGxJcY46x+NsgtH0r9oDU2qDCJYiirbDxieSBpQBR5MFJurMduq/C2GwjHPEmL7Ht4AI=@vger.kernel.org X-Gm-Message-State: AOJu0YxTDm+4VrNbh+ULN9Xfm1tdjoDW9lQ37xJWOvQ35zw3hYOuRADL W8EKQAPgr+F4i4+O3UkACvJM8pkmdMT2KRZDbnh+MjYBRiV1eYnPVCc4 X-Gm-Gg: AR+sD12G0d0pUNANvMOmO/n9Wrowsd36AFZ6kLjwnhVeQmM9ZBZrj0Ut8QAJnM9Cpgy 0D24Wk3GtVxZFCHGZX6KlkGppeKAtld0WgnQ3+OXwxWzDlgrilW/hseAjtv9ScCzcY3HaNzPxDk Nf2NhGFLUPtu2IW0m217C1s5O+FFgaAEixUOHB2LwAg3KDLC1DkjfZDi0CapNwBw5V+IZ7mkddy VIRU5axk/Z0GTjQoNtXIWrffmRluE4fO/ZFCMZEZf20S/TCfReIKXisoE1Ilqq38wC+Jbi/gVbl 8q/LUsoTgVCssCTrsdh2Q8+RR8hp3rI1WXBI555ZrQyYpxHKt29IxV6FzOiTJN22qFpZSXSMcv8 c8aqUdOtva1U3ARs/PrConiW6FD4LLJSzsbvZvP0b2GTQQ9UPUZUBHoMQzUvxyl9mhIJbONpEBB fybafC9DsolsGtAyYOfFt7LmCja08fY12P0O8XtGQ7Ewj7BOdBh3zjSe8wK52G28LflOWASefcn sI= X-Received: by 2002:a17:90b:2242:b0:37f:c28a:de61 with SMTP id 98e67ed59e1d1-3909d8e4c62mr27811550a91.17.1786385534137; Mon, 10 Aug 2026 11:12:14 -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.12.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:13 -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 Subject: [PATCH v3 14/34] dmaengine: nbpfaxi: switch callbacks to dmaengine BH Date: Mon, 10 Aug 2026 11:09:15 -0700 Message-ID: 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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais --- drivers/dma/nbpfaxi.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/dma/nbpfaxi.c b/drivers/dma/nbpfaxi.c index 05d7321629cc..7dd5fc55228d 100644 --- a/drivers/dma/nbpfaxi.c +++ b/drivers/dma/nbpfaxi.c @@ -174,7 +174,6 @@ struct nbpf_desc_page { /** * struct nbpf_channel - one DMAC channel * @dma_chan: standard dmaengine channel object - * @tasklet: channel specific tasklet used for callbacks * @base: register address base * @nbpf: DMAC * @name: IRQ name @@ -200,7 +199,6 @@ struct nbpf_desc_page { */ struct nbpf_channel { struct dma_chan dma_chan; - struct tasklet_struct tasklet; void __iomem *base; struct nbpf_device *nbpf; char name[16]; @@ -1125,9 +1123,10 @@ static struct dma_chan *nbpf_of_xlate(struct of_phan= dle_args *dma_spec, return dchan; } =20 -static void nbpf_chan_tasklet(struct tasklet_struct *t) +static void nbpf_chan_tasklet(struct dma_chan *c) { - struct nbpf_channel *chan =3D from_tasklet(chan, t, tasklet); + struct nbpf_channel *chan =3D container_of(c, struct nbpf_channel, + dma_chan); struct nbpf_desc *desc, *tmp; struct dmaengine_desc_callback cb; =20 @@ -1228,7 +1227,7 @@ static irqreturn_t nbpf_chan_irq(int irq, void *dev) spin_unlock(&chan->lock); =20 if (bh) - tasklet_schedule(&chan->tasklet); + dmaengine_schedule_bh(&chan->dma_chan); =20 return ret; } @@ -1272,7 +1271,7 @@ static int nbpf_chan_probe(struct nbpf_device *nbpf, = int n) =20 snprintf(chan->name, sizeof(chan->name), "nbpf %d", n); =20 - tasklet_setup(&chan->tasklet, nbpf_chan_tasklet); + dmaengine_init_bh(&chan->dma_chan, nbpf_chan_tasklet); ret =3D devm_request_irq(dma_dev->dev, chan->irq, nbpf_chan_irq, IRQF_SHARED, chan->name, chan); @@ -1478,7 +1477,7 @@ static void nbpf_remove(struct platform_device *pdev) =20 devm_free_irq(&pdev->dev, chan->irq, chan); =20 - tasklet_kill(&chan->tasklet); + dmaengine_kill_bh(&chan->dma_chan); } =20 of_dma_controller_free(pdev->dev.of_node); --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 BF22B435529 for ; Mon, 10 Aug 2026 18:12:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385539; cv=none; b=pTAQniT8+KCDcz6ocMbSYv4zlMosV/H/yiioMpR5fBNnI0+RQTOaz7TNMtZbMpPGpaFJoWB4SijqQR7CBODodqWZiSzQDg6D9ESV26aud5n5iJtMHRWlJrlxExZ1p67W2E/823gIq2Y2wrvi4m0+Wq2diWdveS4EyMR+usTcqM8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385539; c=relaxed/simple; bh=bG3LJpjkYmT6FBZfH9s4KWN3hchwrzKsnI6tFBWtiCI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V9mX6AmZDC5OtzH/RYqp/y/UUXfgBGVq6geGqxxIE2xQoR37N7YQbQ3VxTmNDZzvsbte4MxwQmMCJazdXdZn3++Yv7t1Khu8dwotST8G9s+GJVcicL14NOWa4hLNOKatXH8BfSyeAuurhXIscjhBephASGNS4MKuDN29u5cdiSc= 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=Ff2yZfLB; arc=none smtp.client-ip=209.85.216.51 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="Ff2yZfLB" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-38fdeaed181so2804075a91.1 for ; Mon, 10 Aug 2026 11:12:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385537; x=1786990337; 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=ZsNf5bjfoDgYvX/JyiuMylIj+fn5WBmscP8FbbD1RRw=; b=Ff2yZfLB1Nkf7WuF2TJU1lwEWEyXjML/Xmvp3r9zNnNRf7nyvGs0m8OGEIxoWLhQEF U1eW5a7Q9IM9xAaUiTnA9NdiFGpewqNCK8A61NAKBGyL27AkNal1fI2JRw1GxMhhWhaO 4kkSHTAYx9u+2Wkz+NynX+wtA7kA0jSGTzH44L5QCpR/wHLEeRMhDbWyYTQVrL1Llp42 IGRnCg+QLvKqK58hdLWvH4Qm7lbeqTQbppfVDlNisBGGp3Xi4K/xS8DKRt0Kg5vnS8D7 ieSuorFDIp6L9Iqe/kFcATgyYnFbcMRQLMc/RmV/6hQ2UJyVFSBMux7Qb9jbUIOsHajA nq+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385537; x=1786990337; 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=ZsNf5bjfoDgYvX/JyiuMylIj+fn5WBmscP8FbbD1RRw=; b=Hc4YpMpE6widT4RbHqvUhAbotEFyJlaDDxPcJVrj06ZGIRGl2RQREc5+LJllsOfOP8 JP49/7vL9eTpUJ8VzI8P4hesrWsbxCgwWJFivcLTjY3wax2IoTbjh6YqqmBt5PVIoDiV Jo98yw1N0B8XTu6Q8F7qioJIieWMO/X7jbC/NZnJnVPvDTRGpMht6eMcM9ty1t5YSK61 ULeM8qcjCA3vMSj/afWAL579c6eUBXsNmnA9L29KoCZ+QTjB5gN/qaRbXqHk8n3KZ2DH YG+SZ8BPRA01toBekvDSCyTRVh2tGIUxOo5ArBNEV2N5fd7i/avYiCUqtOHtvm203QtD wswg== X-Forwarded-Encrypted: i=1; AHgh+RqlibjHlTiLlq7SuTGqrWvoNcC5tAVhRFj8aSjwAl1hoPTzVqVfNs0lkxF6fDgpP5TjhirtOXF1X5AfpII=@vger.kernel.org X-Gm-Message-State: AOJu0YzQl9jxKgWcHiBdfHXrcj3q8ZHImL7rHC4NsyZcUdJ2UCRz5uIk 9Igat6EPxVOsUFjw2fRVumo9kKtkDvQFZPQhlLVT5XvONKb1W7exQE2p X-Gm-Gg: AR+sD12DJBzgUDgFaAOgDPiActezU8KL3EnW5lV70WP+ZyaHuSPORo8tXRI5o9zUBUT eH7OZTUSEeB4yoOKHdWOSUv676ySKG67HdrW0t7e2jpZbVv8W18wgyZ4kX3ov9UjQrYYqdESeVA K8/gVSbZhOhc5IPkztGks396twX55ZlQoTWDSiqjLfVxlUt9oXJ0PvGQmbGCVZ8b04rI95qhl1i mFCFbu0xmlnHYwPImag2zadkVGSDHrY2GawpRHjNfa7WPiVqBTlW3yqUg1Atp6CxTc/uTT93JF5 cVpXgPCMOwJ/wrCXNjQdby7e7zJ8gCjIxurkNoLoUSXaBTVE4dI7+2uK1yi1i5cB4UkcQjE9ZAN qE3zeQSi+mJi1u0yzYI0afyUt5FUUqEBYewxu0M1lCwy6HGUGrEemzSpALg3nzNrHzzVLqL16OW Z2T25azSzaG7I5J9V1ZLbFkqnPdaoebYcz0BDybU1hNZtySeKV9wEFG6HBBAz6V4U= X-Received: by 2002:a17:90b:224a:b0:383:5a16:bd70 with SMTP id 98e67ed59e1d1-392cca92597mr3389754a91.16.1786385537188; Mon, 10 Aug 2026 11:12:17 -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.12.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:16 -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 Subject: [PATCH v3 15/34] dmaengine: pch_dma: convert tasklet to dmaengine BH Date: Mon, 10 Aug 2026 11:09:16 -0700 Message-ID: <920e972b55af0bcebe09383f5f00cf5dc75e5cf6.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/pch_dma.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c index bf805f1024f6..eb372aa328a6 100644 --- a/drivers/dma/pch_dma.c +++ b/drivers/dma/pch_dma.c @@ -91,7 +91,6 @@ struct pch_dma_chan { struct dma_chan chan; void __iomem *membase; enum dma_transfer_direction dir; - struct tasklet_struct tasklet; unsigned long err_status; =20 spinlock_t lock; @@ -665,9 +664,10 @@ static int pd_device_terminate_all(struct dma_chan *ch= an) return 0; } =20 -static void pdc_tasklet(struct tasklet_struct *t) +static void pdc_tasklet(struct dma_chan *c) { - struct pch_dma_chan *pd_chan =3D from_tasklet(pd_chan, t, tasklet); + struct pch_dma_chan *pd_chan =3D container_of(c, struct pch_dma_chan, + chan); unsigned long flags; =20 if (!pdc_is_idle(pd_chan)) { @@ -707,7 +707,7 @@ static irqreturn_t pd_irq(int irq, void *devid) if (sts0 & DMA_STATUS0_ERR(i)) set_bit(0, &pd_chan->err_status); =20 - tasklet_schedule(&pd_chan->tasklet); + dmaengine_schedule_bh(&pd_chan->chan); ret0 =3D IRQ_HANDLED; } } else { @@ -715,7 +715,7 @@ static irqreturn_t pd_irq(int irq, void *devid) if (sts2 & DMA_STATUS2_ERR(i)) set_bit(0, &pd_chan->err_status); =20 - tasklet_schedule(&pd_chan->tasklet); + dmaengine_schedule_bh(&pd_chan->chan); ret2 =3D IRQ_HANDLED; } } @@ -877,7 +877,7 @@ static int pch_dma_probe(struct pci_dev *pdev, INIT_LIST_HEAD(&pd_chan->queue); INIT_LIST_HEAD(&pd_chan->free_list); =20 - tasklet_setup(&pd_chan->tasklet, pdc_tasklet); + dmaengine_init_bh(&pd_chan->chan, pdc_tasklet); list_add_tail(&pd_chan->chan.device_node, &pd->dma.channels); } =20 @@ -930,7 +930,7 @@ static void pch_dma_remove(struct pci_dev *pdev) device_node) { pd_chan =3D to_pd_chan(chan); =20 - tasklet_kill(&pd_chan->tasklet); + dmaengine_kill_bh(&pd_chan->chan); } =20 dma_pool_destroy(pd->pool); --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (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 3E9A23FDBEA for ; Mon, 10 Aug 2026 18:12:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385549; cv=none; b=tQfIgM1wQAIRwDkkEi3qsmP4QLZK+ynkRHJtLGqcLPKgbcmxUMDNTFQxj0CYJznKjP0cvzhUnOQTwOC+1NiPI0Bm4Z8RHijLETEgZwo1F8ZkCCUgXvg53Zgr7L+dCCE0nrP9vM4Ip/NRoh7MqLa+9uhKmrs6nRvIlINcyY1bndE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385549; c=relaxed/simple; bh=pENuedcacRmz3eveVQ0ur5/dSuhphtm9HwZx70Dq/ko=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I3eloEuRJDcmGdqFameemSu+Z+JM4uGnTDW6QZkIFCSQPn44RSGLb9JYFx11JCy3fyvnYGRGSyUQ15dDsE3KVPTdtiKHcRN5npBweVxTFEZdj2iU+cjXXfn8R7z7dVtErmCbD8cSpAIs26tp67U+Wn2VNspzTcnJwsIZvd/RljE= 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=l4EwdvTU; arc=none smtp.client-ip=209.85.214.174 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="l4EwdvTU" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2d004f135b1so27080735ad.3 for ; Mon, 10 Aug 2026 11:12:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385548; x=1786990348; 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=RKITIRCt5MQ0SXKJ60mBhkacHyjlhp0Jg3BxwJ4h1sA=; b=l4EwdvTUS1Vr6qKxOhdlH1VMgxmhHlaotmU+s+q4JrZwT7c+RnEDuHUiajNSej/HiJ Vfa4bf0Xwx0mPp9rJrVjZAxKXHfqzOR6MfE58R4BOlOW5LsQxxEoeTsEItiQSN+uyeYD qd400Zn/z/SB3u3pkmupaK+YdZym4qZ0wY0VrJFdEUnty1Nomc60GzJ0C8MQCQXvACZL 5jLPooqGxd7PPUh/yO4WTnjZQ+tW7CgKsUZW7C4qASoZdL7hT2aRMyPXhAJdwSDrtSgc +Fr+q7ALThlbvrJlzyeU80FqicR+JxBRudVXl8GimGfS496O9Y5lp5KD8vvJBY7HUH0K y+SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385548; x=1786990348; 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=RKITIRCt5MQ0SXKJ60mBhkacHyjlhp0Jg3BxwJ4h1sA=; b=WfYTyu2HaJS3VwRPFdKJxK+20DzKmb6/ukX+IMNXo5a3Rgoyx7Z0AcZhrnWTuCDbnP 9BPh5W02lO0DZdWKSSathuAUZyhaOhJGndeh5sW/LD+mRmszyDl6ZWKJsqRNXVS/wCWL OfmQ1AxG4BnYcnza/WBGSWwOFDZaFiUucLHdRejJ0OqgX1JSDFQxVeBH89jW8lN8NL/L QAhR5JwaSbFdfU8/uRP+m0xNR/72zzNbhhnvW2XJPhllt5fj23ocpNnmMXB4ddLJK6jM 3YVYXmCvxE6Qc437ifRqYF8b+zS4QMTAC/nTQ4H847U+3otabwGRISt5AVN5eS9j0HkN m65Q== X-Forwarded-Encrypted: i=1; AHgh+RoX5e9iQxsyrTkL4X+/kGxrRURtSADVkol/9O9j9MuzrwVgy2X3MFBNIYXmAVnIpwRqJJXKabAaTM4rNC0=@vger.kernel.org X-Gm-Message-State: AOJu0YyE3A3MvKDWWElBURTxjfOi0UzZX+Le6ciM2WgudlBhn8YLmXjb qLl/ATH5qvSDPXXSg/rOcXyEMa4rTzNPjKAW6WbY+VYv3BnG90seMOjg X-Gm-Gg: AR+sD10mBa7dFMEZP2dDDEt4PgZ/ziGmt5M2lF//nK7HfwKrX/vK7KU3tuwIdsX4nnW M15su77nqb9WHuFP8fkOpApAxslF5AwmsAUqkUtab0AVuONp0VvPJ8GsS62I7VLNaoxMsvV8hux S4DQAJyFx29i4ThUMuzfZ9TuQbFFkZsS6PG4zbtwiRq/QVifBtmY0Pep56aBl7COeuQ421Oz9xU dwF0y5pU/Mja0E4LqpVB+5Gj9gJpwWZ1dft8TAlTX7+2CS5XAXSjB9AwBnzn8ZmZEbLJYQI8MSr FhnhK7o0ZO5GuFa/BWazWRnEH62NV8F5v1atXuIs3UyfIa/LF1Tw8BKzntZiMpVERTPNxb7exre R1kSeiNhvTq6+lpOhw1Vr+DAwWvcjchDy7VbLrVTVO9+oqpSCt+3INnLHBsMfQuTMrdpHStO8wl v8DmlPIl+XNhZ1p9CE2Tdl7M5Mi6/Cr4PUlflMSqBsPMCO0Hm2LMSLsUOnivMEA6k= X-Received: by 2002:a17:90b:4d8c:b0:381:6c5:3f63 with SMTP id 98e67ed59e1d1-3903c544f17mr39654241a91.6.1786385547524; Mon, 10 Aug 2026 11:12:27 -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.12.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:27 -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 , Colin Ian King Subject: [PATCH v3 16/34] dmaengine: ppc4xx: replace irq tasklet with dmaengine BH Date: Mon, 10 Aug 2026 11:09:17 -0700 Message-ID: <476a24b72cd4aa6bf62b120fc80965830616331c.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/ppc4xx/adma.c | 14 +++++++------- drivers/dma/ppc4xx/adma.h | 2 -- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/drivers/dma/ppc4xx/adma.c b/drivers/dma/ppc4xx/adma.c index 279a431ccae3..bc10c2b5dd12 100644 --- a/drivers/dma/ppc4xx/adma.c +++ b/drivers/dma/ppc4xx/adma.c @@ -1658,9 +1658,9 @@ static void __ppc440spe_adma_slot_cleanup(struct ppc4= 40spe_adma_chan *chan) /** * ppc440spe_adma_tasklet - clean up watch-dog initiator */ -static void ppc440spe_adma_tasklet(struct tasklet_struct *t) +static void ppc440spe_adma_tasklet(struct dma_chan *c) { - struct ppc440spe_adma_chan *chan =3D from_tasklet(chan, t, irq_tasklet); + struct ppc440spe_adma_chan *chan =3D to_ppc440spe_adma_chan(c); =20 spin_lock_nested(&chan->lock, SINGLE_DEPTH_NESTING); __ppc440spe_adma_slot_cleanup(chan); @@ -1754,7 +1754,7 @@ static struct ppc440spe_adma_desc_slot *ppc440spe_adm= a_alloc_slots( goto retry; =20 /* try to free some slots if the allocation fails */ - tasklet_schedule(&chan->irq_tasklet); + dmaengine_schedule_bh(&chan->common); return NULL; } =20 @@ -3595,7 +3595,7 @@ static irqreturn_t ppc440spe_adma_eot_handler(int irq= , void *data) dev_dbg(chan->device->common.dev, "ppc440spe adma%d: %s\n", chan->device->id, __func__); =20 - tasklet_schedule(&chan->irq_tasklet); + dmaengine_schedule_bh(&chan->common); ppc440spe_adma_device_clear_eot_status(chan); =20 return IRQ_HANDLED; @@ -3612,7 +3612,7 @@ static irqreturn_t ppc440spe_adma_err_handler(int irq= , void *data) dev_dbg(chan->device->common.dev, "ppc440spe adma%d: %s\n", chan->device->id, __func__); =20 - tasklet_schedule(&chan->irq_tasklet); + dmaengine_schedule_bh(&chan->common); ppc440spe_adma_device_clear_eot_status(chan); =20 return IRQ_HANDLED; @@ -4137,7 +4137,7 @@ static int ppc440spe_adma_probe(struct platform_devic= e *ofdev) chan->common.device =3D &adev->common; dma_cookie_init(&chan->common); list_add_tail(&chan->common.device_node, &adev->common.channels); - tasklet_setup(&chan->irq_tasklet, ppc440spe_adma_tasklet); + dmaengine_init_bh(&chan->common, ppc440spe_adma_tasklet); =20 /* allocate and map helper pages for async validation or * async_mult/async_sum_product operations on DMA0/1. @@ -4247,7 +4247,7 @@ static void ppc440spe_adma_remove(struct platform_dev= ice *ofdev) device_node) { ppc440spe_chan =3D to_ppc440spe_adma_chan(chan); ppc440spe_adma_release_irqs(adev, ppc440spe_chan); - tasklet_kill(&ppc440spe_chan->irq_tasklet); + dmaengine_kill_bh(&ppc440spe_chan->common); if (adev->id !=3D PPC440SPE_XOR_ID) { dma_unmap_page(&ofdev->dev, ppc440spe_chan->pdest, PAGE_SIZE, DMA_BIDIRECTIONAL); diff --git a/drivers/dma/ppc4xx/adma.h b/drivers/dma/ppc4xx/adma.h index f8a5d7c1fb40..9af1feaf0b9a 100644 --- a/drivers/dma/ppc4xx/adma.h +++ b/drivers/dma/ppc4xx/adma.h @@ -80,7 +80,6 @@ struct ppc440spe_adma_device { * @pending: allows batching of hardware operations * @slots_allocated: records the actual size of the descriptor slot pool * @hw_chain_inited: h/w descriptor chain initialization flag - * @irq_tasklet: bottom half where ppc440spe_adma_slot_cleanup runs * @needs_unmap: if buffers should not be unmapped upon final processing * @pdest_page: P destination page for async validate operation * @qdest_page: Q destination page for async validate operation @@ -97,7 +96,6 @@ struct ppc440spe_adma_chan { int pending; int slots_allocated; int hw_chain_inited; - struct tasklet_struct irq_tasklet; u8 needs_unmap; struct page *pdest_page; struct page *qdest_page; --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 43500435A9C for ; Mon, 10 Aug 2026 18:12:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385553; cv=none; b=d3HtxXqjxVlIq83P9vZhIvDSDf1CJ9SbB7BZlENs6z2695izOFixipcZqaQoAEMcVyEiOW2AYcUXYbzehN9SMpsWyRGHI8xuYUPf6+zNSKkVDWVi39RgFdP2HNTHOTwbRE/pEheP+1VOhPQnmM5po/Yb3GS0njpsVw2ne35Xbak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385553; c=relaxed/simple; bh=wwLFXnu6wU+2q9X0yV+5+Pg9Fs+zv91K8/Zj4nee7yE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E4cbAigKsXb9gNfembfbveF4uRvxRYs0XiQShPWoWS0Rh56e9bCK5AsUvk019rcYJZQe+bfLXtRqwHj196db+kBXS4fMAby5ig9E8b6+5gMjVvk9vseR2aQLLRW/SUdrXA9m6omsf0NzDk/AY53/bIx4xfJXw4OpHammkKX3Wl4= 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=eQWDZTMR; arc=none smtp.client-ip=209.85.216.51 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="eQWDZTMR" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-3810c5d691bso1891886a91.1 for ; Mon, 10 Aug 2026 11:12:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385551; x=1786990351; 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=oxUXaFX3//5gZlFn4j1A0nGnaMNCEpwg1qcm0FpwvYU=; b=eQWDZTMRxit6YRcR+E9FzscKZhSxk+JjnTXHkACryWpjxdFeZ/CbI34GUoDy85MeL7 KJYIbIkDh89fV0gncK6b3GYLUZyiLCtzKRciz9HSTDIM605KGQUQ4m32xOqRoxsGjv/1 b6vqjfCkxprJCYR9zt7b8zEm7IyjlekiEonG01g5vYO5L8d0OVg0aYJzy7R6wgILeJA7 Qlbg70ts9twjvig3itcX9gyyhlHwXhq6IhHhAZDEb7qLCpt24qks30kYvGmV5BF2Jk1P 5SK0Vec7I0cnuWKSEof4U2FSP9QX//X3SO92/vnQXT/D8Q5JCDWI+T0MHSrvss4dJJYL bKvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385551; x=1786990351; 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=oxUXaFX3//5gZlFn4j1A0nGnaMNCEpwg1qcm0FpwvYU=; b=k+4d63F14vBdS3qfSHQH2rmhE14/ZIHxOxrw3UTyyMLSiKuD9ZbEN99ohYi9zTceIZ adnBWxmeKhfc3l/8/7PzHhG7bWfLf1pGsX/ZBy8txRTcr28ll9LpCE4E9i8QupgWK45M h9Nm5NoKv7a5yNeHXHmlQpu08ufQoghJKEHbDvC62+Ytza/DN/NZlyW91nVBjKgo8M+K lNsDVrvJAeUztPZ9jsKVFGHw8x2qWaSv5zW+MXFydvaBshrN5mAF5+Rs+kjMpG20Xavu tWsQQXjEKjNP508IWVQWWFoRuynMpWc7M8nUu7QZtyorHQBoXCfeTOKry2v9sQKSeXbi 6QEw== X-Forwarded-Encrypted: i=1; AHgh+RrNZ2ZczIWIedpnkO/C11KY/hRRA5MeXiUuWZr831NVpzmiy0O4dcY4T79hQYARa3eMzCAAJrRyrpe3C8k=@vger.kernel.org X-Gm-Message-State: AOJu0Yztx/F5X4H0lET3VmYV1OKlQnzYCZucxt2LzKRzJIruEfskfJdp LzRzatMWAlgJ5spBXjJfjR47Nmr9f8YZhSByYHg5am3s+gj6r7/d72Rb X-Gm-Gg: AR+sD10USqvqKBxQu7WIDEFFgHrlHMlobUBhYbCshMiNTDZe9iLedM6lVxiR18/GARo nKg7rOlE6mcXe4EjTVnClR9/VxL/2+S6frunpDb/70qGgY45GUNxFkyJalZLQPyERDy5nnFXd1N Qhr1mz0+C/QUTC6l89HGKy5CZFyk+onJDlh4Y2qau9itkCVjZGHQYh0x7NW2LJdmzWc99P1+Pp6 lKr2f6Quvv3I97OoNJEJ11BgUVjx3SG+RC2zyJQTNETlArgsVD8jdRzwZli4UUfiZSP5FwIJfGe NukOTVSsFHRROpLPUIhAX6o9W/C9+z2vRDgSneIP/QjXH/YOEX2lpQ2WPy8wTAdEmzfLIf8NTz3 g+tO4Mjrx/z7rcdcCXSrDArbP5SecDSINGI2WoAaf0jtqogJb+SxtcSvMJmQ+PZFhV+xEFRLsVS L/TOT9xWhTn6fyU71vu3PS2dtiqwFOg3zBn41QVDDd3z4+DlL3uKuU3h8QzWSsDWo= X-Received: by 2002:a17:90b:28cf:b0:381:11eb:d78e with SMTP id 98e67ed59e1d1-3903c5d321dmr44037109a91.14.1786385550593; Mon, 10 Aug 2026 11:12:30 -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.12.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:30 -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 , Linus Walleij , linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 17/34] dmaengine: ste_dma40: convert per-channel tasklet to dmaengine BH Date: Mon, 10 Aug 2026 11:09:18 -0700 Message-ID: <72495a21d3eb7ef735400e1a52deb24f3e70c944.1786384168.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Linus Walleij Reviewed-by: Frank Li --- drivers/dma/ste_dma40.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c index 0d9ffa3e2663..e6dfa1fc5e5a 100644 --- a/drivers/dma/ste_dma40.c +++ b/drivers/dma/ste_dma40.c @@ -461,8 +461,6 @@ struct d40_base; * @phy_chan: Pointer to physical channel which this instance runs on. If = this * point is NULL, then the channel is not allocated. * @chan: DMA engine handle. - * @tasklet: Tasklet that gets scheduled from interrupt context to complet= e a - * transfer and call client callback. * @client: Cliented owned descriptor list. * @pending_queue: Submitted jobs, to be issued by issue_pending() * @active: Active descriptor. @@ -489,7 +487,6 @@ struct d40_chan { bool busy; struct d40_phy_res *phy_chan; struct dma_chan chan; - struct tasklet_struct tasklet; struct list_head client; struct list_head pending_queue; struct list_head active; @@ -1587,13 +1584,13 @@ static void dma_tc_handle(struct d40_chan *d40c) } =20 d40c->pending_tx++; - tasklet_schedule(&d40c->tasklet); + dmaengine_schedule_bh(&d40c->chan); =20 } =20 -static void dma_tasklet(struct tasklet_struct *t) +static void dma_tasklet(struct dma_chan *chan) { - struct d40_chan *d40c =3D from_tasklet(d40c, t, tasklet); + struct d40_chan *d40c =3D container_of(chan, struct d40_chan, chan); struct d40_desc *d40d; unsigned long flags; bool callback_active; @@ -1641,7 +1638,7 @@ static void dma_tasklet(struct tasklet_struct *t) d40c->pending_tx--; =20 if (d40c->pending_tx) - tasklet_schedule(&d40c->tasklet); + dmaengine_schedule_bh(&d40c->chan); =20 spin_unlock_irqrestore(&d40c->lock, flags); =20 @@ -2815,7 +2812,7 @@ static void __init d40_chan_init(struct d40_base *bas= e, struct dma_device *dma, INIT_LIST_HEAD(&d40c->client); INIT_LIST_HEAD(&d40c->prepare_queue); =20 - tasklet_setup(&d40c->tasklet, dma_tasklet); + dmaengine_init_bh(&d40c->chan, dma_tasklet); =20 list_add_tail(&d40c->chan.device_node, &dma->channels); --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (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 3A214435A9E for ; Mon, 10 Aug 2026 18:12:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385555; cv=none; b=hzPJlSC70Lb5nTF2dDzkrilOfkHGpWTbK8SgfdJUnt48GRJxMe66tCnUSFkqO/o1VTE4FW/2dSsBcbxrZik5WPZ7YFyVGPlBXK2xO79Oreb/zxpfd0h8glofqw3yh6jDR4guLLPg+A2a2OSp3FAlRFg+ddRFO8jIJiqZUwx98QY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385555; c=relaxed/simple; bh=NmPTWKWU/XXWJnxBrOM9+TA4gg2maSIZspzw1qRN4Hw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WRAWOPQZJX+5rCKmkvbheqjg+THWrsAfzBpdcYBN1Gc6iKKrtzxgJa2mFJ1RZOh1dSrnKLIrhnNbuyzD98Ut4NEgqQvUi6pSaq1Khldr5ADspahDkpyUmXK17iDi8h+PQq+U6X+n7ML+meZsphntIzHi/ZRxcAqfab8/kl7kFOM= 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=BNHkPm/O; arc=none smtp.client-ip=209.85.216.41 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="BNHkPm/O" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-38e42560ebcso1653296a91.1 for ; Mon, 10 Aug 2026 11:12:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385554; x=1786990354; 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=jhv9jwlBVkN0UhJGwK19V7QRpEro4v/LDfkYXX13aoI=; b=BNHkPm/O4zIhwUS5xEeiTmRXPNG0h2+g6GZK9+Q7ssR01Jk3lNIUPFdv8LFJYfhLdD ORL/9Fp164Cn6LGHaAx2HGVtdSkqMo5vcmnMz0meKOw29cLc/senYqC8XPqM6IWnzl7O wrTA/VXgxuUMIvCkyfYC2+xfCWQ5zkjN3pJo2zt+Fkh8DB4vgraq20cUuIcOpPIX/ToN QbWaksunNRKJ6az5KANT8SR8q69ERwgHTBDFYSzzT8dgXTxRRIhEjX4ovaVDY4LIaxbB x14OPsiPfLhJQG0q2YjqS2/+llxXDir4zIi0/xhpwwFaGkoN7rW5BSYfH0VW/iG3+3D7 lAdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385554; x=1786990354; 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=jhv9jwlBVkN0UhJGwK19V7QRpEro4v/LDfkYXX13aoI=; b=p+CngLqCQa+WKBSdk7iDWjHifUXlk0mIYzjy7BB5ijL7OMjHjPN3Yw+Zv+PMUDBKyf GIRMyCcusDF3yJD+bDgMvd7hWLjAK9Q7s58Ehkh/bbeIZs0YJ+Rv70DFp73TG99T/3jB 72DwLYmlJRVOIhsmtMHZAXqabRtd+hEY7jk53alJsUj7BRGU/F0BIDXUniFqJU7VrlU4 nRz39HTxToWbtiWa/HbcznBGPk/L3uynOaxO2YmCW1TsQEZITu67mGryLZNYbTJP6T+F ADgHy2saIjxuN47a225ElSN6wKXAXs/p/wh2/kn1C8uLeQEASrQ3f/9JEE9MsisPGpQf pa5Q== X-Forwarded-Encrypted: i=1; AHgh+Rqasfd4v4mN2cuBr8zEGlvjJLHfVpO98pVLREubTMexU3EZRKlNZWZKGmCdW/zBqBpo3rBQ+AWhd97FnxU=@vger.kernel.org X-Gm-Message-State: AOJu0YxhVCR2DEl3Cnv7mMxRq4nGjxL+RixyIDXssKlv+PF1Ct8bp0CV CEKDc9iZ2meiGf9LjLh1XEV4mgmH4t3i0arRJZjDWovh27zh5zUPfPHd X-Gm-Gg: AR+sD11n6sBHgd4OIsC1e4T6/2tXjhU7AkUvVak42WyPQEBcDor/SItYp+ky+WGQTPK IL2s3n4I2nCyK3o+sQd5P9gXJnXrdby8KZ0zNqXfVnK2jeQ2EP7RKtEn+ezqlRzl+QEfw573hub g9qLSOqawSe8H0MsyvTedCBvAE70QsnesLa8s4L6T4u6v1BjvFtvqibLKY+mJgU3KjwUsq/rDsw sY4SKr7+l34Q0sWgwM3tK+f+orFMHFpKLSiBlC4U0KcCjBNDlwWXWfsB7Vc6bD/rvrzAMEdnzXW wUnOoy9+RistMZbcJywuhVcZWn9NLmTTkTeGF5nAK7y730lWGbk5DPXhLSqfS7m8vuEoSb8PTQy 7y908a/DeDP4CXHerljcHdTIeMv2BkgvbGXcopRBXCYV2zPGG9HbRrffWbBUCxmLN4+bFLHXOPH HVgZ9Cjzs7hPwONXwY9TIb01KnYlYOJb6QoB67+fJ7P2ynpukwwV3Ehcwd0kK1kTA= X-Received: by 2002:a17:90b:5444:b0:381:1f51:1ff0 with SMTP id 98e67ed59e1d1-392821fc107mr21956496a91.2.1786385553481; Mon, 10 Aug 2026 11:12:33 -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.12.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:32 -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 Subject: [PATCH v3 18/34] dmaengine: xgene-dma: wire descriptor cleanup to dmaengine BH Date: Mon, 10 Aug 2026 11:09:19 -0700 Message-ID: <29f97cc894a9c6fcd4aa1f2981850476a963db52.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/xgene-dma.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/dma/xgene-dma.c b/drivers/dma/xgene-dma.c index fa1173e49900..bdeed908e37a 100644 --- a/drivers/dma/xgene-dma.c +++ b/drivers/dma/xgene-dma.c @@ -260,7 +260,6 @@ struct xgene_dma_desc_sw { * These descriptors have already had their cleanup actions run. They * are waiting for the ACK bit to be set by the async tx API. * @desc_pool: descriptor pool for DMA operations - * @tasklet: bottom half where all completed descriptors cleans * @tx_ring: transmit ring descriptor that we use to prepare actual * descriptors for further executions * @rx_ring: receive ring descriptor that we use to get completed DMA @@ -280,7 +279,6 @@ struct xgene_dma_chan { struct list_head ld_running; struct list_head ld_completed; struct dma_pool *desc_pool; - struct tasklet_struct tasklet; struct xgene_dma_ring tx_ring; struct xgene_dma_ring rx_ring; }; @@ -975,9 +973,10 @@ static enum dma_status xgene_dma_tx_status(struct dma_= chan *dchan, return dma_cookie_status(dchan, cookie, txstate); } =20 -static void xgene_dma_tasklet_cb(struct tasklet_struct *t) +static void xgene_dma_tasklet_cb(struct dma_chan *c) { - struct xgene_dma_chan *chan =3D from_tasklet(chan, t, tasklet); + struct xgene_dma_chan *chan =3D container_of(c, struct xgene_dma_chan, + dma_chan); =20 /* Run all cleanup for descriptors which have been completed */ xgene_dma_cleanup_descriptors(chan); @@ -999,11 +998,11 @@ static irqreturn_t xgene_dma_chan_ring_isr(int irq, v= oid *id) disable_irq_nosync(chan->rx_irq); =20 /* - * Schedule the tasklet to handle all cleanup of the current + * Schedule the bottom half to handle all cleanup of the current * transaction. It will start a new transaction if there is * one pending. */ - tasklet_schedule(&chan->tasklet); + dmaengine_schedule_bh(&chan->dma_chan); =20 return IRQ_HANDLED; } @@ -1539,7 +1538,7 @@ static int xgene_dma_async_register(struct xgene_dma = *pdma, int id) INIT_LIST_HEAD(&chan->ld_pending); INIT_LIST_HEAD(&chan->ld_running); INIT_LIST_HEAD(&chan->ld_completed); - tasklet_setup(&chan->tasklet, xgene_dma_tasklet_cb); + dmaengine_init_bh(&chan->dma_chan, xgene_dma_tasklet_cb); =20 chan->pending =3D 0; chan->desc_pool =3D NULL; @@ -1556,7 +1555,7 @@ static int xgene_dma_async_register(struct xgene_dma = *pdma, int id) ret =3D dma_async_device_register(dma_dev); if (ret) { chan_err(chan, "Failed to register async device %d", ret); - tasklet_kill(&chan->tasklet); + dmaengine_kill_bh(&chan->dma_chan); =20 return ret; } @@ -1579,7 +1578,7 @@ static int xgene_dma_init_async(struct xgene_dma *pdm= a) if (ret) { for (j =3D 0; j < i; j++) { dma_async_device_unregister(&pdma->dma_dev[j]); - tasklet_kill(&pdma->chan[j].tasklet); + dmaengine_kill_bh(&pdma->chan[j].dma_chan); } =20 return ret; @@ -1790,7 +1789,7 @@ static void xgene_dma_remove(struct platform_device *= pdev) =20 for (i =3D 0; i < XGENE_DMA_MAX_CHANNEL; i++) { chan =3D &pdma->chan[i]; - tasklet_kill(&chan->tasklet); + dmaengine_kill_bh(&chan->dma_chan); xgene_dma_delete_chan_rings(chan); } =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 46B0842B75A for ; Mon, 10 Aug 2026 18:12:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385563; cv=none; b=fgkba5/5+BTEuDrDZ/BYaBaz/zGYNM/c9tza/fUDm2mZ4h9PeCnl2rnjaneMTQ4dpmltz0RjGmdJ4KxNmycoe5d0KEk4EkyDIJYa81Vif2zY5RZryuetyWCB/E9q8NHdXFtSmUYWL/QVOLjt9iINw0akQLKCtoJnJqWZzi84Yww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385563; c=relaxed/simple; bh=VSGfp2nFK2KHhGT5BTCtWQE+xFVZbCQ4FH5muv7ny1k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Rp328FSlTBKkrEi+LzBBoErR60oZmSI0noeQS/hjb0d+uWkOl0w3rNjYRB54dEbn3ZadOR6LeQ4LnPj/8xV7dfGCnJBuYsWmJLccpafS8jBQDHRi2ihIGk7DEanHhkLsYxjTeJys9zGD1xdIvM70f0UezSBidLBbaG1PA3G9fZ8= 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=sYIzIixu; arc=none smtp.client-ip=209.85.216.42 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="sYIzIixu" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-38deea72eebso2143989a91.1 for ; Mon, 10 Aug 2026 11:12:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385562; x=1786990362; 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=XhfEAW8BttSC81TlBFp6AqcN9U05iRvrtOjyjSXhehI=; b=sYIzIixuaVAPldDQes2BkTH4+Sz01uNV4djC0QGb8aep0NY2UVhE/nyFsbb42IMFpY Sm9ZU0F1SOkEK+C7AAYPQbjB4mjlBYKo0wYhZwdK0tixQaVy0MgD5DhNha4o/rMUXj37 6+c+BmGBVdeyH9Xg4kYhn8YlCnYdUferimWS6J3pFC0RO8Pyp8bZve7QC7+oyIrr9rsy J70psSFcwJCyOCw8Qf3VZnJ+Ny/rgOfOuXIhD1rEPa7fQ6zpKbePlge5aEIXfUaybzYj kWWDNdnI4m4dcDP0Kdix9OiDVTfecTHYLy5RTRUp6S8ULztiUhQU6g9ZD7Q6T0MHUlRN QKGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385562; x=1786990362; 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=XhfEAW8BttSC81TlBFp6AqcN9U05iRvrtOjyjSXhehI=; b=C2v709n1NNHwjnSAhCQwcvEGDcRI/0li1n1HAl+0ci75CkA9q2jhKtua14Foac2nzg aNj007g4bz5mNSlvYdzCkEcLNyJLUxb+7yBW8w82KoeXI9y0yJ8XuodeP97AyDk9iWXJ 7OTlntfVCZDrWywI0LaqdP+JSQTwFyjQMmIS4g0OzbLl5HiIzP9PV2xjfImDTxW1sR5M jFz3O/yRZSpPD8JDPuECTaUusrEDcn77+JjkQ0d8tReJPSL47UuK1vCWUhIYaXAxhd6+ Cfw+/zBrJ0xDMD1ZGInBd7kGtoYWvZBKqujfY29m1Q4dz5czc622YO/JPl0TKzTui3co 2CBA== X-Forwarded-Encrypted: i=1; AHgh+RoTMFOXYnttvnqOyUu7DBXPuHVmWxLNiHKpTqT3XFF3kWfTKQKzOmGvZVRPHGONaVKhE05QEiqI1Zz5ed8=@vger.kernel.org X-Gm-Message-State: AOJu0YwFxm0ZL4qmUR2D2IaHZFUelhvr2oWBlXLaF9Ds97lV4lvyu28t JRagozjKpN79GZjf9GUE5NxNuFn92rjtkU5cAE8+KBDSxFGupXHOiqfwdp46AQ== X-Gm-Gg: AR+sD10pL4o2LQrQ2ByKkvea3AlLCeRs0reLjNdoHPnli0Ybl5DJcMXQFKZS2tLXLV1 nWRzdnhmoCitsG7n1e6OoJ05SQi7s08Dl1TRkya/7wb2vjc3Yjy5jMgAcooBiOVQzmLNpzXx71a kGClLZFeXklsB7fSOCB/jdz2KvvIb8LE4hCPBxSvGENgbslmWgzzsRI+l+XNAQR5DYVba5zIVX6 n3fcssIeBVCokTKuH5XltEQOe4MKoaBxBVjmNTSlaPwEWxvcOEvcMV0fWjwH3M+QsooEndeuWT9 2iMf1eFY1GjZSxHDbMFpKpJhsKauRnv15dbma8KSuue6ncIqPSTJ9CN6d/Di86WfI+UWsWOCxaj CtvpuqPZYxzeDV5BEEZF9OCUdUp9eMcjiP9F/fchQbEIuy+yQzkCqI+8vXjSE7XancfMbxZTLYw tTwO0/oZBAh67LrQZeIq0k1hInubxX0VjKq46lHJhPcDRwqAc4cq523yNySBKnqSczi6xOlI4MO A== X-Received: by 2002:a17:90a:e706:b0:38e:b400:a860 with SMTP id 98e67ed59e1d1-392824a96eamr22423349a91.13.1786385561722; Mon, 10 Aug 2026 11:12:41 -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.12.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:41 -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 , Michal Simek , Suraj Gupta , Marek Vasut , Folker Schwesinger , Tomi Valkeinen , Krzysztof Kozlowski , linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 19/34] dmaengine: xilinx-dma: use dmaengine BH instead of tasklets Date: Mon, 10 Aug 2026 11:09:20 -0700 Message-ID: <67afeabe4a9cc241704b36875e766d7d129465ec.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/xilinx/xilinx_dma.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dm= a.c index 404235c17353..b142c9c0583c 100644 --- a/drivers/dma/xilinx/xilinx_dma.c +++ b/drivers/dma/xilinx/xilinx_dma.c @@ -402,7 +402,6 @@ struct xilinx_dma_tx_descriptor { * @err: Channel has errors * @idle: Check for channel idle * @terminating: Check for channel being synchronized by user - * @tasklet: Cleanup work after irq * @config: Device configuration info * @flush_on_fsync: Flush on Frame sync * @desc_pendingcount: Descriptor pending count @@ -441,7 +440,6 @@ struct xilinx_dma_chan { bool err; bool idle; bool terminating; - struct tasklet_struct tasklet; struct xilinx_vdma_config config; bool flush_on_fsync; u32 desc_pendingcount; @@ -1115,11 +1113,12 @@ static void xilinx_dma_chan_desc_cleanup(struct xil= inx_dma_chan *chan) =20 /** * xilinx_dma_do_tasklet - Schedule completion tasklet - * @t: Pointer to the Xilinx DMA channel structure + * @c: Pointer to the Xilinx DMA channel structure */ -static void xilinx_dma_do_tasklet(struct tasklet_struct *t) +static void xilinx_dma_do_tasklet(struct dma_chan *c) { - struct xilinx_dma_chan *chan =3D from_tasklet(chan, t, tasklet); + struct xilinx_dma_chan *chan =3D container_of(c, + struct xilinx_dma_chan, common); =20 xilinx_dma_chan_desc_cleanup(chan); } @@ -1898,7 +1897,7 @@ static irqreturn_t xilinx_mcdma_irq_handler(int irq, = void *data) spin_unlock(&chan->lock); } =20 - tasklet_hi_schedule(&chan->tasklet); + dmaengine_schedule_bh(&chan->common); return IRQ_HANDLED; } =20 @@ -1955,7 +1954,7 @@ static irqreturn_t xilinx_dma_irq_handler(int irq, vo= id *data) spin_unlock(&chan->lock); } =20 - tasklet_schedule(&chan->tasklet); + dmaengine_schedule_bh(&chan->common); return IRQ_HANDLED; } =20 @@ -2654,7 +2653,7 @@ static void xilinx_dma_synchronize(struct dma_chan *d= chan) { struct xilinx_dma_chan *chan =3D to_xilinx_chan(dchan); =20 - tasklet_kill(&chan->tasklet); + dmaengine_kill_bh(&chan->common); } =20 /** @@ -2745,7 +2744,7 @@ static void xilinx_dma_chan_remove(struct xilinx_dma_= chan *chan) if (chan->irq > 0) free_irq(chan->irq, chan); =20 - tasklet_kill(&chan->tasklet); + dmaengine_kill_bh(&chan->common); =20 list_del(&chan->common.device_node); } @@ -3075,8 +3074,7 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_de= vice *xdev, str_enabled_disabled(chan->has_sg)); } =20 - /* Initialize the tasklet */ - tasklet_setup(&chan->tasklet, xilinx_dma_do_tasklet); + dmaengine_init_bh(&chan->common, xilinx_dma_do_tasklet); =20 /* * Initialize the DMA channel and add it to the DMA engine channels --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 791B2435A9E for ; Mon, 10 Aug 2026 18:12:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385566; cv=none; b=OuROOzE4G+6NEt3nzY3CbuQ++cBjVrCCexAah32r36eqmxX9oJrHno3yt0wNQQnxcsHTftY5+ZkKTuz65cnYVsrhls+D1DheorP15INTb6RwAlZVEVCj57UENEnwX7HXqKHjDiYpT1WikHurMAOD7nO5MKO1uUjRLhAXTtW9QF8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385566; c=relaxed/simple; bh=LO4ilBoddGqA4AcFyKfdvCDOpEzI2RIf9g1sWHQgAT8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OXso15debqCdEdXU9i9o8/OKLG2qhK7j9lERwUsZpwJhGP8DUfEn/X5IL5XEoKRVTz2mpCbJxES8mV+k5jE1ToW7wYkDirY+Z2J0Y6BreBTVBIWFAf+xEibO5eJ1L/SzQyLoD27irSlD18+bJD7S35K/Rq4HK6ukevpscqJI5Ms= 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=Ghbizmnf; arc=none smtp.client-ip=209.85.216.53 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="Ghbizmnf" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-38e07ebd263so1569988a91.1 for ; Mon, 10 Aug 2026 11:12:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385565; x=1786990365; 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=E0fKTNpooBtTNW6bieTS4Sn1ltwivMMtcmL45dsUlns=; b=Ghbizmnfhz0+NP2tRXQzT8uJW8eSwzD/lMZv1x1SjJAJ23+Ege62bbojjUUjfEy+/E pOfGjQsiZCR4TDng1RjeqzfoQqk6JuWHDrVTZhpsk7lqz7PqcKFY+jkcezWBzYIH4Hta CfJECzM5iMcNVaBBgutzRpwznmmjZTWaDSRXe4mXDzHjCqD0KKWnNzazCokhgs5Ceaxq 1SqYmuZhbL5fFEUrwLfq2DMORK1fQqhr8higWiViHBTH27IclAB/9YSoe1wRrXNtFkIg hTJLlBTY9Ysaj9x9FglzPi6SI4Tsc5RPEULHRCwr85ibcWWH6Lp/Qww0tRLePdLTdn+c xoXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385565; x=1786990365; 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=E0fKTNpooBtTNW6bieTS4Sn1ltwivMMtcmL45dsUlns=; b=IzB8+8XcII7m1NPDh+ad7k/nbmA1AoHr8vUZNfNW8KT5MZ1ZAKxiqR+XgEK0Fcn8j6 miuXjuGg3wwRCN/cjKEiZnnkJyHJwZbolZb0JfL2vRoIMWzcC0qYKBDXocSCZq9RmCKF 79gn0IFSFEyEVgPPbQx0Un0lSBQwWbZHSfgHXqzHa7dh+BAX+91MY4p0SiFw5ZWkyMEA p2hMEHDwrheaRw3LCguyv9dYySEhqHUyslamodWIXFoGrKRfFvHJX/tX3+Fe/PnNTMfj glxT502722k2usQzeP6yvrVe1qFzn0vx62bdGlkPhszteeURirDvlvzzc+yLlQayTJIp 3wvg== X-Forwarded-Encrypted: i=1; AHgh+RraM5Tt4DcfPH7LeGOoP9jFKCseLE//rnc2a9soODyJ/9NN/Sl7cbfGMXFVq0rezH9o8O6vLpWwQloOt1E=@vger.kernel.org X-Gm-Message-State: AOJu0YwfeCVMnJsT6lfNK4DFDg50IeI5WPEzuihEr/Y0eiOH5edR5s59 lmB4e2QGntbMvH6fcF+SDhjSK55DskyEslDyR5hzd7YtoPQh00NA5XhlCzKAkQ== X-Gm-Gg: AR+sD10RQ7ju0Ztu/R6s+AwMKwMt3HzSvof8b9tHCPRFCsbeVKv1VWkmzrdJfVDq41+ 5T7NUHh96saVJ97N+VO1vhcZtZwulzGiBJtIuvQ0oEVi0Cvyy+rWN9KaNGc0Ietws6+lU+ef6nN mp3JB+6yekcck1sSU43rOsgW+YaSoWP4YOTTHoo2vOYojTWXr9PZFQxIkOHC9L6pst7FBjPb3hr u/jX35JsrfyARwiw2rQVHfidrwmKNBaQODYnUlAIgW71dxCG0FKD4LGfW38hcxvsODVUMTsXw5F F8JV2eoKfLA538LFvo27+kHnhbYdZVJZohjjl6lpFbplhgbgsb7mxwIrt0kaw9lyxlVGzHCtGC1 EXP1zL7kvdynLb2RPixDeEpV+U98pduu+RUvXJ/nuFbjKnzZpG8yrtrwIzFY+aZv7xYGrhHMcmE JSXoO5krW5XgcxSGf984fa34F8u0a8HVNNykLtMRI1CloXjqEo9Dd3ZkpH3MCwNFjqvHUbMX85p w== X-Received: by 2002:a17:90a:d444:b0:38f:240d:b857 with SMTP id 98e67ed59e1d1-3909d79f918mr32734942a91.2.1786385564472; Mon, 10 Aug 2026 11:12:44 -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.12.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:43 -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 , Laurent Pinchart , Michal Simek , linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 20/34] dmaengine: xilinx-dpdma: kill vchan BH on remove Date: Mon, 10 Aug 2026 11:09:21 -0700 Message-ID: <7185ee59e7bc0451f9ebb19178d3f76edee65658.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: quoted-printable Content-Type: text/plain; charset="utf-8" virt-dma now dispatches completion callbacks through per-channel BH work. Cancel that work when removing a channel, while retaining the driver's separate error-handling tasklet. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/xilinx/xilinx_dpdma.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/dma/xilinx/xilinx_dpdma.c b/drivers/dma/xilinx/xilinx_= dpdma.c index d9a3542c4531..7e147ea11368 100644 --- a/drivers/dma/xilinx/xilinx_dpdma.c +++ b/drivers/dma/xilinx/xilinx_dpdma.c @@ -1685,6 +1685,7 @@ static void xilinx_dpdma_chan_remove(struct xilinx_dp= dma_chan *chan) return; =20 tasklet_kill(&chan->err_task); + dmaengine_kill_bh(&chan->vchan.chan); list_del(&chan->vchan.chan.device_node); } =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (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 BE4BF435AB2 for ; Mon, 10 Aug 2026 18:12:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385574; cv=none; b=EjGiMHznPBo2sly/LSki0vOWzM+tL7rQI7LIm8Yve+qci44m5EbFyjJeJSZ+8FttZwGBc5xByoN/DQsaXTHiVpbiFxAWm1jfqQ1DgoM6bINqVC0lQHJqbrFAaixZYAE/+EKKAVvo2OCpnawP6H3AXhzpexFzv1FOSmcg+4jF0Xk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385574; c=relaxed/simple; bh=4uAUdRcTYsGvQc18W+1whd/BeJC4brhFOFvRVgZD2sE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q1lkJ8cM/QB3xpBzV0NHDJi1Lr280YNDiSc1ky+mqeb8qRdhxCvJtunEkOJ9Tu6AZ+NSFo9PuuVHb2FSynLftZJBZLm5l/tTwxeJ56d0Xu/mZfEtqCRhw73btDLmbzfJKznxc9xXz+P2veCpW5OkBUicCzt+Bv4si02Ut2fA4ck= 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=h7jZJEeF; arc=none smtp.client-ip=209.85.216.41 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="h7jZJEeF" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-38511175ad3so2085887a91.2 for ; Mon, 10 Aug 2026 11:12:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385572; x=1786990372; 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=+O3RP4khGolVisKEaJPPZ/5KR4V4I9tZWSXBQpVzFB0=; b=h7jZJEeFEZyFI3BXTxR59L8uy/XpF7RpzU4gJcuerop6yHNwSfHQ1icS81G0/fK+Xt 3wZWXjl6lSL3DvwlE5BMCRR+1Z2kSdL0D/fWKpQMlBq9jzRIC3tVHdHUib0VFJZEU6hr cgjZNy1L1boBFDqd5sc/VqwNdMy/MkN29D9wwM6smzDeK4eKoywMPN5HtLu6pbzCvvWA Q+qJP17/2u2ObAO1I/1nor7dXOtF4u8oA9o1yYgiAo9s+UiHPfSjUxFmu9MRJJMpLUmc RS9R5b025HIabNyIpWXbdLS3r9SHhtg7yYXv+pvEooouBNbbUT687Xcsd7xRvEfK1gib RWAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385572; x=1786990372; 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=+O3RP4khGolVisKEaJPPZ/5KR4V4I9tZWSXBQpVzFB0=; b=GkwmpLZHTbAeBm/SyIZtXnY9RIdtznE5AeqUenl4vi84wTzVFT0Zjy8NEtEXkd/B8F FjHzdSbgyRapYf+n3afQMAAlhm/ZgQYLfEK97eO1FIT5g5g2/dv24vxmgpBM6FgyBmkD 8ENX+8uM7xX+KqdUx/XsncAsrl+zyF6KICE//dJsFwT/qfCFTLoqeRSiIDVsUR+072e1 zJ/yIvwCJbIbetmA80qCKnEK5o61RsYs0/nxrIO6WISH/Kg9ZiUxYdPX7AnNtLuvxQuI U9QsUIurC1pzS9/1tUAArUObE3EiZ6cAPTq5nRiTGf2wBKJUtN3VZ4OSDGuw6pHMEad6 VERg== X-Forwarded-Encrypted: i=1; AHgh+Roe5hSg/z/kfrGuUkvmr84eNgRS+1+2MpO/Pk7ni1VadIEU8M7d6yYce7GSvcbXhHpKaMzTmr2YvmrcMIs=@vger.kernel.org X-Gm-Message-State: AOJu0YzVYZkpA5FuCV42/fckzPsoFdvo9d5WKk16LDhiAzgvJsaiPMBf 4/ayJooWtUzD0iWx8dWDcM8vpLqPGrJpMqUkuPwuzGqe9xPRczh1T01V X-Gm-Gg: AR+sD10odo6nrTCSs8tsQqVAGrBtnUSU277v/5SUu5A1ZnK3EdoxtNeI0Fqd0ZLOyzo FawUXioA9wC3rOGdbYex7VOQ8hg4cAhaSxLdZsV92oRik1/ZRfN6+OWcqA5lW53DHYOTSKDyKSv Fxltd3XA2AtDrthwZiGqHlDALMLL2/nvFj/gXVGICztXoEo7AMy9rbWqDbtpBWT9sytj0W2f0sZ uL9vsTnaPEBET5jFqA+SuBTqUI4Hso/FqSUqDA9q34n3J4DU78djE6a979kU9fEqgMMf8ALrEWF f/gpZqHwFLpWAVwOUJOX+7kPlQbpgu6nJ5dtBgscthifDisT9UllXDfPfmE+arkD/TDkO3y2yRE 99swSD6Yfl+Vs/lKFD8OapwHbPcOEXtkb0akPXKuT+ldUULOoOARa628zlQ5pTSw5GKDqSWsOuY pCeBl9m2N5wNesLMvOdq5lEZLm5oJLp0bsbccT9w1h2mLMB1Hv2j3HmpO1sYqauokbDOqfEN/uy w== X-Received: by 2002:a17:90b:4990:b0:38e:4114:d8c7 with SMTP id 98e67ed59e1d1-392cc6da1e6mr3394837a91.0.1786385571937; Mon, 10 Aug 2026 11:12:51 -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.12.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:51 -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 , Michal Simek , Abin Joseph , Sakari Ailus , linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 21/34] dmaengine: zynqmp-dma: switch completion tasklet to dmaengine BH Date: Mon, 10 Aug 2026 11:09:22 -0700 Message-ID: <56dce14420ecdf8665c0e03b5f3a42004d33eadd.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel tasklet with the shared dmaengine BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/xilinx/zynqmp_dma.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/dma/xilinx/zynqmp_dma.c b/drivers/dma/xilinx/zynqmp_dm= a.c index f6a812e49ddc..e396a35f0e0d 100644 --- a/drivers/dma/xilinx/zynqmp_dma.c +++ b/drivers/dma/xilinx/zynqmp_dma.c @@ -207,7 +207,6 @@ struct zynqmp_dma_desc_sw { * @dev: The dma device * @irq: Channel IRQ * @is_dmacoherent: Tells whether dma operations are coherent or not - * @tasklet: Cleanup work after irq * @idle : Channel status; * @desc_size: Size of the low level descriptor * @err: Channel has errors @@ -232,7 +231,6 @@ struct zynqmp_dma_chan { struct device *dev; int irq; bool is_dmacoherent; - struct tasklet_struct tasklet; bool idle; size_t desc_size; bool err; @@ -735,7 +733,7 @@ static irqreturn_t zynqmp_dma_irq_handler(int irq, void= *data) =20 writel(isr, chan->regs + ZYNQMP_DMA_ISR); if (status & ZYNQMP_DMA_INT_DONE) { - tasklet_schedule(&chan->tasklet); + dmaengine_schedule_bh(&chan->common); ret =3D IRQ_HANDLED; } =20 @@ -744,7 +742,7 @@ static irqreturn_t zynqmp_dma_irq_handler(int irq, void= *data) =20 if (status & ZYNQMP_DMA_INT_ERR) { chan->err =3D true; - tasklet_schedule(&chan->tasklet); + dmaengine_schedule_bh(&chan->common); dev_err(chan->dev, "Channel %p has errors\n", chan); ret =3D IRQ_HANDLED; } @@ -760,11 +758,12 @@ static irqreturn_t zynqmp_dma_irq_handler(int irq, vo= id *data) =20 /** * zynqmp_dma_do_tasklet - Schedule completion tasklet - * @t: Pointer to the ZynqMP DMA channel structure + * @c: Pointer to the ZynqMP DMA channel structure */ -static void zynqmp_dma_do_tasklet(struct tasklet_struct *t) +static void zynqmp_dma_do_tasklet(struct dma_chan *c) { - struct zynqmp_dma_chan *chan =3D from_tasklet(chan, t, tasklet); + struct zynqmp_dma_chan *chan =3D container_of(c, + struct zynqmp_dma_chan, common); u32 count; unsigned long irqflags; =20 @@ -815,7 +814,7 @@ static void zynqmp_dma_synchronize(struct dma_chan *dch= an) { struct zynqmp_dma_chan *chan =3D to_chan(dchan); =20 - tasklet_kill(&chan->tasklet); + dmaengine_kill_bh(&chan->common); } =20 /** @@ -887,7 +886,7 @@ static void zynqmp_dma_chan_remove(struct zynqmp_dma_ch= an *chan) =20 if (chan->irq) devm_free_irq(chan->zdev->dev, chan->irq, chan); - tasklet_kill(&chan->tasklet); + dmaengine_kill_bh(&chan->common); list_del(&chan->common.device_node); } =20 @@ -937,7 +936,7 @@ static int zynqmp_dma_chan_probe(struct zynqmp_dma_devi= ce *zdev, =20 chan->is_dmacoherent =3D of_property_read_bool(node, "dma-coherent"); zdev->chan =3D chan; - tasklet_setup(&chan->tasklet, zynqmp_dma_do_tasklet); + dmaengine_init_bh(&chan->common, zynqmp_dma_do_tasklet); spin_lock_init(&chan->lock); INIT_LIST_HEAD(&chan->active_list); INIT_LIST_HEAD(&chan->pending_list); --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 62A86435ED7 for ; Mon, 10 Aug 2026 18:12:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385577; cv=none; b=mVeIQDzNk+znFtbazQR0RHEnq4bF38ctsIoPJNhpp3Atw8Mcz2IeTD9kfDhA+b1+nHwujCHe1F5fhO8zYs+d6BpDfajVdCLGUqYuvYPyKq+Q5wTvIv6lStFiIAvlkfn1+jQBEP3wKvMWiekfISablmFUpYy8Tvjq+liL6vGUWWo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385577; c=relaxed/simple; bh=umUHF9rOXtQ8ecpvqrgfStmkI7x93dZzPqwKnFRIKpE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WCtD9ozgdwbEnCYdnxHeEARjh+Abr1SnOeoP4SGUN29xlExOdhUOVB2yy1NkgrsxSa3YOMj79QLcUmV8PkS8gwlzK4U8ObLOTIo6NgAHvvVAi3ssuaNYxfHh91eQ/GA3DHIkbomVdF95U08JyM8xDaUcQz0TLT2+rHlGDez33m4= 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=T9JZeWk4; arc=none smtp.client-ip=209.85.214.176 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="T9JZeWk4" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2cc61541f8cso2437165ad.0 for ; Mon, 10 Aug 2026 11:12:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385576; x=1786990376; 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=LamTcANYadoWUGaG2LRUytAWANVCX7wDn1ku3HxunHQ=; b=T9JZeWk4IpD4iTPx0CR23q8iFJy8F/Vad4RtdKzpTq5ar3eK8bptSs/tOo93zOoSfG mw2gAclcswR3eawCKAt5PqO7puuvSioex+tQ7X6RucLkdkEG2a7X1mtIXTgIV/NRTumj qP23nXd5CEa89JPvVII9FXXFC3/ZOFF5y8bNkVHoxQq4SiF4qwlty0dxbLCD40vhWckV lv6wRjwEFkno7DxaB085x5Y8CeKq7ZQMMyS2/mDCQ9q5hsq3meApTfAI0nC1iDyio2k8 q3pqYty7tGuEDmwUZ1CFKUw2DUnmG9IERYH0IpB0IPCZpUYOH6cBOf52FONXs49x2uh2 mbZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385576; x=1786990376; 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=LamTcANYadoWUGaG2LRUytAWANVCX7wDn1ku3HxunHQ=; b=siPMyH2hNDaos9SBj1UnG9/dURNPSG45Hw25rhPcPGD5OipvcDiSRPzQf6lMRsVd7n hWChF1VrR/2+FPWY+GOuPDVKwKNrTHx2po2NAyqEpLKr/ks6FoZTsdMWHNhKaAUmSrqo rD7usMsj89aaGsQ/s7ziBPyFJ9vH+JlRbz78m/W8nQ9nOsejtY8HLLfEX6irrluzqhUI Qow96HoMTZu11NRFKiA5wpUQI+2loBjl6rvKizjDcMetkKzR8jem+GVXMiFDfytqlY/0 POYZ1VyIUzJRbk3e5cJwjMz8VhdKxP4ppqwE691ZBuX1cuJ5k09QBHJneADyHD/LdmrV 2HKw== X-Forwarded-Encrypted: i=1; AHgh+RqjRjWrrHHH4UEa5dxE61Lc4kEkiHqo5MhtJJGnElNHnIatjVwK3G6DIt1RS7EQ5ulI9k0QWj8TqnvBhIo=@vger.kernel.org X-Gm-Message-State: AOJu0Yzx4qGyvgrXRLVCJxnycSL/G7T4dIYQdFv2I2akYTQ6dxgTzKKR uEYF4HeYI/dwGgsk7SPjIJ1XzDk01OcI2ZhKZq1rnLbQ/TZZFPOOygyK X-Gm-Gg: AR+sD11IiVXUrLVy4j6tyxKrAQUo4RhmJ/Qv+9cvyPEArFbBdUFbupeuRQ0C0AmM7z4 08LHOTTFBUnp88eCLq4Nk1lOL9NrsH/ajmXtx3rxjfgRSL3AN0Ov9GjRLmoKutL12hAs5a8QRI7 EjqdGhrGluyo+bJQSy9HF3nyHR/94Df/M6vXDlBTtXDovPpX/7of0oykPgeci1jpZBUv0JFwWfm OeYC1jBLMaxTycuXHQZ4LXvsSlsZmz3WnaLcrz3dep0EY9DHVKoX5jVMoxG2V41Q7Sj596O5YcG I9x5fC458z0WAG+wuYp1ILI3VvgZkEqK16Oh+tnvwsnsfVSgm3Z53fZy2CspfNl4+HV5JcUI7mm AN5/8SMaX9iKV8Ep02pbuhXdopOaopShJQdoL/Zi4KdKhCJR0+/mj4qv3bR7ZZM52v2dxg6rQ5T q4almT2GYR5wrNgmsyLpk0q0zXEzBCYC4XHAUkNw2RpoHbU8/NSDLrLB5qAfIQ8pk= X-Received: by 2002:a17:90b:4f84:b0:38e:5828:a446 with SMTP id 98e67ed59e1d1-392d620beb5mr122845a91.19.1786385575553; Mon, 10 Aug 2026 11:12:55 -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.12.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:55 -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 , Laxman Dewangan , Jon Hunter , Thierry Reding , linux-tegra@vger.kernel.org Subject: [PATCH v3 22/34] dmaengine: tegra20-apb: use channel BH helpers Date: Mon, 10 Aug 2026 11:09:23 -0700 Message-ID: <6d720011ba5a41fa48cf1926cd9060da22f89444.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: quoted-printable Content-Type: text/plain; charset="utf-8" Switch the per-channel tasklet to dmaengine_*_bh so completion handling runs through the shared per-channel deferral mechanism. Signed-off-by: Allen Pais --- drivers/dma/tegra20-apb-dma.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c index 640b8a218c9a..45995b82a133 100644 --- a/drivers/dma/tegra20-apb-dma.c +++ b/drivers/dma/tegra20-apb-dma.c @@ -194,9 +194,8 @@ struct tegra_dma_channel { struct list_head free_dma_desc; struct list_head cb_desc; =20 - /* ISR handler and tasklet for bottom half of isr handling */ + /* ISR handler for bottom-half processing */ dma_isr_handler isr_handler; - struct tasklet_struct tasklet; =20 /* Channel-slave specific configuration */ unsigned int slave_id; @@ -632,9 +631,10 @@ static void handle_cont_sngl_cycle_dma_done(struct teg= ra_dma_channel *tdc, } } =20 -static void tegra_dma_tasklet(struct tasklet_struct *t) +static void tegra_dma_tasklet(struct dma_chan *chan) { - struct tegra_dma_channel *tdc =3D from_tasklet(tdc, t, tasklet); + struct tegra_dma_channel *tdc =3D container_of(chan, struct tegra_dma_cha= nnel, + dma_chan); struct dmaengine_desc_callback cb; struct tegra_dma_desc *dma_desc; unsigned int cb_count; @@ -670,7 +670,7 @@ static irqreturn_t tegra_dma_isr(int irq, void *dev_id) if (status & TEGRA_APBDMA_STATUS_ISE_EOC) { tdc_write(tdc, TEGRA_APBDMA_CHAN_STATUS, status); tdc->isr_handler(tdc, false); - tasklet_schedule(&tdc->tasklet); + dmaengine_schedule_bh(&tdc->dma_chan); wake_up_all(&tdc->wq); spin_unlock(&tdc->lock); return IRQ_HANDLED; @@ -819,7 +819,7 @@ static void tegra_dma_synchronize(struct dma_chan *dc) */ wait_event(tdc->wq, tegra_dma_eoc_interrupt_deasserted(tdc)); =20 - tasklet_kill(&tdc->tasklet); + dmaengine_kill_bh(&tdc->dma_chan); =20 pm_runtime_put(tdc->tdma->dev); } @@ -1317,7 +1317,7 @@ static void tegra_dma_free_chan_resources(struct dma_= chan *dc) dev_dbg(tdc2dev(tdc), "Freeing channel %d\n", tdc->id); =20 tegra_dma_terminate_all(dc); - tasklet_kill(&tdc->tasklet); + dmaengine_kill_bh(&tdc->dma_chan); =20 list_splice_init(&tdc->pending_sg_req, &sg_req_list); list_splice_init(&tdc->free_sg_req, &sg_req_list); @@ -1511,7 +1511,7 @@ static int tegra_dma_probe(struct platform_device *pd= ev) tdc->id =3D i; tdc->slave_id =3D TEGRA_APBDMA_SLAVE_ID_INVALID; =20 - tasklet_setup(&tdc->tasklet, tegra_dma_tasklet); + dmaengine_init_bh(&tdc->dma_chan, tegra_dma_tasklet); spin_lock_init(&tdc->lock); init_waitqueue_head(&tdc->wq); =20 @@ -1617,7 +1617,7 @@ static int __maybe_unused tegra_dma_dev_suspend(struc= t device *dev) for (i =3D 0; i < tdma->chip_data->nr_channels; i++) { struct tegra_dma_channel *tdc =3D &tdma->channels[i]; =20 - tasklet_kill(&tdc->tasklet); + dmaengine_kill_bh(&tdc->dma_chan); =20 spin_lock_irqsave(&tdc->lock, flags); busy =3D tdc->busy; --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 97363435AA9 for ; Mon, 10 Aug 2026 18:13:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385582; cv=none; b=ZYqUSJL8tDXZ4BWWAo2jUSjzjDo/Z7oTI/ng9aM+5nPpofafFG1Sduy/usYPH/lKynTVKrPlrfzq6J6dLHtui+vuRz90Ce/grrG4KTpfjN5dciwjoPt13KIj5/1/6vp4e7/uR4KYxUPumdXL1cdC/V3qIFsqn2DOg6bxQbImTSU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385582; c=relaxed/simple; bh=E2tVVahiEfiSwa0DcP4d1RfJxRDEhPgKD8HLYsgugx4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GaK8s1vZmzuuVbu8V/LPlNCTmuCRVPVW4zm5NKhHE2XvBJ6CgHB9MBPKQrhywFfk/Wr6iWBl7yiNYAnUnGwWeWCeVJMolu+bdnqFTM/hLJh6gx0B6uozSOGi3a/7o+v8TH3gJAYyqe18nJWgiOpHWP+CkCDUJFnKB0CFL9AyMaM= 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=LHpiw8Os; arc=none smtp.client-ip=209.85.216.46 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="LHpiw8Os" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-38de840f2f0so1560433a91.0 for ; Mon, 10 Aug 2026 11:13:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385579; x=1786990379; 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=NJJYd1UvvpYlQGN46E9GIRgAsLwA3hYqM6XgiHJz9nQ=; b=LHpiw8Os1NrpRQLvwTrPTx03Ptucq5PTxV8mZ7JxFeinPL0+nNOlHm2YpOQ5IGjjLv A59RooxhSeTWOZ5j77wwmyu7tjxBwkUjzdN/O1Avo5RIAVFCsG/G4KW8BUBU87Ai6B4Z VaM7nlpYkQrbYmlQWgY/qUuLIGOLHT7ihtI11GzbZVfz0rw8UHih1zRpBmwYYKs/zTNB 8V6SW9J2HBJJuwwuR83AngPOMOXJqdOyS+JEB4Ubcd2QVS9M7iVaoYkuAq/V7LmKT5ED 6/sXn8ASeExiqHeoNZw7bMzwU6OKQgwa+B/gkmNo7AnIWqO10S2xPsPR+O364H2lX0ZP Z1Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385579; x=1786990379; 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=NJJYd1UvvpYlQGN46E9GIRgAsLwA3hYqM6XgiHJz9nQ=; b=fjYgOP6CR72kWrCIMJA+dJnuIkqytdzyYLjiMKN9jn6JhZ3vcW3yLYOgtCrK+EASAk xCGWg3Ky5jYxFjNNo/LDAxBBKe8g3XPTrEvKheYmYlQ89NmsdAArOaim0os20oTjTEah skxtieDbTlHHvHGIHh5wKWc/LK9coxf46lFYi+Vju2N92d11RPwifu2bRPL02x+jkiY0 7M6Z+Fr7EDGyDbx/CyPwZfggQc5QAS/j5lNI/DK7N9HBim9Oyk7fUeC54dQ6xanEgOlb sxS5Kp5ZQo10Wa/WK00PVr0e+EbwO8X2HLErk2aq9Z5J3irOgtnzDV8e99gUuI8GdXTA axQQ== X-Forwarded-Encrypted: i=1; AHgh+RoL1gvVlXEfyQdKoNw7GmPgW03DG9nlwxz4XDK9navL5HIBD5MGj7wLwjaQMUpLjn1zz6ytnSAoN5d+8DM=@vger.kernel.org X-Gm-Message-State: AOJu0YxoKTnM6aGnvn5/J08U6IjFOAi53DVsdLik7UlpYeLI7EmPNmOO 4Y24INOKF7KDP/vtU4oPT6ILg5BmwLuQGNGQulTbyPl/xwCuwxI2I1dp X-Gm-Gg: AR+sD11l7ckfXPS6VEPfBzhs/neVR4/NuRet23fZuuc0CFgFzKjTNa557atcn/l7Bih JayaFvfyCtv5sF+QIbfdnpSpCTq05Xvf13DdSLLOMXciH9N5mcwld3Dhx2e1vOFhGbgieUaIzPx ke4bcNmlQ5jqjD96Mx261eLqCRVg4alcXfDWfGg7kQarV7i8HNCfDoSNI8a9WB1PwvIZbjq/qSt Xrlp9f+nHpaRWWNN+zvw9tuiRCzmRZh+DDnNW4k8CZUkGVkAMnLIPmJHC4eINZC6o7kIPPxgwil WV3Af3pnmvLdUTq8PkWaXmCp1BGQHdc3dzNHtobplRuMo7dRYG788CsOkT7M0vYjQW9DgXScfd4 tekkX4JetG4IzEz2YOB2cZGA5YIH0wx7nE7fE6pzzakVlht8QK3hqTeTerieR1GNcXuZktG9ll6 oJIw0mxYg8ZDDpfx8/KqhH42cFBQrxu0ioPy8jRO4q4+qX8lumk1/7HVxXNdRvB/w= X-Received: by 2002:a17:90b:5350:b0:38f:1a2e:6e56 with SMTP id 98e67ed59e1d1-392822dcc89mr21756290a91.9.1786385579551; Mon, 10 Aug 2026 11:12:59 -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.12.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:12:58 -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 Subject: [PATCH v3 23/34] dmaengine: timb_dma: route callbacks via channel BH Date: Mon, 10 Aug 2026 11:09:24 -0700 Message-ID: <0950412c2bdfac1b4014903dada42f4aec055bb8.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: quoted-printable Content-Type: text/plain; charset="utf-8" Schedule per-channel BH work for completions so callbacks run through the dma_chan deferral mechanism while keeping the controller tasklet for IRQ handling. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/timb_dma.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/dma/timb_dma.c b/drivers/dma/timb_dma.c index 4fc5119854ec..5a2374aab02a 100644 --- a/drivers/dma/timb_dma.c +++ b/drivers/dma/timb_dma.c @@ -438,6 +438,8 @@ static void td_free_chan_resources(struct dma_chan *cha= n) =20 dev_dbg(chan2dev(chan), "%s: Entry\n", __func__); =20 + dmaengine_kill_bh(&td_chan->chan); + /* check that all descriptors are free */ BUG_ON(!list_empty(&td_chan->active_list)); BUG_ON(!list_empty(&td_chan->queue)); @@ -580,17 +582,25 @@ static void td_tasklet(struct tasklet_struct *t) for (i =3D 0; i < td->dma.chancnt; i++) if (ipr & (1 << i)) { struct timb_dma_chan *td_chan =3D td->channels + i; - spin_lock(&td_chan->lock); - __td_finish(td_chan); - if (!list_empty(&td_chan->queue)) - __td_start_next(td_chan); - spin_unlock(&td_chan->lock); + dmaengine_schedule_bh(&td_chan->chan); } =20 ier =3D __td_ier_mask(td); iowrite32(ier, td->membase + TIMBDMA_IER); } =20 +static void timb_dma_chan_bh(struct dma_chan *chan) +{ + struct timb_dma_chan *td_chan =3D container_of(chan, struct timb_dma_chan, + chan); + + spin_lock(&td_chan->lock); + __td_finish(td_chan); + if (!list_empty(&td_chan->queue)) + __td_start_next(td_chan); + spin_unlock(&td_chan->lock); +} + =20 static irqreturn_t td_irq(int irq, void *devid) { @@ -697,6 +707,7 @@ static int td_probe(struct platform_device *pdev) INIT_LIST_HEAD(&td_chan->active_list); INIT_LIST_HEAD(&td_chan->queue); INIT_LIST_HEAD(&td_chan->free_list); + dmaengine_init_bh(&td_chan->chan, timb_dma_chan_bh); =20 td_chan->descs =3D pchan->descriptors; td_chan->desc_elems =3D pchan->descriptor_elements; --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 E8B1F436BE0 for ; Mon, 10 Aug 2026 18:13:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385585; cv=none; b=c2MLk+dk4dvRAHADFHtnOO62XJyBtkFSndCtXOM0RnV6e9hB7FAieIFTTdVXkGp94QEqY6msg6OJoexQFiE7P0BGTTZOjIPd5hAGX/9TFCU2kdgk4HS2/XXPPULbSxwbakCPQK5y/PqbbX7i/rDOJ+HvHuBBr7p0lRBKlNcsF84= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385585; c=relaxed/simple; bh=3CFQUipgutG7zGOxIQwj3/4HlpUprdEllsKNk/2j+Aw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IamYFdoi2KSjaym14TGK9CJnM1k6MNtSLTBPfnm9BAoVWYVMiV+MrGN4pwXeSkhwtJXkPtjzjEDGW0qx1C2l0ZWsCKi3HpOP48Jpxe19sGcIu2TfdrLsxtPChImcqJqH2C63DuBza3w1HcM4HEj11PQQ5zKWEEsxfD3nGVmRSeg= 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=ajA01zET; arc=none smtp.client-ip=209.85.216.43 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="ajA01zET" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-39266382df6so2373217a91.3 for ; Mon, 10 Aug 2026 11:13:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385583; x=1786990383; 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=JZgKiUZo8rcVQaKfCZHOhgCQwcsfKBYG1i72H4MRQjQ=; b=ajA01zETtrUDFaZPJ0+xYiQDQV+UAt5FoqJLZxTjang0/tLJTHRfkX9ms/Vbnkg90H uNsAv5pxDI+Mxxb/3PRHkc2XscfDEkWD6UqCmGLkhX/niIRTAJiOjRJ8taofEZlIw3x/ nfKELcbiftc08o63R41SCU3FosMwm6K/L/Vd6LrBC9o7qJ9NrYQKSku5826kFtK0R3qY O0M+g3rxF/RDwoNAF4pntCsY3cyfTQQ4vEp561WcEfgZ+Mz2OZLVoFDyfNSWgt7Tkqio ITE5MS4zJWg7DPZx1ZmaHy3Vqb5r1Yt/rdFNahuj3d/cLNa0q92SWoTyEMFWYI66nuvk 56/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385583; x=1786990383; 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=JZgKiUZo8rcVQaKfCZHOhgCQwcsfKBYG1i72H4MRQjQ=; b=cPnraJ6MDLy3bgMi9d4e80u4vtscJzfwZhpq77UNPAPXfaSS31wUJvZQ9ePbbcH9uj B9VPhM5/N/q4MaXzxVhGEkZLOuZlLRE08ZqaUXV7gQgfLzdTgk8Si5y86ey7wVaoO1fn Uq8VIA1PookXIceSkZCm1uTAcEjb/2fZZlHnPNihahZeqFL8+EspE6jSDC3zetjEsTqg O2ASVnGsNj6CW9ySDxQPa7dk0m9JtmeMi/AJrcj8Z18Ra7tlelUVM1Z3frYgPxqg8y1S m/M01+K3JBOrMBvn8rMNDNx2pkO+Jxa8siV9S8kOBNHX+uNR2rusgwCjTkq2gc9teedm lhoQ== X-Forwarded-Encrypted: i=1; AHgh+RqPhTMjHWaT9GilQlKk2gnklsMZGMG4bJ0nmtr40SuYAipaiM7E+S36MvN5FPvv696I0UQk2zL36frH4u8=@vger.kernel.org X-Gm-Message-State: AOJu0YynuLMjOKv4NldruqmLXaAW2u1r37Mrnpyq4ygDBG2888nyjKOE ZH7InaBk9gvq6BvKcxcqscK+TL0ZdEqdkSduwJ/C2sxuPiuk5cL9oEuR X-Gm-Gg: AR+sD1117rMral69Y2imVuEA+bM5QxBstcxSFGtHDazPdMGISUDHE4qMbMtYoaPxV/b jm6P/BwBmB7v5S+gf1EcU40QzJjeYjopv3eEXCwIRc7gE0mLV8esKP8+O5I0yjIrGX3sxANUDd4 hqKmmCF5d74MYxURrGgebJY7HPP0GR1lN/rPaptJP/NxXHTy+zhfj/YwU465tX3+lMH0lyGcska xjiiOzTmDpc/3A1xP2H2qib+wnz1swm5LvkvCaW9zx6Ri8mEt72oqArZ9cEG4HUfJTq4DmFSV0H XCk1p+0vlWt9sXzgaVSCVtJbC392UBlDuugp3DZwyVL9aF73uSy6c6pRXb2d/HQ8roCIfSiw80d vgbtBXeNLGegSwOUeAw0Pz4gwBHA/kdtdxush8b0ATPhWzAh7z5ewpsXptAHbQNBp77a46MItY2 CTR/LW02V3AoCpFFhgmP5PVl9yGegZWkzVSVNrisJ1x49ZAESzlTwWCVszkQ4dfQE= X-Received: by 2002:a17:90b:2d44:b0:38e:63de:730d with SMTP id 98e67ed59e1d1-3903c598974mr46244449a91.3.1786385583218; Mon, 10 Aug 2026 11:13:03 -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.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:02 -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 Subject: [PATCH v3 24/34] dmaengine: txx9dmac: route callbacks via channel BH Date: Mon, 10 Aug 2026 11:09:25 -0700 Message-ID: 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: quoted-printable Content-Type: text/plain; charset="utf-8" Use the per-channel BH helpers for descriptor completion handling and schedule per-channel work from both channel and controller IRQ paths. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/txx9dmac.c | 12 ++++++------ drivers/dma/txx9dmac.h | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/dma/txx9dmac.c b/drivers/dma/txx9dmac.c index 05622b68a936..0547f645b51c 100644 --- a/drivers/dma/txx9dmac.c +++ b/drivers/dma/txx9dmac.c @@ -601,13 +601,13 @@ static void txx9dmac_scan_descriptors(struct txx9dmac= _chan *dc) } } =20 -static void txx9dmac_chan_tasklet(struct tasklet_struct *t) +static void txx9dmac_chan_tasklet(struct dma_chan *chan) { int irq; u32 csr; struct txx9dmac_chan *dc; =20 - dc =3D from_tasklet(dc, t, tasklet); + dc =3D container_of(chan, struct txx9dmac_chan, chan); csr =3D channel_readl(dc, CSR); dev_vdbg(chan2dev(&dc->chan), "tasklet: status=3D%x\n", csr); =20 @@ -628,7 +628,7 @@ static irqreturn_t txx9dmac_chan_interrupt(int irq, voi= d *dev_id) dev_vdbg(chan2dev(&dc->chan), "interrupt: status=3D%#x\n", channel_readl(dc, CSR)); =20 - tasklet_schedule(&dc->tasklet); + dmaengine_schedule_bh(&dc->chan); /* * Just disable the interrupts. We'll turn them back on in the * softirq handler. @@ -659,7 +659,7 @@ static void txx9dmac_tasklet(struct tasklet_struct *t) spin_lock(&dc->lock); if (csr & (TXX9_DMA_CSR_ABCHC | TXX9_DMA_CSR_NCHNC | TXX9_DMA_CSR_NTRNFC)) - txx9dmac_scan_descriptors(dc); + dmaengine_schedule_bh(&dc->chan); spin_unlock(&dc->lock); } } @@ -1113,7 +1113,7 @@ static int __init txx9dmac_chan_probe(struct platform= _device *pdev) irq =3D platform_get_irq(pdev, 0); if (irq < 0) return irq; - tasklet_setup(&dc->tasklet, txx9dmac_chan_tasklet); + dmaengine_init_bh(&dc->chan, txx9dmac_chan_tasklet); dc->irq =3D irq; err =3D devm_request_irq(&pdev->dev, dc->irq, txx9dmac_chan_interrupt, 0, dev_name(&pdev->dev), dc); @@ -1159,7 +1159,7 @@ static void txx9dmac_chan_remove(struct platform_devi= ce *pdev) dma_async_device_unregister(&dc->dma); if (dc->irq >=3D 0) { devm_free_irq(&pdev->dev, dc->irq, dc); - tasklet_kill(&dc->tasklet); + dmaengine_kill_bh(&dc->chan); } dc->ddev->chan[pdev->id % TXX9_DMA_MAX_NR_CHANNELS] =3D NULL; } diff --git a/drivers/dma/txx9dmac.h b/drivers/dma/txx9dmac.h index aa53eafb1519..f2abedb73d49 100644 --- a/drivers/dma/txx9dmac.h +++ b/drivers/dma/txx9dmac.h @@ -162,7 +162,6 @@ struct txx9dmac_chan { struct dma_device dma; struct txx9dmac_dev *ddev; void __iomem *ch_regs; - struct tasklet_struct tasklet; int irq; u32 ccr; =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 1534143745B for ; Mon, 10 Aug 2026 18:13:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385589; cv=none; b=F01kfTsjyFWWcHQQsCc4GE9us0ukhy8U4q87XcYNgkF4yiItD/W8pXftDDdByYyDMjr9f8hwVCAbHW4vfSXG8UBWcdYhJzqHMMANVXdJTxmG6y/AUmQWFBvXEHUVmCmybaypEdpmafVV+EkqnJicsciJjWT7+aYgdaQ7PpT/yiI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385589; c=relaxed/simple; bh=M2tjM9OM2jW7mIXJbUz9os6KWE748qrFtlcoYqTAwpc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KCOrQ9WNs+ISYSFPzcjKS3jOo19TthTTlPAEUTYzNgB6yC7Tf/bqnxgTOsmKiD9oevnMlX0on6R6GF2yXZAo9s4jmP3/DTf3DnfGIaHUgTtT6Mc15uJQFr4J5IEt4NBY1Wc/LhjFfk2g67yYsEBbIZJoOpa2ufMijvqgOF5ZjKo= 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=K62S3M/6; arc=none smtp.client-ip=209.85.216.52 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="K62S3M/6" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso2627246a91.2 for ; Mon, 10 Aug 2026 11:13:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385587; x=1786990387; 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=EJOBxc6+q+BiKolJErn0fFAfNOgr+mvYNTLLRlR2Uys=; b=K62S3M/6jCWDVy3xLTpzpHEc6ES0ufwBEKMyEc8qyfA4ENOhy+NNuae+ezikN780N7 MTbiaSsnSJwvEPZSzRv05QVtC8ZCm01ZvnebzrbNuRXTS+8wqkmJK4f1dMsHjbMEx+GN W0nJgWDexNOeEgvjuE6rxwONZf+ZDvKwN8kz0wkvh75D/THxDQqyqv9+wYlwoNcxXtNa adWJM+RAQC3CBpu9xQgGCpjRcGJ/BO48eAusPGglV20Vyx1eY5OGVF2n0BbEI7ed/jBu QhIb7p74mPD31o4uB2VPGVSaIE6N/ge+Z/cRpzQgeLK04WGlMhtNKOXDfmpcRIbHYngF jl3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385587; x=1786990387; 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=EJOBxc6+q+BiKolJErn0fFAfNOgr+mvYNTLLRlR2Uys=; b=WygjxzY1RXczBpo2YRS3SQWw4IXIxjiXJWVzfN/gagSUFb5KgxALD5PAMo9V2NSqo2 qniR1/kX7zkYFvMLRF7OS44hkAkwyeDn8yJGNr/2Tqa3i4fuMdw8Of6Rn7SCcYD1NVZB I78WRmHPwjh+JRsTuY5fjg4V5tv9xtXkZe8pqKCEURsspFIiNapPPfBEc0uwo13BzueY D0aNnjTyjNeaZDt//TL16/D5rwYK3TlU6i01N100Jwr56bq+rEGwSHE+X2TFGrGUm72e dbnOtNbuWH1YNLJsnrl1nwFXtqqgAk6Hcp5nE0Oxu/s7Dq2ecSNPRI1yLihKD4uJqkJV V09g== X-Forwarded-Encrypted: i=1; AHgh+RrgqGQ+jMiyTjq4T8+NHbSBkih9JA/fYi+48jX9uKTbjM2pipT7UTu1BESO/54tMU6E6A6uADUHklPd8/s=@vger.kernel.org X-Gm-Message-State: AOJu0Yxxs9A/nDLd+C4o9B2hIFoinZIu++Ckzm3E8XO1eCucsPVj7RnP E3Hd4wzbZPmH/Iq8yctSOnLdXDyEffQGh+s2gV9z+ady2vihH7XTIknc X-Gm-Gg: AR+sD122nGrVn+KkbYm8HLSQm6NhVGbxLZlYYVO/yeN7K/cLotLJQo/w3Zn6NpE2CSN DaWpgjna37EKMHnNdujaEjOJG6bLP/t/Eqea6d1Q7l7LBQrQHYnW/FPQd0mOJOBX7eB2H/0Kwaz 5r3HLYVTWrKbNfPhT1eAx4JrkR+iRe+Q3/fXTMlVeirOrUZAHzkDyqSgjJqGnzch7S35VbZ07Z3 0YH93oBEVWCvUmUKi75pmFUzTq2dXGlNOMcpJE0UeJaBDNKXj1/Lp1Es+nW2t1p8j+k8kmncLLi UHPiYDMaHVJZsUbrwPUBsHoDncPklXC5KWs25QuCU3GCVNvx1fFOXurob7FejNcXL1cS0iazBWT hNVMGOY9jTCTZmcDZrqJcryU1eBbvVwsO9x3upYqwf2d14AeaPgg4+kKnVi1S4AMtVaJdzyGKw0 /1AwMlsLtY/kOhXEumCmdlgL/gqOrGlAIyYR3FrAl8wTHjOqL/VrStP2WQKqvd1YqvCFHBsSeit Q== X-Received: by 2002:a17:90b:3d4e:b0:380:105f:8ffd with SMTP id 98e67ed59e1d1-392824b8b6bmr22135591a91.16.1786385587361; Mon, 10 Aug 2026 11:13:07 -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.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:06 -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 Subject: [PATCH v3 25/34] dmaengine: mv_xor_v2: use channel BH helpers Date: Mon, 10 Aug 2026 11:09:26 -0700 Message-ID: <7503158dca9b831cd8efafd78de3124c3cc7202f.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the device tasklet with the per-channel BH helper so descriptor callbacks run through dmaengine_*_bh. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/mv_xor_v2.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c index cad4d4fb51ac..14d563ec6bf0 100644 --- a/drivers/dma/mv_xor_v2.c +++ b/drivers/dma/mv_xor_v2.c @@ -139,7 +139,6 @@ struct mv_xor_v2_descriptor { * @reg_clk: reference to the 'reg' clock * @dma_base: memory mapped DMA register base * @glob_base: memory mapped global register base - * @irq_tasklet: tasklet used for IRQ handling call-backs * @free_sw_desc: linked list of free SW descriptors * @dmadev: dma device * @dmachan: dma channel @@ -158,7 +157,6 @@ struct mv_xor_v2_device { void __iomem *glob_base; struct clk *clk; struct clk *reg_clk; - struct tasklet_struct irq_tasklet; struct list_head free_sw_desc; struct dma_device dmadev; struct dma_chan dmachan; @@ -290,8 +288,8 @@ static irqreturn_t mv_xor_v2_interrupt_handler(int irq,= void *data) if (!ndescs) return IRQ_NONE; =20 - /* schedule a tasklet to handle descriptors callbacks */ - tasklet_schedule(&xor_dev->irq_tasklet); + /* schedule a bottom half to handle descriptors callbacks */ + dmaengine_schedule_bh(&xor_dev->dmachan); =20 return IRQ_HANDLED; } @@ -346,8 +344,8 @@ mv_xor_v2_prep_sw_desc(struct mv_xor_v2_device *xor_dev) =20 if (list_empty(&xor_dev->free_sw_desc)) { spin_unlock_bh(&xor_dev->lock); - /* schedule tasklet to free some descriptors */ - tasklet_schedule(&xor_dev->irq_tasklet); + /* schedule bottom half to free some descriptors */ + dmaengine_schedule_bh(&xor_dev->dmachan); return NULL; } =20 @@ -553,10 +551,10 @@ int mv_xor_v2_get_pending_params(struct mv_xor_v2_dev= ice *xor_dev, /* * handle the descriptors after HW process */ -static void mv_xor_v2_tasklet(struct tasklet_struct *t) +static void mv_xor_v2_tasklet(struct dma_chan *chan) { - struct mv_xor_v2_device *xor_dev =3D from_tasklet(xor_dev, t, - irq_tasklet); + struct mv_xor_v2_device *xor_dev =3D + container_of(chan, struct mv_xor_v2_device, dmachan); int pending_ptr, num_of_pending, i; struct mv_xor_v2_sw_desc *next_pending_sw_desc =3D NULL; =20 @@ -760,7 +758,7 @@ static int mv_xor_v2_probe(struct platform_device *pdev) if (ret) goto free_msi_irqs; =20 - tasklet_setup(&xor_dev->irq_tasklet, mv_xor_v2_tasklet); + dmaengine_init_bh(&xor_dev->dmachan, mv_xor_v2_tasklet); =20 xor_dev->desc_size =3D mv_xor_v2_set_desc_size(xor_dev); =20 @@ -869,7 +867,7 @@ static void mv_xor_v2_remove(struct platform_device *pd= ev) =20 platform_device_msi_free_irqs_all(&pdev->dev); =20 - tasklet_kill(&xor_dev->irq_tasklet); + dmaengine_kill_bh(&xor_dev->dmachan); } =20 #ifdef CONFIG_OF --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 79D92437461 for ; Mon, 10 Aug 2026 18:13:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385594; cv=none; b=YVLh1Rsa9ztbS/vmTtREHLianh9bVc96xJbKipsy6Ae1rhUDNM2t35Qko4jH1d65AdbVDEvLFperGQ3hGLfgQJGPAbIyAHA9F+r+4z7aKCnX0eo4rNNjmYmyGSLtswKY/bjazTSejb4jq7a58Te4vX03aPpURWf7sPJ9B4Tk+UQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385594; c=relaxed/simple; bh=yupeiOO8fmOL5Q45fGMYjdfJvYxjK9X0pwrsrA/jt2A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uNsq7YOcqg4ti89zz8G3moN4UJ7QYeL9dN+PreKgWPlphIv0/hM+YOUFld/F0ud7GX9auM7AdGBxcNkBV1E4u+avZCl6/iwF30qv1At5T6xat814sXslwX1keZm9FDIEsFEryGiYxrlN2fszQE27zeuO169SfpJcyR9gwHOCGAA= 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=CzGIFZ+I; arc=none smtp.client-ip=209.85.216.49 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="CzGIFZ+I" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-38e88b60121so1897925a91.3 for ; Mon, 10 Aug 2026 11:13:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385592; x=1786990392; 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=Y41rG9GD2vJLat9LGzFZQ5btVcwyl0a1Mv04++c5Gh8=; b=CzGIFZ+I3+Cqmd0ObF5GsBTDQE6LltWbTXOuUjYveQYhkbX+h7N9AQJHdGxCtkTzDk 0AcA18HifS2ZntaX+4PKrpeAFVqvYbaRT6kMQq+1WTtMFahtaAxUs750X1HSL9jyxM61 513odDPhP46GzwxxTjD2kG5m/6xG/6Yb/7sEJwjAfZKT5wNLf2EBeMtf+jSt+6MFUorD WKFNClJONWgCQXnh+IvJEM3xa0/NQxqC0dxc4sko7yjfXAHjT+33L+Ola1xz2hdXnbpE b0dyTCrfXZyG8WfLxkp2g8wGUloXCkbsPHhaLuG4uDLODXnJtc6yHxn4htOhWflrEBrt 65DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385592; x=1786990392; 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=Y41rG9GD2vJLat9LGzFZQ5btVcwyl0a1Mv04++c5Gh8=; b=ovk+1FE/cFnLt8SEG29ZggTkffjqRjY5tIEbrZ3nOBmcEsg7Ms4PPepQ7azR46k0Bm 50VU86tJRiKs4IyARnbhLNMgNQzCbymFdPT2PE8heon0WigWSHIUvpsosl5twNkYJfWW 2RcAE6Gn7q2OShcf9HiEpVgtoazU5xvzG+zOv05tlVtd50YrQ3l6yy0As2+Fgzfof/Yf IeGGfcGsvlSN4g9dmPRxBoJTkqPeVKkYRWE/zknPyF0b4OR2nEt5q5wx/Qymx8ltc5vy KnvGLoKOZ5pISVGDE0sY6nfHGGpvejY0VZXXUAvFWT6T53Ca5wJhg+AUzrbfomHhUrHs Ns5Q== X-Forwarded-Encrypted: i=1; AHgh+Rqkim61/ceiEUUHzNVfAnOmGeHhFDZAwjWaOj2P8alL/ozKeWwzGB3ev9D2o4E89/HTDNf7AczXBildeSU=@vger.kernel.org X-Gm-Message-State: AOJu0YxfScfIkwwSv9Qza0no8Tbe7CSOl2o7dGNYPEeEV3jrLpVh37Nd o76M9sowbfTRgu3w7d+5qW5SQblUu7V/5zrP1AwDCGZeGdKslbjX4diF X-Gm-Gg: AR+sD13Jz708XSB2eugjp8YD1drGe2DU4oQaa8DNH6q5RVsTvVHfnEsYo6SBDk81jMn rthpba05/SvEQF8N0sTJYJPRNYSDC7u0aCRbpBAwvn3PYTMm4SCC0Zp8qT+qQ5/585UuUv6VS1P zhACGxfRZTSyNIMl/Tcm98s1DufKo1fNoAMLTGb4zoy1LixzRcg9rAERtf682V5Y/TB3QWqkOkG yCJboQtFIzcjMVAHoDlmx5Mo5llHemPpLru8CUYCEkAu8g38jqmhEsI98F+e2TFva9hC6r8YFeN 8roggb1pbVJyOAktblZyG2wFzmV9VPZHc4PI/vSGHdLpvWft+z0H4BgMpRVb4U/U2lcxRE2+XN4 u0RNEa4wukOkOJTzltPk/T1wHTiykSLQlMszrZ06XDoCGRikTyM0KZKzeJ+wj+G0/y1+7YMECnf KKJ0t+xid6fwL3vPUuMNXs7VA8FU+nrrfgS4tj+y1Bd6MpY0YsZ+U4cMNXnUxURB8= X-Received: by 2002:a17:90b:2507:b0:38f:57f3:4dc6 with SMTP id 98e67ed59e1d1-392c068d70emr5545361a91.21.1786385591607; Mon, 10 Aug 2026 11:13:11 -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.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:11 -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 Subject: [PATCH v3 26/34] dmaengine: mpc512x: route callbacks via channel BH Date: Mon, 10 Aug 2026 11:09:27 -0700 Message-ID: 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: quoted-printable Content-Type: text/plain; charset="utf-8" Schedule per-channel BH work for completions and process callbacks there, leaving the controller tasklet for IRQ/error handling. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/mpc512x_dma.c | 74 +++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/drivers/dma/mpc512x_dma.c b/drivers/dma/mpc512x_dma.c index 0adc8e01057e..19e0b2f1b2aa 100644 --- a/drivers/dma/mpc512x_dma.c +++ b/drivers/dma/mpc512x_dma.c @@ -372,45 +372,47 @@ static irqreturn_t mpc_dma_irq(int irq, void *data) return IRQ_HANDLED; } =20 -/* process completed descriptors */ -static void mpc_dma_process_completed(struct mpc_dma *mdma) +static void mpc_dma_process_chan_completed(struct mpc_dma_chan *mchan) { dma_cookie_t last_cookie =3D 0; - struct mpc_dma_chan *mchan; struct mpc_dma_desc *mdesc; struct dma_async_tx_descriptor *desc; unsigned long flags; LIST_HEAD(list); - int i; =20 - for (i =3D 0; i < mdma->dma.chancnt; i++) { - mchan =3D &mdma->channels[i]; + /* Get all completed descriptors */ + spin_lock_irqsave(&mchan->lock, flags); + if (!list_empty(&mchan->completed)) + list_splice_tail_init(&mchan->completed, &list); + spin_unlock_irqrestore(&mchan->lock, flags); =20 - /* Get all completed descriptors */ - spin_lock_irqsave(&mchan->lock, flags); - if (!list_empty(&mchan->completed)) - list_splice_tail_init(&mchan->completed, &list); - spin_unlock_irqrestore(&mchan->lock, flags); + if (list_empty(&list)) + return; =20 - if (list_empty(&list)) - continue; + /* Execute callbacks and run dependencies */ + list_for_each_entry(mdesc, &list, node) { + desc =3D &mdesc->desc; =20 - /* Execute callbacks and run dependencies */ - list_for_each_entry(mdesc, &list, node) { - desc =3D &mdesc->desc; + dmaengine_desc_get_callback_invoke(desc, NULL); =20 - dmaengine_desc_get_callback_invoke(desc, NULL); + last_cookie =3D desc->cookie; + dma_run_dependencies(desc); + } =20 - last_cookie =3D desc->cookie; - dma_run_dependencies(desc); - } + /* Free descriptors */ + spin_lock_irqsave(&mchan->lock, flags); + list_splice_tail_init(&list, &mchan->free); + mchan->chan.completed_cookie =3D last_cookie; + spin_unlock_irqrestore(&mchan->lock, flags); +} =20 - /* Free descriptors */ - spin_lock_irqsave(&mchan->lock, flags); - list_splice_tail_init(&list, &mchan->free); - mchan->chan.completed_cookie =3D last_cookie; - spin_unlock_irqrestore(&mchan->lock, flags); - } +/* process completed descriptors */ +static void mpc_dma_process_completed(struct mpc_dma *mdma) +{ + int i; + + for (i =3D 0; i < mdma->dma.chancnt; i++) + mpc_dma_process_chan_completed(&mdma->channels[i]); } =20 /* DMA Tasklet */ @@ -419,6 +421,7 @@ static void mpc_dma_tasklet(struct tasklet_struct *t) struct mpc_dma *mdma =3D from_tasklet(mdma, t, tasklet); unsigned long flags; uint es; + int i; =20 spin_lock_irqsave(&mdma->error_status_lock, flags); es =3D mdma->error_status; @@ -453,7 +456,21 @@ static void mpc_dma_tasklet(struct tasklet_struct *t) dev_err(mdma->dma.dev, "- Destination Bus Error\n"); } =20 - mpc_dma_process_completed(mdma); + for (i =3D 0; i < mdma->dma.chancnt; i++) { + struct mpc_dma_chan *mchan =3D &mdma->channels[i]; + + spin_lock_irqsave(&mchan->lock, flags); + if (!list_empty(&mchan->completed)) + dmaengine_schedule_bh(&mchan->chan); + spin_unlock_irqrestore(&mchan->lock, flags); + } +} + +static void mpc_dma_chan_bh(struct dma_chan *chan) +{ + struct mpc_dma_chan *mchan =3D dma_chan_to_mpc_dma_chan(chan); + + mpc_dma_process_chan_completed(mchan); } =20 /* Submit descriptor to hardware */ @@ -551,6 +568,8 @@ static void mpc_dma_free_chan_resources(struct dma_chan= *chan) unsigned long flags; LIST_HEAD(descs); =20 + dmaengine_kill_bh(&mchan->chan); + spin_lock_irqsave(&mchan->lock, flags); =20 /* Channel must be idle */ @@ -1007,6 +1026,7 @@ static int mpc_dma_probe(struct platform_device *op) INIT_LIST_HEAD(&mchan->completed); =20 spin_lock_init(&mchan->lock); + dmaengine_init_bh(&mchan->chan, mpc_dma_chan_bh); list_add_tail(&mchan->chan.device_node, &dma->channels); } =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 04864435526 for ; Mon, 10 Aug 2026 18:13:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385598; cv=none; b=sLfzgigslq47QlTCJISMSfXCy7XcJazkBL9HwP+hSA6LuOg+dFxkj6+du+yieBUXIgkgb1XsP+J/6BP2Fam+j0blpxsC71Bf8IHG3KEh6n4/UZJAdPcYs2w3z7kcVtZFNwNtzhAA3ptn87jNb50TwXHDgkVBTAAEYrkQRmZedYQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385598; c=relaxed/simple; bh=3vlw48vVVYMDsIfSnw51xnY2eWgPtcDwS/T3cZE/dy8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iDQwnrN43vyklDwHI+Lj+zn/rmDrdZRzA/2/acusBpVAHqGpesVhqcP5fDiGd16vUoZXVRe3ZmQF/qeBZFvbZarDA9eoWv0xnvd910ktFXJ7DhS2hLOUbP4xOmMLPPjObpfCEZKk/EoFk7+l8KocVg3j+doNAHyph5aw+R1rvxQ= 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=bCHhbj8b; arc=none smtp.client-ip=209.85.216.48 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="bCHhbj8b" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-38dfe7eb825so1849552a91.0 for ; Mon, 10 Aug 2026 11:13:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385596; x=1786990396; 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=WujUIY65y0KmxCJIWe2PeDrhDspA8W9feQaFaQQ0mOg=; b=bCHhbj8bZhIBloQtuZeShK4J2b+KOCMH65h1FUx3ZlvZ7A5wpob5wAuNEJjtcBTZ6O gv6fj6yVZz1EhdKTJ2MkOsgzEFHlQBLKN2FjfR9diepuch5iYjnlD/iKalMh6c58Ka5W g+kOJGB566k0rpT+2zcaBCjCauULRi6X/hxJUvDYWI2VCQGFsQ6pimddFGHGNL0EAIf3 Zr+TpeJcO76uKzeGnZA5nCRiZY2S7UIBKLc/N2EUIUbDnu6L6L2PyWJWbddVksgnkFXi +85a4SESG4dVC+XcJZdOgGYEWllPhqoxYElTBx90AI4yg28m+66BMPOWWPCMk79WKKHl Q2RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385596; x=1786990396; 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=WujUIY65y0KmxCJIWe2PeDrhDspA8W9feQaFaQQ0mOg=; b=ljFiy1ydVwkdJPm0Rsk632B/STlM0KtqhdjHOoARja2ebRV6rz/H0qNlscSWonqCCm c091GlsIXIihKz81V3FSv6o93tRF1XtUQXywk3QWE/46X3thitaKPsot5bEwrDWEs0bA NsqSaFqX76B4oZ6pEUa+gj+WpMUtizS5TWUPkjEbaX70C5vmAAiXvRbUnXMgjcpUG27b qoXjreaSeoy0FRPoHSQdNHTPxLWqNrCXWJaudkZeL+E9FEL6awYPsM/fq7B8ImXeIcbv GbM4MvV6MrY6x/bbYtQ4SzbyM3wm3wksK62UIboPW3ZoNp1eGiu21qHjzM71wHBRja5K Aurg== X-Forwarded-Encrypted: i=1; AHgh+RpT55CBOtSHOJDZLsga2YV35Da02uF3s0nXs6M0xT9keHcGum5jTq6vTtK8h9dhbjdCvVwUAbM2tSD86Ik=@vger.kernel.org X-Gm-Message-State: AOJu0YyoLySJKmLlvuUTUnTnR6GrpU9aQOXWk5rKlVqebRPHkXOHD/10 wad4B9Xnt4965w5+JqhnPbrkOvj4Ba28QHnE6IA9Vl7HQt/aR0zI7gYj X-Gm-Gg: AR+sD110v2XsavfQGWvg9xSVD+Ns4UcLLln5pBZi9dU/1naoVDbdfxe9qQMVVnemi9B 1v4t6s153k+FlOmlWa0LpbCFhia25gf2mBQmVK9gK7y3GpXdgYVxi7/U3p6V4XSquK9kOrCeC4C tjdjz32GD5G2aGmm1P1zaLSD7nvEpgXAC0uQbcwo5V5/f7ffMQWZ+YUpWDljBg3KSYPokEf/yya i9+KB9eUT1o9C+bj5JrYTCNxwd0eyHkwQWmII26G9CEsQLP/CUnkdqmm5blt1+5WJWxisc2/5cX DiMuYCzD8KvhGffHRoOyKRxjeu7LZaOJrW/PBWTSzaY6FZdIprReNfrkPKLPo5oF2kf00Y2UmQh geAHzYJ+Uzv+UD2SvbBBOpNK2cQIeNQMHejH0l+7hJcI/FjyBBbDm6CL2N+crMZ8GiXTjBuczZ6 QojedM4KWEh3fpgmO/TT+r9fOPZNrh0rtQhc1pRmF8hkJkpHDMfK1VEQ6uZY4kEkk= X-Received: by 2002:a17:90b:2242:b0:37f:c28a:de61 with SMTP id 98e67ed59e1d1-3909d8e4c62mr27816069a91.17.1786385596135; Mon, 10 Aug 2026 11:13:16 -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.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:15 -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 , Logan Gunthorpe Subject: [PATCH v3 27/34] dmaengine: plx_dma: use channel BH helpers Date: Mon, 10 Aug 2026 11:09:28 -0700 Message-ID: <9b931c21648cdee0e5db08642861b532b6b040d5.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the device tasklet with the per-channel BH helper so completion callbacks run via dmaengine_*_bh. Signed-off-by: Allen Pais Reviewed-by: Logan Gunthorpe Reviewed-by: Frank Li --- drivers/dma/plx_dma.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/dma/plx_dma.c b/drivers/dma/plx_dma.c index 84941a918b01..a9a798c54ef1 100644 --- a/drivers/dma/plx_dma.c +++ b/drivers/dma/plx_dma.c @@ -105,7 +105,6 @@ struct plx_dma_dev { struct dma_chan dma_chan; struct pci_dev __rcu *pdev; void __iomem *bar; - struct tasklet_struct desc_task; =20 spinlock_t ring_lock; bool ring_active; @@ -241,9 +240,10 @@ static void plx_dma_stop(struct plx_dma_dev *plxdev) rcu_read_unlock(); } =20 -static void plx_dma_desc_task(struct tasklet_struct *t) +static void plx_dma_desc_task(struct dma_chan *chan) { - struct plx_dma_dev *plxdev =3D from_tasklet(plxdev, t, desc_task); + struct plx_dma_dev *plxdev =3D container_of(chan, struct plx_dma_dev, + dma_chan); =20 plx_dma_process_desc(plxdev); } @@ -366,7 +366,7 @@ static irqreturn_t plx_dma_isr(int irq, void *devid) return IRQ_NONE; =20 if (status & PLX_REG_INTR_STATUS_DESC_DONE && plxdev->ring_active) - tasklet_schedule(&plxdev->desc_task); + dmaengine_schedule_bh(&plxdev->dma_chan); =20 writew(status, plxdev->bar + PLX_REG_INTR_STATUS); =20 @@ -471,7 +471,7 @@ static void plx_dma_free_chan_resources(struct dma_chan= *chan) if (irq > 0) synchronize_irq(irq); =20 - tasklet_kill(&plxdev->desc_task); + dmaengine_kill_bh(&plxdev->dma_chan); =20 plx_dma_abort_desc(plxdev); =20 @@ -510,7 +510,7 @@ static int plx_dma_create(struct pci_dev *pdev) goto free_plx; =20 spin_lock_init(&plxdev->ring_lock); - tasklet_setup(&plxdev->desc_task, plx_dma_desc_task); + dmaengine_init_bh(&plxdev->dma_chan, plx_dma_desc_task); =20 RCU_INIT_POINTER(plxdev->pdev, pdev); plxdev->bar =3D pcim_iomap_table(pdev)[0]; --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 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: quoted-printable Content-Type: text/plain; charset="utf-8" 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_struc= t *t) if (chan->retries <=3D 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 =3D DMA_TRANS_ABORTED; + desc->vdesc.tx_result.residue =3D desc->xfer_size; + vchan_cookie_complete(&desc->vdesc); + + chan->desc =3D 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); } =20 if (pdev->dev.of_node) --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 80D6443552C for ; Mon, 10 Aug 2026 18:13:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385603; cv=none; b=lBu8wqWVz+eV753G1GUZk+1M82F5seVPPRd7aHKrD5w6UFzWTfrA4jSQCpzI7c3l2kTm/1JJ1ZNdtoB4OGJzXOsoP6g48qLowOTTj9z8/1NJQMTnM33rFWEy4Ahlns0j27OEFcJ7U6XSWTt5LIJyYk1+8j/fDy0ZGu5IrXb6kOA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385603; c=relaxed/simple; bh=NS7zVADDIeH4+0PZ9vorAkwgPGmrV9A7bzuyDQWXZ3Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JNog+S8rIrmO9ZErClWK+TBXFxqloxevEDjPvohf1Ih/wM483Ez5VbUje0qc8z9c8mhRX2EWcPdC1tw/wizsEt3/7rLMwh8wmHFmgspUkkX6IJqneMD5A7mDgB1fdlVpkrnynyBCs9xzCZ0GIOKTA2lw1fzkOQURWqcIL/zxhDE= 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=OmUq5x5r; arc=none smtp.client-ip=209.85.216.46 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="OmUq5x5r" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-38fdeaed181so2805550a91.1 for ; Mon, 10 Aug 2026 11:13:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385602; x=1786990402; 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=Fg5NKedmOIsgVxQe+J4+vrtNJwQ8IkxdnAv9taWG/wA=; b=OmUq5x5r6Znm+dL0VYFD/iPjvlvqo/xA6UjK9z/TER2b86tf6LDYKa5qeylFFqNEm9 jLyjyZw5lAc0DwDo6z37oAPmKV7Kkx24tPuhxkiBshtAmVEBRd4d1apbLNAGoZV7jKFs OtMZISNa5mB3dtN+Sg0MjnHAABn0aWYtdNdcK9E+q6I0me7Y6XtkAgmlQQpCO83Dmpla GZjeN32KjTD/5pNee3h60B7gUn0z/IfLLiedDTS/ku9A6kXSJkZq6KaBw1vhcYEIVWf8 7X8C4pGjK53OGeMJLhMQMHUWdOqSPxmuH6WpcgihS0X0l0LzDyS3TzotTq0z1bF6Ib5z 1few== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385602; x=1786990402; 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=Fg5NKedmOIsgVxQe+J4+vrtNJwQ8IkxdnAv9taWG/wA=; b=L7Ppgd+vGgGX05spddGeHml2XBJiLw9PFHa3OAm8yGwFphTb9IUw4I2rvf5fMwvSGl EOa9D/iU5YFxdZIcdgsdhRQ6Zwncf3gHxGw33USOC8JEX8z9SoTHx6nZA9iG1IMAQQBN TX5K5tNFf5GpGs8Lg9TYU/GxYZ/bMelwXerJ95RkUxHm0VaankeI7bdNt0A7e5CRfwqP 40ELav+iNhzU9PuY5boDo8EpXO8fWRRIhzbJ5CSQa8rlXqghjPIcYIqcTGUsmD/Lnyjl kQjZCKghYGCsmzACDC0c8o8sfcIaFdy2lc0yPcDd98bd9d9M7wHkmY5S7an2iQckz6Np DN+Q== X-Forwarded-Encrypted: i=1; AHgh+RrTmDKoKR52PAEQBCfVHkiTjLkVfQsbS+Dpc9v0ptcB57bt4wgyH2zxKHbzuHbZxIulmihzcFmeRaNkYi4=@vger.kernel.org X-Gm-Message-State: AOJu0Ywd44R5QiqXT12vz0ribHMcWdoBtFDuURkhzeF7UyKWBc6kqyIq 9g7N29pAXMtCR+w4f9FOZbSWMa6V8yvNZKB/0EUzWMYZTXeWQZeTtINN X-Gm-Gg: AR+sD11MonuZ8QgPczjYmDfc8Topbp6AHfASwnjmc07LxPDqq2qniW7KiZRP9B4elXO L70PeeehwFx1RQTOlU+Q37w6t3EVwxOToGgTZ1S8/y9Z39BvfreSIaCKcPChIbGGswXxkjxqXyC yOO/CbzOWUd7PtuETVG6shTRhS0xqWgaUtpOhho6qrQcAkFw+9e5lI3PovrT6V6lJ673AViErjC bGTBcQtC6d5ighhV5a1PMIoOTrHEDyIPJE426bMDZF5DoCq7jfp550ecJqbS2tS2yqAGyngs/+i V1N5Y4DFyBra9VCQ2s7vnuZyYWzlyMxjOp/sTGqpW5wpUKSBsWNZlA2epZMEQRi3XGtP+XqumyN cWma6BoY2WC2Oi1iO/JVnqTG0fOGMRSahhsQmkvARQ1jluDJ52NkwCdEgdPVoXX06aNBFHms3yM 8b1cGEXmozdRzATpwu90MAg6G2QZvcHMLfb6+qZ7BXz1wx/WuxdH5/dM2mRBSCqCE= X-Received: by 2002:a17:90b:2549:b0:38e:1497:af5b with SMTP id 98e67ed59e1d1-392cc936bd6mr3450550a91.1.1786385601905; Mon, 10 Aug 2026 11:13:21 -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.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:21 -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 Subject: [PATCH v3 29/34] dmaengine: pl330: route callbacks via channel BH Date: Mon, 10 Aug 2026 11:09:30 -0700 Message-ID: <98b9e66a1ac9f866f36ecc60d287e479bae22f60.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: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the per-channel tasklet to dmaengine_*_bh while keeping the controller tasklet for non-callback events. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/pl330.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 25ba84b18704..1b6069ba0d5e 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -417,9 +417,6 @@ enum desc_status { }; =20 struct dma_pl330_chan { - /* Schedule desc completion */ - struct tasklet_struct task; - /* DMA-Engine Channel */ struct dma_chan chan; =20 @@ -1574,7 +1571,7 @@ static void dma_pl330_rqcb(struct dma_pl330_desc *des= c, enum pl330_op_err err) =20 spin_unlock_irqrestore(&pch->lock, flags); =20 - tasklet_schedule(&pch->task); + dmaengine_schedule_bh(&pch->chan); } =20 static void pl330_dotask(struct tasklet_struct *t) @@ -2060,14 +2057,15 @@ static inline void fill_queue(struct dma_pl330_chan= *pch) desc->status =3D DONE; dev_err(pch->dmac->ddma.dev, "%s:%d Bad Desc(%d)\n", __func__, __LINE__, desc->txd.cookie); - tasklet_schedule(&pch->task); + dmaengine_schedule_bh(&pch->chan); } } } =20 -static void pl330_tasklet(struct tasklet_struct *t) +static void pl330_tasklet(struct dma_chan *chan) { - struct dma_pl330_chan *pch =3D from_tasklet(pch, t, task); + struct dma_pl330_chan *pch =3D container_of(chan, struct dma_pl330_chan, + chan); struct dma_pl330_desc *desc, *_dt; unsigned long flags; bool power_down =3D false; @@ -2173,7 +2171,7 @@ static int pl330_alloc_chan_resources(struct dma_chan= *chan) return -ENOMEM; } =20 - tasklet_setup(&pch->task, pl330_tasklet); + dmaengine_init_bh(&pch->chan, pl330_tasklet); =20 spin_unlock_irqrestore(&pl330->lock, flags); =20 @@ -2354,7 +2352,7 @@ static void pl330_free_chan_resources(struct dma_chan= *chan) struct pl330_dmac *pl330 =3D pch->dmac; unsigned long flags; =20 - tasklet_kill(&pch->task); + dmaengine_kill_bh(&pch->chan); =20 pm_runtime_get_sync(pch->dmac->ddma.dev); spin_lock_irqsave(&pl330->lock, flags); @@ -2490,7 +2488,7 @@ static void pl330_issue_pending(struct dma_chan *chan) list_splice_tail_init(&pch->submitted_list, &pch->work_list); spin_unlock_irqrestore(&pch->lock, flags); =20 - pl330_tasklet(&pch->task); + pl330_tasklet(&pch->chan); } =20 /* --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 43A51435529 for ; Mon, 10 Aug 2026 18:13:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385607; cv=none; b=DBu4o3R8dCKkgUuIbgZrBXvPuE96Y0Ybanx9qfxOyURQAZKotPbSm2/nbfkhlLO1mPEq+D48h4Vq1rvt4kRSxAg7QkmcuT11HxNNJdVOScDkRoL0T9YZtvT4aNR+tw3icNjtGlZcPV3m//rp2U2GgQZwqln0INZgVkXwlt/k6uE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385607; c=relaxed/simple; bh=2nuh6Z1Kkq14n9+zhbeh9dCMiubMvdPS+JVbv3NKu2w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ToQHxzASwjzM/Rsb4e3Q30VS2G6EVKx19620gpE5N/jnjS82X5s8GhWh5NvzyVTCJpRPZZRQRvvj7xjXiYUiifmaVQDf1WNFCL+MM06rutRVYsTEBGmU4p0Gtze1JEBaFbkPJ/reG/lHh3ZrwvxY9DqejRKVBSo8sv8EYGDsBeA= 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=m07gKeNe; arc=none smtp.client-ip=209.85.216.46 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="m07gKeNe" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-3811f512167so3132498a91.3 for ; Mon, 10 Aug 2026 11:13:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385605; x=1786990405; 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=9we2iJf7L3DYPmN/0K3SxX0/8nMk4gHEEjHlz8llkHE=; b=m07gKeNeUtGr4A3NcYjlYRiJHTTLua6CrvFnA4/xIOF7YXFejreoS7r19zEzKGLBcg 3Tmu7ywSQDgnzv1U8+Mp8Dl50wKOGnR/GPuHvGkLLrrYD1AggPmntbhgSzOxdYt6CjPf gQcBRzWLLwmmVe0KuF5gSRHK2kywIklnnnjcFLGq+f329+Zfp+Oe7YFQcWEQZVmXwqGY p9j+jmhv+tPdPq/CQkfvSb0AJuXzUH7xl4jFTmGKc1vVvt2/jMQq3Tfrlhc8qEuzU11p BlmWFKSfaQS0Ht8aNAZG1YdsIjbVVSTEkC0iY6nVOZpnvxYU9SVSQYZgauUGmcbc5YqO HcJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385606; x=1786990406; 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=9we2iJf7L3DYPmN/0K3SxX0/8nMk4gHEEjHlz8llkHE=; b=LozBDjGJQ1WJU6AtGUZ13dN4g64ZruZmMEmunYNJ7tPD5LqC9QqRiDZNV8ZrJX4EUj NAXx6nZbogjfcAQ/1HlSkIsZK4Vwmj9OWzqfXMzlnnRb7/4YqHXIMKuS2OLYOuYzwBNf WUsY5Q/7BYeaP/LQ7eWeiP5CA31wB5RyKKC49jD9khG+tjW9iF8SoIJVwvnmgPsJg2Ay q7z1f16I7odiw70wn+WWKcLa/lB0WowOvAYZN4ikAO/NSc4iRy913S6ptMtuGcyas6n4 quNejb9eBwFZsNthChi/FYyJFZwNmpRcfg9QFi8HdKvKXlgNXPcbS2/S4loyB05djMv2 UIvQ== X-Forwarded-Encrypted: i=1; AHgh+RoRgAzSIkS9IqNV9ORmlNuqgZp1yuOYdYbi8W+RcN6HaKIiTA2XLyPIEh/geYsJLmEa6ScEOnpIymkjr40=@vger.kernel.org X-Gm-Message-State: AOJu0YzaZygdCGJkex2a+lJiwX6gGOTJLprJ7czvgT3oCLPmEHJNWor8 DZtfxGWWstCzP/O4di/W2GqG97rup6kkFxhMhMIVgbgBOUQq9IRe6O3N X-Gm-Gg: AR+sD12Pt0bPgPsR0SJ8JYJ4CEzb1+lrvbbNZTYO03p0HeZQ6y+oMTBjkiGk0IkimC9 J+dCZBYueypI8nSLy0UdxnKSUg/AJPQoWAWB4JhuZtTsgIV/SyBXwxLrdeSZjFToRbV9bNODIM/ +0/ItnBep1jTMlzvtgaUdz4Rkhmfyxdtm+nelKtN/cUwW/wZUdj9wx66A3ETSw0HUdGvCxTCTqC 4fT8vpBNSOpxMEHHZ4mSXLKbBXNE11cpRXXjLyrjP9SulHqeur/nrEF4mP3/77nLDfcn6pDixhb OEMlL6zgZ9gkdfGuTwq0z+6tI7Coc6VMEm2k9u5SCtVD0NjmNXN19faQ2eFbgRYrsxJHyD4XFHv xL0KVaTySP3isM3IgEO5eLBy5MaTePescR/NOCzbYFPBpC+xlJf7tyKjJlp7RyUR6FX8+lihays 0noFLtYn+OZanh14eRBBfWnaVX3pIF96/Hxp0ig4Gmrlk44n1cd07RiRj1HJzOdLw= X-Received: by 2002:a17:90b:3bd0:b0:37f:c97a:939f with SMTP id 98e67ed59e1d1-392cc993355mr3293962a91.7.1786385605506; Mon, 10 Aug 2026 11:13:25 -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.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:25 -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 , Olivier Dautricourt , Stefan Roese Subject: [PATCH v3 30/34] dmaengine: altera-msgdma: use channel BH helpers Date: Mon, 10 Aug 2026 11:09:31 -0700 Message-ID: <21c92aefc28557597024ee450f1690761ba6d452.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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the device tasklet with the per-channel BH helper so completion handling runs via dmaengine_*_bh. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/altera-msgdma.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/dma/altera-msgdma.c b/drivers/dma/altera-msgdma.c index e23e5b441a24..c8e145cea6d2 100644 --- a/drivers/dma/altera-msgdma.c +++ b/drivers/dma/altera-msgdma.c @@ -170,7 +170,6 @@ struct msgdma_sw_desc { struct msgdma_device { spinlock_t lock; struct device *dev; - struct tasklet_struct irq_tasklet; struct list_head pending_list; struct list_head free_list; struct list_head active_list; @@ -684,11 +683,12 @@ static int msgdma_alloc_chan_resources(struct dma_cha= n *dchan) =20 /** * msgdma_tasklet - Schedule completion tasklet - * @t: Pointer to the Altera sSGDMA channel structure + * @chan: Pointer to the Altera sSGDMA channel structure */ -static void msgdma_tasklet(struct tasklet_struct *t) +static void msgdma_tasklet(struct dma_chan *chan) { - struct msgdma_device *mdev =3D from_tasklet(mdev, t, irq_tasklet); + struct msgdma_device *mdev =3D container_of(chan, struct msgdma_device, + dmachan); u32 count; u32 __maybe_unused size; u32 __maybe_unused status; @@ -748,7 +748,7 @@ static irqreturn_t msgdma_irq_handler(int irq, void *da= ta) spin_unlock(&mdev->lock); } =20 - tasklet_schedule(&mdev->irq_tasklet); + dmaengine_schedule_bh(&mdev->dmachan); =20 /* Clear interrupt in mSGDMA controller */ iowrite32(MSGDMA_CSR_STAT_IRQ, mdev->csr + MSGDMA_CSR_STATUS); @@ -766,7 +766,7 @@ static void msgdma_dev_remove(struct msgdma_device *mde= v) return; =20 devm_free_irq(mdev->dev, mdev->irq, mdev); - tasklet_kill(&mdev->irq_tasklet); + dmaengine_kill_bh(&mdev->dmachan); list_del(&mdev->dmachan.device_node); } =20 @@ -852,7 +852,7 @@ static int msgdma_probe(struct platform_device *pdev) if (ret) return ret; =20 - tasklet_setup(&mdev->irq_tasklet, msgdma_tasklet); + dmaengine_init_bh(&mdev->dmachan, msgdma_tasklet); =20 dma_cookie_init(&mdev->dmachan); =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 4271943785E for ; Mon, 10 Aug 2026 18:13:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385610; cv=none; b=dZwhyisfO6GjUEcKhZHGRxyz2pyVtjyAnxc3LaHqw+6HEU8kuvTj5r2JOHVqe4PQIAuZf1qC3BNfMTdl32GeJLd1VihwI4rBqFAth/dlPfZFA0jsDq/7e6zCSFMv3sl+q7PrVLCTQSvd+OEwt2sWiYyue6bD3/MRa793rj6IM4U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385610; c=relaxed/simple; bh=Teowlr4/u6lyEOcd604ePNCUpZdWP27hfF+FWpOCIL8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j26dy6mH2DNvHyQxzi55eTZqr4FrIJeQpoVSkKv0xRJ/7buptcV6Tuf7YHCliIC4RQoi20TG0CCPNqhmkZne+WENOwrbaNXedUZlTt1SdwSpbexI5/58Fr8qsIUB/DfBqpb4VmBE9cCo4fnSIBTh0NItFuE6nlLIYWiSdOjUweM= 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=KCUEeHAC; arc=none smtp.client-ip=209.85.216.47 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="KCUEeHAC" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-383cb94f742so2370954a91.3 for ; Mon, 10 Aug 2026 11:13:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385608; x=1786990408; 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=ktKzbp32MXWrTZU+90t9ztCvKSRHsn84A1RdvU/j9tM=; b=KCUEeHACPGLcgj4g3POsQ65EccWzMXjMblKecFdGdH9pZt9gzeeuKF/1LX5ZMX2kCf yXAUdN/kMu92h3uuAzRmWlJ/YqfSseASvEoSyvOhOUeU0yyemQg9XkkMT9OzynTv0CbV PySqOwCj/ZzD7mz8cHBovqzanR/8aNARN0qKTPukmaudnhR6nxq4JARDyMGw/cZJ1dx2 7JRNQ0O/foZBF2uBRqOr2nfhIE8Z9/bQ/sMDQ9rEXcnbDdA0oFLIypw+YcDlYkXsNrUa lduvsgBLsJ3Skyii7nKxLdOzV2muXgJ9QCN874VP/pird3eEAPXe3MNOawwv5mNrw0dm sChg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385608; x=1786990408; 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=ktKzbp32MXWrTZU+90t9ztCvKSRHsn84A1RdvU/j9tM=; b=SMPZVmjPE7oG2aC84XFp/7zzkfNL4LMytdKT4QcDRL2FzixHmNzbhp6FkY7GmPyIzF T3xS0Zq3auqa6gFPVm25eRXjqtoh2710rEhyj55BXCPsJO9nd3pgnO8QEljbGbHsBYcF IrZ60xbv7Qwls5kBHF+rkY/0RbHmM23J6WDvjc6XNQcO17z5Gy68vKML3MlM3hgGYFpo wrekDxB1Jxe7oJqxTMVrHR0BOQgJrAP6gVe+9nfyV3Q9j5Cwu4aU5bth/EjWWGUHJzml zAXzS1P9Z4C/kKvtl/5PIjurjTaaELRkVZrEIBzvXSWEpULvJGoyxxfqqbgS4EyVqUre oIjQ== X-Forwarded-Encrypted: i=1; AHgh+RqE0QCXOMQiYaBuSjjtPrF1jaXdiMEr1rtv64pPP94Qw6L3VjX9slXcva5bVRjKFHriykRzVrnbdT+FTe8=@vger.kernel.org X-Gm-Message-State: AOJu0YwrHg4dLJUNHpJjnzhg9E+2ZgySDwq+ueuPdRU41ilCd2vCgogO p01hVrEWE7RoTCv+dXKsrKm+7Jy6YjabBCElSLPVdmu6gPjQqF+/9s+N X-Gm-Gg: AR+sD101Oo76iwjmpCimsT61dVcxQ4JTxgzx5UlQpCSRNyRGQTv3hsNo82vP8xsyBWu iT+WBV+Tq92stnjuWYphErJ621L9X5e711HWX3+kY6RYe1E0Dk4a9As/p2akVS0tUIS9LgTsdav RUt79BrJ3uixd0wmIqay2NAiWZ/G9LFdGDqXiFqkp2Kd3oHnNUNgy4V9JI6pwlLHalDszKi6FDe OXipryHkXnFtb7r3b2mGSb85pBCFoDF3xVDsOrgMCoyC7/T4SDx4TMg66aTPHjatnw8vkZ7yamS D/t3OuH/9//KGzk2rl5MdONt3igA3KDLbZb3pr325/ykDNZFulPRh2s/qGaTIgETQJMCV006uhz 3uM1VBlMExSO93zSteZr6bfFnlOAu4uXiJ3dEiz4QFZen/8U5vGSMZhV1kj2WjhT8dMU6m+J9wX TP+4KcZzWbbuHWkBnSZ6Ut21AVWcrkgVFjcr5SR8kHfvxbmFu2WrpbeBQM4Q7nzqh/ X-Received: by 2002:a17:90b:58eb:b0:38f:18f9:785 with SMTP id 98e67ed59e1d1-392cc961aa6mr3605566a91.8.1786385608488; Mon, 10 Aug 2026 11:13:28 -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.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:27 -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 , Viresh Kumar , Andy Shevchenko Subject: [PATCH v3 31/34] dmaengine: dw: defer callbacks via channel BH Date: Mon, 10 Aug 2026 11:09:32 -0700 Message-ID: <51d53a46331dd58a67e71cb8c53c6e67f4b5503e.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: quoted-printable Content-Type: text/plain; charset="utf-8" Queue completed descriptors on the channel and invoke their callbacks from per-channel BH work instead of the controller tasklet. Add a synchronize hook so termination can wait for deferred callbacks before their descriptor storage is released. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/dw/core.c | 42 ++++++++++++++++++++++++++++++++++-------- drivers/dma/dw/regs.h | 1 + 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c index dd75f97a33b3..2765acfe5644 100644 --- a/drivers/dma/dw/core.c +++ b/drivers/dma/dw/core.c @@ -236,25 +236,24 @@ dwc_descriptor_complete(struct dw_dma_chan *dwc, stru= ct dw_desc *desc, struct dma_async_tx_descriptor *txd =3D &desc->txd; struct dw_desc *child; unsigned long flags; - struct dmaengine_desc_callback cb; =20 dev_vdbg(chan2dev(&dwc->chan), "descriptor %u complete\n", txd->cookie); =20 spin_lock_irqsave(&dwc->lock, flags); dma_cookie_complete(txd); - if (callback_required) - dmaengine_desc_get_callback(txd, &cb); - else - memset(&cb, 0, sizeof(cb)); + list_del_init(&desc->desc_node); =20 /* async_tx_ack */ list_for_each_entry(child, &desc->tx_list, desc_node) async_tx_ack(&child->txd); async_tx_ack(&desc->txd); - dwc_desc_put(dwc, desc); + if (callback_required) { + list_add_tail(&desc->desc_node, &dwc->completed_list); + dmaengine_schedule_bh(&dwc->chan); + } else { + dwc_desc_put(dwc, desc); + } spin_unlock_irqrestore(&dwc->lock, flags); - - dmaengine_desc_callback_invoke(&cb, NULL); } =20 static void dwc_complete_all(struct dw_dma *dw, struct dw_dma_chan *dwc) @@ -285,6 +284,24 @@ static void dwc_complete_all(struct dw_dma *dw, struct= dw_dma_chan *dwc) dwc_descriptor_complete(dwc, desc, true); } =20 +static void dwc_chan_bh(struct dma_chan *chan) +{ + struct dw_dma_chan *dwc =3D to_dw_dma_chan(chan); + struct dw_desc *desc, *_desc; + struct dmaengine_desc_callback cb; + LIST_HEAD(list); + + spin_lock_irq(&dwc->lock); + list_splice_init(&dwc->completed_list, &list); + spin_unlock_irq(&dwc->lock); + + list_for_each_entry_safe(desc, _desc, &list, desc_node) { + dmaengine_desc_get_callback(&desc->txd, &cb); + dmaengine_desc_callback_invoke(&cb, NULL); + dwc_desc_put(dwc, desc); + } +} + /* Returns how many bytes were already received from source */ static inline u32 dwc_get_sent(struct dw_dma_chan *dwc) { @@ -965,6 +982,11 @@ static int dwc_terminate_all(struct dma_chan *chan) return 0; } =20 +static void dwc_synchronize(struct dma_chan *chan) +{ + dmaengine_kill_bh(chan); +} + static struct dw_desc *dwc_find_desc(struct dw_dma_chan *dwc, dma_cookie_t= c) { struct dw_desc *desc; @@ -1256,6 +1278,8 @@ int do_dma_probe(struct dw_dma_chip *chip) =20 INIT_LIST_HEAD(&dwc->active_list); INIT_LIST_HEAD(&dwc->queue); + INIT_LIST_HEAD(&dwc->completed_list); + dmaengine_init_bh(&dwc->chan, dwc_chan_bh); =20 channel_clear_bit(dw, CH_EN, dwc->mask); =20 @@ -1321,6 +1345,7 @@ int do_dma_probe(struct dw_dma_chip *chip) dw->dma.device_pause =3D dwc_pause; dw->dma.device_resume =3D dwc_resume; dw->dma.device_terminate_all =3D dwc_terminate_all; + dw->dma.device_synchronize =3D dwc_synchronize; =20 dw->dma.device_tx_status =3D dwc_tx_status; dw->dma.device_issue_pending =3D dwc_issue_pending; @@ -1374,6 +1399,7 @@ int do_dma_remove(struct dw_dma_chip *chip) =20 list_for_each_entry_safe(dwc, _dwc, &dw->dma.channels, chan.device_node) { + dmaengine_kill_bh(&dwc->chan); list_del(&dwc->chan.device_node); channel_clear_bit(dw, CH_EN, dwc->mask); } diff --git a/drivers/dma/dw/regs.h b/drivers/dma/dw/regs.h index 5969d9cc8d7a..c9e32bd6110a 100644 --- a/drivers/dma/dw/regs.h +++ b/drivers/dma/dw/regs.h @@ -279,6 +279,7 @@ struct dw_dma_chan { unsigned long flags; struct list_head active_list; struct list_head queue; + struct list_head completed_list; =20 unsigned int descs_allocated; =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 100A043847C for ; Mon, 10 Aug 2026 18:13:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385613; cv=none; b=iffoqRd4EiHz1p0qTHRUnate3Xpd8WCN9A6oIjq8NfQkakHJznTO2jkvrCBMsiIYkdxG0GuKuX9oHp3IU8CslNA4KbGaaT66FhDyzDmsbh8Rya7YCWIwZ8UYhH0SmnAuMkRmrOgLSBfCxUailyNVqw8vmjt+3RAAhBj/Cu74IRw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385613; c=relaxed/simple; bh=28om5El0TdZ4S+gnFdSdluPfV8TV0Ds5qbfPBcio5bg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=D/XclmBlQiHQ9G/zcWa0+eI2fJdhjwgPIxdcaFItlvPK8lsMMaKRT3peQ8SMSDJGP/ld4Zm1HYsJW/nYeq2AiA9Sns7Cddn3uC7hrF38pYe3zCzUdh6VmYljobbC3AAVFJuKgFDApMKjFWFyaw1kcGsDQ7+xaK43Fw/T5DX6jlQ= 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=Ao6mXLe9; arc=none smtp.client-ip=209.85.216.48 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="Ao6mXLe9" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-38ea87caafeso1564571a91.3 for ; Mon, 10 Aug 2026 11:13:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385611; x=1786990411; 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=whlCZPyT2KYXXz/hQHK+/7ZGUcx/5GtxWUD+aYLMk64=; b=Ao6mXLe9JHP69qbmh/F4BxBWpG5bnPxrdmzs+YEbZKsBbAtzvFMKBKP3b0jGt77eYL BMYozG4siHNIYZ4utTLi6tO0F+rf7R5KSv0KHMCImB/BiQtSy5Ed1iD3rM4XLtqZkS3T 8O4oREC4H4YSVoEjzQkaZrwv71Id8IDPJYmZ26vCMacrtVf/+TjIgt8hDqF5DEEhO8yF SvSXt8xhc2g+JmJLqJiSbzVDwyFnPwB8d9WUtOHnV+xoNhvh28tat7lE7Y772gFcqhiD /8z3mVoTF9oZj6gX2t7/GVotPWe/zyBGy9AjudeTmT7sgkPUHQRohHlQdPP5GsfUin1N KGGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385611; x=1786990411; 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=whlCZPyT2KYXXz/hQHK+/7ZGUcx/5GtxWUD+aYLMk64=; b=e78NUrBAdNWv5v3JctMJHfR2hSqxbPqdVeMaIgH65/2nXWCAfFpIrkRHveQD1efQhS /QJDk988IM17pxsrT7tzcSMeqkfygR0wZFHANxaqdJtggISC+WSFOePFtvdNP98sAmVh ZvcbQJYfUYh1NjsGkUQAVPvkdu4nm0IzUw933DBHMk8YICVWPqNUtx0nLi8yBFDkhUhs LIuaz9jneU/r3//fIyVa72LEp+db44wRB5YWBNnvJ5z3L16qD5F+5T7GaOJ2jLgt86Mg d3AqsW3vNQztk/SrfaGHybYFewI4hCAeBOXe7MUSRL7fg8BtOHkPXEghrvIJN4+D47qd RBaw== X-Forwarded-Encrypted: i=1; AHgh+RomXpL9qpet1v84yWvVoOpmgmL8YKhhTGwxJz9aJQnSzfVyA72qF1m4lJPTUWiKC5pcEY7Sm9gOBLQ679s=@vger.kernel.org X-Gm-Message-State: AOJu0Ywg2Gw9GzO3PsMyAIzOX1iPqXFmQjUh/KuWnu6FG83jJUNgnNW0 vsciUwiF/6rl6h+zo4O3kKqfmBbemebIHfCRHk0jTYHErnrmka68rIkL X-Gm-Gg: AR+sD11UjsE2lAi0EVWBMCR+cfinOmEvfFhy8dbP2qJP7OIZOs8dcP2AlYBYwbfwuZd Ccsv4rYL9+6loUkQEaItS1nfH1LrkwECBW/+GgEp15757rpGUTL/LX1mEtPYQJHAWU97Ec7OUDb Zw85GHYrcwHBDfxMaBJ55gTsKcdqORIvNGNluobEc0LuCtOitcrg0POU+ddBDPJ4VGNUbdLAFU7 ckv9YBLpVT4PuqgbJIKR/N42stJ4vO1NBh9TB0MTnnm8NT1xv+KDO451nwbDbUH4cbn1RmIje6O tqv6rZMMtNzgesfat1MPvUhOP/jGTodIR/2rEwfFyCQIALNtZVePK5aqfuVQwQ3Bdbrjk7LRnf3 W5g4PYf3Zl3UgCCvJ2lmqp1uVjHIYe6hs+gnLlou+4XEv85jfN8R9Kuxx1RPyKfjezXJcJ7Mbxe //VjPtWPEjCJ/KrWe419BhRd8MXaJC36SPUjrYuQTQ3ua3Q0coKwDUV2JRE0w9n0s= X-Received: by 2002:a17:90b:5446:b0:380:f389:447b with SMTP id 98e67ed59e1d1-3909d89bad6mr31304315a91.11.1786385611271; Mon, 10 Aug 2026 11:13:31 -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.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:30 -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 , Sinan Kaya , linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org Subject: [PATCH v3 32/34] dmaengine: hidma: defer callbacks via channel BH Date: Mon, 10 Aug 2026 11:09:33 -0700 Message-ID: <702687c28f440bf017c6e57f630bb65d22d3b217.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: quoted-printable Content-Type: text/plain; charset="utf-8" Move descriptor callback processing out of the low-level completion path and schedule it through per-channel BH work. Drain that work while freeing channels so callbacks cannot outlive channel storage. Signed-off-by: Allen Pais --- drivers/dma/qcom/hidma.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c index c939635be21d..486a2c61a9fb 100644 --- a/drivers/dma/qcom/hidma.c +++ b/drivers/dma/qcom/hidma.c @@ -90,7 +90,13 @@ static inline struct hidma_chan *to_hidma_chan(struct dm= a_chan *dmach) =20 static void hidma_free(struct hidma_dev *dmadev) { - INIT_LIST_HEAD(&dmadev->ddev.channels); + struct hidma_chan *mchan, *next; + + list_for_each_entry_safe(mchan, next, &dmadev->ddev.channels, + chan.device_node) { + dmaengine_kill_bh(&mchan->chan); + list_del(&mchan->chan.device_node); + } } =20 static unsigned int nr_desc_prm; @@ -155,6 +161,13 @@ static void hidma_process_completed(struct hidma_chan = *mchan) } } =20 +static void hidma_chan_bh(struct dma_chan *chan) +{ + struct hidma_chan *mchan =3D to_hidma_chan(chan); + + hidma_process_completed(mchan); +} + /* * Called once for each submitted descriptor. * PM is locked once for each descriptor that is currently @@ -181,7 +194,7 @@ static void hidma_callback(void *data) } spin_unlock_irqrestore(&mchan->lock, irqflags); =20 - hidma_process_completed(mchan); + dmaengine_schedule_bh(&mchan->chan); =20 if (queued) { pm_runtime_mark_last_busy(dmadev->ddev.dev); @@ -203,6 +216,7 @@ static int hidma_chan_init(struct hidma_dev *dmadev, u3= 2 dma_sig) mchan->dmadev =3D dmadev; mchan->chan.device =3D ddev; dma_cookie_init(&mchan->chan); + dmaengine_init_bh(&mchan->chan, hidma_chan_bh); =20 INIT_LIST_HEAD(&mchan->free); INIT_LIST_HEAD(&mchan->prepared); --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 12C8B435526 for ; Mon, 10 Aug 2026 18:13:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385620; cv=none; b=qR0ymNI8YhY/sDyrh3q377eZG10YI8df1A4QEpVxMgU0IlMQQhg2G2iLz5f5GkeNoEg30ryplTcZelsTd7GpHMr9ygeipdCQdwTi1eLC3zE5qndoh1JFqtSBIyxlt/pV54Wt94HHB9Duf4jQxa5I8TDn5lp7ihokcvKqrK+UaUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385620; c=relaxed/simple; bh=LxqzrTJv5Eqx3zrr8cQAwC8hTp+RGnUBOHgB8lVvAQw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=chQj1Gf+ZCHyP7LYxJwKJtoPL1uGBQohzLktww0qHbLjltUu82uzF+PAOhEb0yArMvbeTgMLS+ftffmiLYXJZ6/SFpqMaaTpM9LVQrLFY4YgNYjzqNL5M/KLS0I+B0VTKv1mrdeMWurG3vQu5ZD35FimAuiCg6r6hyaNFaBuNnw= 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=QVgnK1NT; arc=none smtp.client-ip=209.85.216.52 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="QVgnK1NT" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-38e041ea211so2538823a91.0 for ; Mon, 10 Aug 2026 11:13:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385618; x=1786990418; 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=jUm5zg635IdCfrd8nRe9kr7IONoPkdCFzJRsBETaklg=; b=QVgnK1NTnbE75IvaAwReUBn/f7Wet+iX690147bgGdoPwm1Hq2oOkHpB02YPEjrP9I iTdx9WCRHBZmpk/kQBDT2zWmYj1fWjw/aLkTOsW4NIKXP7l2ZduMzStIyfKnjl5KcYuJ 0+CgVjb7N9Rh9lsRyy0YJ0wb5NoOQ/6CvQCH2WFG1Q62RItrcvViha/twwURJOPXvt/A i5tzplxHtJwyFYNIm8kidFKhlun7O2NJeRv55uTn4sTD2N03WsBmvbGdq7L9yLd0lkmF VfVEZA3aHRNQ1RxBZf9v2m3Q0anEffhdEd5j8cLdcHUZRfuvz3njNxWNXdVwI9ens7WT +t4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385618; x=1786990418; 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=jUm5zg635IdCfrd8nRe9kr7IONoPkdCFzJRsBETaklg=; b=h4CnFJ1oxGvxnJvywBTlYKdfjcJBxO0pbftjRHU1mhT9g9dJajogOQWeYYddRdyvli X/GhJYT0RMZvt9Bd6HBoiqw/gOXCQ2Fv5hAomzlF+VvJMvE0ASn9TQXMOq//YrFccifg mgaD+xPHHBGhJZO5TLDW9NylTtSxnwPIT1KXWiDz64lV3PM1N+RTExIk9fzCqhZRstOv TpViEQ3NB48FkO5+3AIlR6Cj3pT8g2BFvBEcwwzOu0I/J8wlpelOmUlpZ93vzHrjLNHj VPSnExD2/DGqVZvrhLqplk/oYaur0S/xudb26bEqyQlvVXToNFQoHpbvuHyC7YPewNGx h8cQ== X-Forwarded-Encrypted: i=1; AHgh+RpBKu4JjjzLDVLghkAIyzMJZvDfLNvFeaPjyYPJXLK7CqIzk3iWzp87GsnIcDjClu0PrIPBuj6CpOIRAlA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzim+yRCW16z1HlF9fDsPp7Dw7kOVUjdCs5+5i2sGZ4EgV3PESj QKC8ESRyvBAs1upSfVHesYoZsUywsp+MCehyFuF/Icxjio2ZfWF5yGC2 X-Gm-Gg: AR+sD10by7IKUD4a8j1dixFY6GiibD46O2gSQ5Ue8JXlnC3nrJxG9v4B1VE362lAsGY W7vMiLhekKF73vOw+Sr9J+i6g1nJtIjbUr4b+EifSOkPZ3hk3BJNxwu7pStp09Qx6wd11qt2WgP +HSmv50qZDlxqbMrgtYvHLV7/kGonC0DJ5xhCaPl1H8T8vQ0GVWYYH2tc0XBJYx2GVs6Lj87ov6 T+2YX4YmC54wU8sTm2MG5WJhHR9On9g1TZ38BKMDTDKM4CRBilGdxqgurXQxD7/LncUpxuSFvdJ k+E6ItlbtOBstzYewcBHXYyeuIbJ2TAync2tsfCsnbLxMEyeb3yKmfaGRuayvLxTX6Zu3yCSrzX GbTR5NHeeIlZPD4i1Ht5va+/6cxIwXPgKrOvDLylnqwyBLqFRJfv2+BWiMtaJwPV+wKZuXU9Wlw 7R1r/HOGeuLZSDfxZMSZJawrWHeccd1d8lHhZzAQFxt6AyQAMCCwZJJkcCbe0cg0R9Ol0RHtzuw A== X-Received: by 2002:a17:90b:2785:b0:38e:bbf1:de3f with SMTP id 98e67ed59e1d1-3903c5d2f29mr48647797a91.12.1786385618336; Mon, 10 Aug 2026 11:13:38 -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.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:37 -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 , Dmitry Baryshkov , Miaoqian Lin , Jyothi Kumar Seerapu , Icenowy Zheng , linux-arm-msm@vger.kernel.org Subject: [PATCH v3 33/34] dmaengine: qcom-gpi: defer callbacks via vchan Date: Mon, 10 Aug 2026 11:09:34 -0700 Message-ID: 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: quoted-printable Content-Type: text/plain; charset="utf-8" Complete descriptors through virt-dma instead of invoking callbacks directly from event processing. This preserves the transfer result for the shared vchan BH, which invokes the callback and frees the descriptor; drain that BH before releasing channel resources. Signed-off-by: Allen Pais Reviewed-by: Frank Li --- drivers/dma/qcom/gpi.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/dma/qcom/gpi.c b/drivers/dma/qcom/gpi.c index a5055a6273af..2bc3a07ef092 100644 --- a/drivers/dma/qcom/gpi.c +++ b/drivers/dma/qcom/gpi.c @@ -981,8 +981,12 @@ static void gpi_process_imed_data_event(struct gchan *= gchan, result.result =3D DMA_TRANS_NOERROR; result.residue =3D gpi_desc->len - imed_event->length; =20 - dma_cookie_complete(&vd->tx); - dmaengine_desc_get_callback_invoke(&vd->tx, &result); + spin_lock_irqsave(&gchan->vc.lock, flags); + list_del(&vd->node); + vd->tx_result =3D result; + vchan_cookie_complete(vd); + spin_unlock_irqrestore(&gchan->vc.lock, flags); + return; =20 gpi_free_desc: spin_lock_irqsave(&gchan->vc.lock, flags); @@ -1060,8 +1064,12 @@ static void gpi_process_xfer_compl_event(struct gcha= n *gchan, result.residue =3D gpi_desc->len - compl_event->length; dev_dbg(gpii->gpi_dev->dev, "Residue %d\n", result.residue); =20 - dma_cookie_complete(&vd->tx); - dmaengine_desc_get_callback_invoke(&vd->tx, &result); + spin_lock_irqsave(&gchan->vc.lock, flags); + list_del(&vd->node); + vd->tx_result =3D result; + vchan_cookie_complete(vd); + spin_unlock_irqrestore(&gchan->vc.lock, flags); + return; =20 gpi_free_desc: spin_lock_irqsave(&gchan->vc.lock, flags); @@ -2009,6 +2017,7 @@ static void gpi_free_chan_resources(struct dma_chan *= chan) =20 /* free all allocated memory */ gpi_free_ring(&gchan->ch_ring, gpii); + dmaengine_kill_bh(&gchan->vc.chan); vchan_free_chan_resources(&gchan->vc); kfree(gchan->config); =20 --=20 2.43.0 From nobody Tue Sep 29 08:25:34 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 6133A43635E for ; Mon, 10 Aug 2026 18:13:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385625; cv=none; b=mJ/WMBv1/GWP2aY19aUQU5DlmexMLoLkY8VaIt5XP/X6Fr5oGDKazz5O9P9JJQbme7YJEabhJWP0XSkUDXdMk6GfR6ktnS/jgE/PW+s6AvOtNeMfydUFwYe0NltTkzs2GlMvZh6twBzTmtsUXE2nb5huuefPcvKtlyX4N9utD9o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786385625; c=relaxed/simple; bh=0Eb8GRKvMJHasoh02hWFih058UEYzEaV5ZwlBwnYodA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JF7vl3w9deUY6fWszNYocxNrLR56AOW3627FnItmwxDAyRRqWHKYLyY5pmNN607bCzRnWs8hf0YHSxWfDc0PMnuP8S6qjjZdwkrK6BvvxOJSXtWHzAW8XwbdZeHORrnqmvNNnQ9fcnpKuT8m3XGpMfjf5l0Z0iKOKtGEIlNYht4= 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=G6gQg008; arc=none smtp.client-ip=209.85.216.48 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="G6gQg008" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-38125cebfdaso2782410a91.1 for ; Mon, 10 Aug 2026 11:13:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786385624; x=1786990424; 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=CwhhaAGdCkcDIiyyyywufIBhF9Feu3uUwtXlOqQT0nU=; b=G6gQg008M+lMrX8Dw493FoxwK4Mygi9p2lRudqQFKpeo0nZUCzrBeQeTM6YoduEJ1j DuuUvelujl3MXjd4LW+C+V0q0PDIRqm/UVylvIKomn3LubWg+RIxcTx3JYOyOb4vLdFI 2MYs10r0B7U6+bwznivU+9kyhIrMaKf5wLqELXUR/bZkle4zy2J+kokPdBati1Mm4Dli Y++oHEsBBCxNpvF1bCdLxxHBz7QaYVPqwiyxg3E2hxrNBiYMM7X+UUPGL7dIZ+2QEr4E 4HkgEY2BnAVPPg/nFTIJSOGM2Y2DU2MscqoQtEN8+U0sR0AYSLlT9i2P0QQnTUWbvDDj 9iuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786385624; x=1786990424; 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=CwhhaAGdCkcDIiyyyywufIBhF9Feu3uUwtXlOqQT0nU=; b=RPGJzS8abTaHgjM+OhO911SmRQSqYjP0JT9XTgk64wAcnEhHNnVoWC+6SX/Pp80vfW joM3tltWyH9/3BFC5UAYvIek1a3RtRPhubBesuWSkJLzrXgzDlTLIeYwqsetxNLIQVa3 uJqvTL1MaQIL82wx3GfXnVL9SrDc3mKI0vxsxFYtIy0HiUjqKp9Kgk1EaoWy64Y2Ou7f BSqyC1bcaNmUCFCX4VgixorXf/nWoE8MW+pL3B3a0aIi7QnxnZHKD9QmKdKyUPuyIywN hH7xgYr2d0rduOnrsgXQWdA3mh6vJBlNOLXyXrebnuW9i8P7p2CyUWaceDJShBAr0Ulf QlNw== X-Forwarded-Encrypted: i=1; AHgh+RohlIWD9i6rsFM6Xg8bX7bTMrVEUaMQeeNJd9SGeZ1ZI+Ffxb7j7Fg+3CUhamEZ5STdd9b8Nrpoa0FjFoU=@vger.kernel.org X-Gm-Message-State: AOJu0YyxGsjA4cIyxfY/hLvh4VIkyoyGACJ89B+xV2hXFW6Rka/5CjK7 ax+LTq61z2A66XnPPO7h73mOXr/dea17XVxbAzCiHplXZn75MaLBQP4m X-Gm-Gg: AR+sD13LpzeAdBo/X3prx7axZMpSRUp//vl9EbiQwgx36D1hBwsPWJw86TWx52jXwOs uqfTa5lZbchjNaszjn2Tu5FyLdYpBysHrBi6fHoLLB6yz/3h+L28fXjTyJK3kXYac0tRG32+Lju nuackPU0PMadZNwUp/O+bcBtoldRgk7ybtd6pH6GJmgjXjlPByuLBF/cQCqO/natE2OajxaZGUa 0mmUNXQJccWeytu2tu0WX5fW7ilji7TvCHGCEa4ocWAwGleppu4elXngTpjRkCkVA9Q7A78oLfz 1AakbJt3vPAs2gl/XjM1yCAhBKOSZ0EdolrQs0lOomfVSjPtO4sQpiVPONSc7VBQ2Ps92AG0MRa tLSxxyY0aQ9NL72QOudPmnKQDXv8sSS1bH3Ivs/HAISUELXYr3/APZIn+TL8qmKCUepynEPr0ZF 02TCIL35npHBPZG+cRgdYThvmNEAeKs2VLCr07ahyEkCn4KPFDsky3j1XxypAHk98= X-Received: by 2002:a17:90b:288d:b0:38f:26c7:165e with SMTP id 98e67ed59e1d1-39261ff3945mr30245873a91.9.1786385623771; Mon, 10 Aug 2026 11:13:43 -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.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 11:13:43 -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 , Logan Gunthorpe , Kelvin Cao Subject: [PATCH v3 34/34] dmaengine: switchtec: use channel BH helpers Date: Mon, 10 Aug 2026 11:09:35 -0700 Message-ID: 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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the per-channel descriptor completion tasklet with the shared dmaengine BH helpers. Client callbacks remain in softirq context while using the common scheduling and teardown mechanism. Signed-off-by: Allen Pais Reviewed-by: Logan Gunthorpe Reviewed-by: Frank Li --- drivers/dma/switchtec_dma.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/dma/switchtec_dma.c b/drivers/dma/switchtec_dma.c index 71d9868ce613..849f1f2f8105 100644 --- a/drivers/dma/switchtec_dma.c +++ b/drivers/dma/switchtec_dma.c @@ -133,8 +133,6 @@ struct switchtec_dma_chan { /* Serialize hardware control register access */ spinlock_t hw_ctrl_lock; =20 - struct tasklet_struct desc_task; - /* Serialize descriptor preparation */ spinlock_t submit_lock; bool ring_active; @@ -584,6 +582,7 @@ static void switchtec_dma_synchronize(struct dma_chan *= chan) =20 int rc; =20 + dmaengine_kill_bh(chan); switchtec_dma_abort_desc(swdma_chan, 1); =20 rc =3D enable_channel(swdma_chan); @@ -820,9 +819,10 @@ static int switchtec_dma_resume(struct dma_chan *chan) return ret; } =20 -static void switchtec_dma_desc_task(unsigned long data) +static void switchtec_dma_desc_task(struct dma_chan *chan) { - struct switchtec_dma_chan *swdma_chan =3D (void *)data; + struct switchtec_dma_chan *swdma_chan =3D + container_of(chan, struct switchtec_dma_chan, dma_chan); =20 switchtec_dma_cleanup_completed(swdma_chan); } @@ -832,7 +832,7 @@ static irqreturn_t switchtec_dma_isr(int irq, void *cha= n) struct switchtec_dma_chan *swdma_chan =3D chan; =20 if (swdma_chan->comp_ring_active) - tasklet_schedule(&swdma_chan->desc_task); + dmaengine_schedule_bh(&swdma_chan->dma_chan); =20 return IRQ_HANDLED; } @@ -1041,6 +1041,7 @@ static void switchtec_dma_free_chan_resources(struct = dma_chan *chan) spin_unlock_bh(&swdma_chan->complete_lock); =20 switchtec_dma_chan_stop(swdma_chan); + dmaengine_kill_bh(chan); switchtec_dma_abort_desc(swdma_chan, 0); switchtec_dma_free_desc(swdma_chan); =20 @@ -1067,8 +1068,6 @@ static int switchtec_dma_chan_init(struct switchtec_d= ma_dev *swdma_dev, spin_lock_init(&swdma_chan->hw_ctrl_lock); spin_lock_init(&swdma_chan->submit_lock); spin_lock_init(&swdma_chan->complete_lock); - tasklet_init(&swdma_chan->desc_task, switchtec_dma_desc_task, - (unsigned long)swdma_chan); =20 swdma_chan->mmio_chan_fw =3D swdma_dev->bar + SWITCHTEC_DMAC_CHAN_CFG_STS_OFFSET + @@ -1116,6 +1115,7 @@ static int switchtec_dma_chan_init(struct switchtec_d= ma_dev *swdma_dev, chan =3D &swdma_chan->dma_chan; chan->device =3D dma; dma_cookie_init(chan); + dmaengine_init_bh(chan, switchtec_dma_desc_task); =20 list_add_tail(&chan->device_node, &dma->channels); =20 @@ -1138,7 +1138,7 @@ static int switchtec_dma_chan_free(struct pci_dev *pd= ev, spin_unlock_bh(&swdma_chan->complete_lock); =20 pci_free_irq(pdev, swdma_chan->irq, swdma_chan); - tasklet_kill(&swdma_chan->desc_task); + dmaengine_kill_bh(&swdma_chan->dma_chan); =20 switchtec_dma_chan_stop(swdma_chan); =20 --=20 2.43.0