From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (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 631C642BEB6 for ; Mon, 27 Jul 2026 20:32:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785184361; cv=none; b=OEd0FLP96ugdXzs6a9qbW2KU8optwBkTgMSBNYNV5XvwPohpF9t6dtWETWwnZwreKac9ktu/6vUAsXSfuuMlmDvP/8B9IlqxRnnVk/aqSu9WqA+zb3F+ne+AkwfE1gSk76O1rf8KQtwHnqvAEFERkB0iCpWW+6wVKUWODFrhBL0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785184361; c=relaxed/simple; bh=9h1WpnMMycnSCejIuRJlaPM4Z48gnE43H/LZqcPVlEU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iWERXb0dZHmUX8fOtDWiAFYRWpDwiPwHTEGuh77ydOAgaw5dwwjhrmMZNmoVKcNTsGjV0dRC4YUSpVjzByrI+aWd15mTlT7QITfHeRlnP540FV5FjYDZb6/HPGN3Is3lqUq5vp4pwQetX8jVyMyEYJI8oIh3TWUZJbsI06L0qkM= 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=R+AKlCIh; arc=none smtp.client-ip=209.85.214.178 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="R+AKlCIh" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2cab973140bso42249055ad.3 for ; Mon, 27 Jul 2026 13:32:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785184360; x=1785789160; 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=jJ/36eTHsHmAdDJttLKoiCJF2Rw+8DDm9hk8CTzgL2Y=; b=R+AKlCIh8gXT4aQH6NRy0FBWD4KqaufanF5CDajIMBZqYCaIybHyEjXXWWMNZ/3IH1 k7TWoeyZoPangjZfoDT0i6geJc2EkuHG9dLjsvFp43gUWuZUBNB1ZdgPwPYv60+xthkL 86PO4vvRRxqSIXtMEawSDok8lqWckhiRrdYlhIZVRgKLakx0434pieKvk6+QozdTES4C 0SOu+nGN1BCl7Cu91IDUHfqnYGuyCUncS43ibF+cSiK/iinrg3ErjDER1C2lkl7ns/Z5 ZB5L54iP63gt9ElEtlnijCvGBt+pl+5jP2Oo81WxZ7KNWp9bfEvgTWe0xutAWw+qK6UF bg5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785184360; x=1785789160; 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=jJ/36eTHsHmAdDJttLKoiCJF2Rw+8DDm9hk8CTzgL2Y=; b=kXMXUx/9MMnQFggn/nxpm6KXZjzaIC/ZeTGwmEsV74BapdjOMUsIQIay9cMSk73SEH L/MHqaiJLlpyWF37zgcJde8+5/pxvYOGubz1fexxJ/OfNNZ/7LIH8OR3FbcxCeKI/M6J DZoBdLaKVqQGamng1kOGfOvylQnringZVfCOX6cRHNdFu0rwsUxvLP5l9wxoKh0nTSZ3 TRnzOnEopMDCuAhUABtw8ywtqUjLvUhCVbn9nQp/4lPH9RPSFahG86rGX4Qk08JbbjSh GMccO7vaFBF4ZutnZgHfsZcmXRA9qbarNTS+z3DQUMRxulWXbKoRIHnA9ZkgWfgyOBOP U/5w== X-Forwarded-Encrypted: i=1; AHgh+RpnNGmXzNsG4BO5DNtmPACzKqBskppsBMdhMiHO1KDsF2AyMKNC9kxwEJRljRd3hU+RG1pRUWTcE6J8yDQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwWvysQykqyRY5TjpmifGOtG/MGuQh6dlUPibJxX9HrMKsEGqIb KAJqT/BbihitoGVRQjIbvRmq2oUO45fhgFC0IXZ6iFk+KdKCYOmUDBe+ X-Gm-Gg: AR+sD12cdhq5/2Sypq8OGOz6L6ShOe4hGKO55eiu6tINkDHTQu/ExZ8cPc85SWTzCj/ 4zApoPzqrTdizrtLOoU46EXsJvpRkzC2rrOCvDXcaNtzp/+oKpU3wcFi/ZqBiWOskLfi+SGxHT9 N2O6HZVd2zrFYnLykyWgJxx67gRhCve4tJkZiGyRwGIc70rUiTh0p6flEfPN/4c/rBXNKsW4CwB c0OqelOKW2o+aWGyPCWdfmKscxraDgrXlr/dTMZqQ0qKVWblCuOeS3OHljX85oiWfm9FaOY7Xh8 aY2wynj2F3CRrh5+7J3tbXTykFeMcM08M2eF4rgqZNiYCQaVz5X9epQ5q37WvX66T/cJip9Ns5K Sj5aFNWyJBdOMr0rG9BrodGikGIO0THLScFl9nXMbn/vTgH91hqv6s0VZ+IR3z0oLK8AIH/5uzb 4/PX30 X-Received: by 2002:a17:902:e945:b0:2cf:30a9:93fb with SMTP id d9443c01a7336-2cfde880c9emr98123395ad.34.1785184359730; Mon, 27 Jul 2026 13:32:39 -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.32.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jul 2026 13:32:38 -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 v2 23/64] dmaengine: timb_dma: route callbacks via channel BH Date: Mon, 27 Jul 2026 13:28:51 -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 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 --- 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..7d43e5712ffe 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 *chan) dev_dbg(chan2dev(chan), "%s: Entry\n", __func__); + dma_chan_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 = 0; i < td->dma.chancnt; i++) if (ipr & (1 << i)) { struct timb_dma_chan *td_chan = 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); + dma_chan_schedule_bh(&td_chan->chan); } ier = __td_ier_mask(td); iowrite32(ier, td->membase + TIMBDMA_IER); } +static void timb_dma_chan_bh(struct dma_chan *chan) +{ + struct timb_dma_chan *td_chan = 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); +} + 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); + dma_chan_init_bh(&td_chan->chan, timb_dma_chan_bh); td_chan->descs = pchan->descriptors; td_chan->desc_elems = pchan->descriptor_elements; -- 2.43.0