From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E571442F71D for ; Mon, 27 Jul 2026 20:33:05 +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=1785184387; cv=none; b=p5RpZe+1RutVxWGbyyuLa3/3RHBZ9huDzf6Gfm9NgqbaSvcVbtcctX7CF5ozby5G764KPs7oZVTIs0RJZdFtZrDrBcy1ej8o29AobcUWUcXn5CQ4hmliWUAZybUAdVcCi5TLeFJ+WQbRhqnyS9Bh1PVruHHv+ap3N5mdHKjvdUI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785184387; c=relaxed/simple; bh=H3smzW/5zOFUhSnnk2wDhy0bhFOaHPAC69w5Lyu/Duc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TmCh9wQVUm4+Fcd5ui5o9D+RYqpU4fTaCeSYXC2I6dou/EcJsFrY8OXdZfW8UjaosaJau8YzNYTE64yw6Kw41L77+U2o4Gd0apCbTr05S/HEWiGmzW/NvZm4xxGcapgvGTWu0dKqcPB63J71vDOxqBVUUu9t+eicnejpiaJ4WjA= 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=P24g9soA; 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="P24g9soA" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2cc7ef7ec27so40038845ad.1 for ; Mon, 27 Jul 2026 13:33:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785184385; x=1785789185; 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=Uj7JXucTWk1RlzdeooGpQiz1Xu9WUQokbk55k/nbKRo=; b=P24g9soA4yqiVaHZ07pS+z3E2dvoDfcmtR26lmplAnqibkz//zG+iAlpRvds8Pufsq TjpRLvkL/9mM9AGC8iCkqNM/Nn8H6WiJx+oKxVByycx5FMw+ey/SV6QfYmWwieKM7mii HjQocqmR1gdKMebtd7V0xI1qfQC0Fp4tuGLxzSnRTQHQ+X15hFZrKMAA1cKFGEn5NxRA xLDF2U3Mfb2ZjnbGsimkb/2vW1v8DAwAYQehVEGORo6iAuRRWsQBeQY3iU6ppYnxgc8o 44Kq+mjWciKhLBdVToDhFlX/EObFbe4L47qrYObW+YmDSG1u1Y29yThKwGxAiK8LGOHQ p0xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785184385; x=1785789185; 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=Uj7JXucTWk1RlzdeooGpQiz1Xu9WUQokbk55k/nbKRo=; b=mxt4+mV/ne5P/3mkyqHLBo/fBECBm9qj/gimpq0jd5tKSKB1P4MrTVy2Yi/MdwMPe/ 2XJDgPUsgNQuNSGi/scK+gs8qhd/TVHUkOy/f5iE8u5fWMFZCN93ZCDnsE1+PmWSVTbp 2OCFkzY17beZpnRLCORKwC1D9sIE7Neoc94CJeNh9qf77bsDQQrthjCER5w4PC6JrQQ6 qwbGpylFDDT3e+aDJdbsHAHCwRL4iOR5uCJIhWAX3COOnc6ZpZYNlBAHhN6bOqiDRxwz K7WBMyMJSEbMd8xdUy9MNfEA493Xp7MLjxQSE+srFRltdWuLFaXjQ3t2ADOAgubsKdXS cxzg== X-Forwarded-Encrypted: i=1; AHgh+Ro96EeYfQ6tqqiVzG8hMeEtnNpLGSwS8Y0PQYs4XPD3CHnj4pMusQ2HlosIoPvRmMpsk4Ybh1aw0FpL2nc=@vger.kernel.org X-Gm-Message-State: AOJu0YyZANnkI7ZbqZ6lASOrn7pMCj0YXBL4K+J167GBV71E8UIL36Be D+r0bFKLVYIuqdyUxwah1XLGCEwXdKmCtM6a3u+twMMH50Kv/IV5Y6Qw X-Gm-Gg: AR+sD10dpyHvOCO9yLQ7WpJPp/iY+/SEzObJayEy3gZqs8Z4dnuV6Hw+BzAbQN/BLAe /dfHlRujwzWWl8ccHPcgRNfuozOHIrw8IhKzEFjZCY5TIXMCg8QvhYJn7fcmsPa5rP3JMUGraTD 5J6vQePEbkw7rgsEnYVSm8thZImqqnHoLrP8wDbOxCgoPlwV8XfdjgI8w3QeWyIvN5wZVWzVE3i ZExT2gx3eJI2/+w1MKmSLwJgwtTRtCCMkdvuBG8v8Et/PSCjKIUa7AKUrH70MlmQyqG/G0busdk POTgDyDYZm1t7HXpB+DmgLPYqsPJ4ersat6fwCvhOwguLsDQ+VZH4gWH7GVaJjAhLmn1Rq/Lyn6 jy4+5l1U2vwBC25NVqvuxNGQgMSpSytnWSiuc/cf0jXJCf8sdnUeQ329EBKYEyxpfTYqvBV3/Wr 0G+GNday7I7f+Ub8I= X-Received: by 2002:a17:902:f549:b0:2cc:f7c6:8320 with SMTP id d9443c01a7336-2cfde8af530mr96971205ad.46.1785184385338; Mon, 27 Jul 2026 13:33:05 -0700 (PDT) Received: from cryptic.lan ([2001:569:7fab:e200:3789:64f9:8855:c0af]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cfde59b768sm41551805ad.4.2026.07.27.13.33.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jul 2026 13:33:03 -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 v2 29/64] dmaengine: sf-pdma: route error callbacks through channel BH Date: Mon, 27 Jul 2026 13:28:57 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: <20260108080332.2341725-1-allen.lkml@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit virt-dma now dispatches completion callbacks through per-channel BH work, but SF-PDMA invokes the client callback directly from its error tasklet after exhausting its retries. Complete failed descriptors through virt-dma with an aborted result and the remaining transfer size, then start the next pending transfer. During removal, kill the producer tasklets before the channel BH so they cannot enqueue callback work after it has been canceled. Signed-off-by: Allen Pais --- drivers/dma/sf-pdma/sf-pdma.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/dma/sf-pdma/sf-pdma.c b/drivers/dma/sf-pdma/sf-pdma.c index 6f79cc28703e..a6c2f53f005e 100644 --- a/drivers/dma/sf-pdma/sf-pdma.c +++ b/drivers/dma/sf-pdma/sf-pdma.c @@ -328,7 +328,17 @@ static void sf_pdma_errbh_tasklet(struct tasklet_struct *t) if (chan->retries <= 0) { /* fail to recover */ spin_unlock_irqrestore(&chan->lock, flags); - dmaengine_desc_get_callback_invoke(desc->async_tx, NULL); + + spin_lock_irqsave(&chan->vchan.lock, flags); + list_del(&desc->vdesc.node); + desc->vdesc.tx_result.result = DMA_TRANS_ABORTED; + desc->vdesc.tx_result.residue = desc->xfer_size; + vchan_cookie_complete(&desc->vdesc); + + chan->desc = sf_pdma_get_first_pending_desc(chan); + if (chan->desc) + sf_pdma_xfer_desc(chan); + spin_unlock_irqrestore(&chan->vchan.lock, flags); } else { /* retry */ chan->retries--; @@ -602,9 +612,9 @@ static void sf_pdma_remove(struct platform_device *pdev) devm_free_irq(&pdev->dev, ch->txirq, ch); devm_free_irq(&pdev->dev, ch->errirq, ch); list_del(&ch->vchan.chan.device_node); - tasklet_kill(&ch->vchan.task); tasklet_kill(&ch->done_tasklet); tasklet_kill(&ch->err_tasklet); + dma_chan_kill_bh(&ch->vchan.chan); } if (pdev->dev.of_node) -- 2.43.0