From mboxrd@z Thu Jan 1 00:00:00 1970 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 01F10331ECF for ; Thu, 11 Jun 2026 03:53:08 +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=1781149990; cv=none; b=WeI4ZUq45hJjo9sytgYuFKauiY9WhMwzXVcOTw4d+PrHsNtdoeVR4w3ZCdPNNIeJ/g+iscdaZ7GicG0S33tkO/NozsWwAIUghrRZn4lnK7DoHSyZPq98EiM98zJMXIKzCHkx/mK1OS1d0ERRmxie6IJtymyBkl7KeQ1peiL4aPI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781149990; c=relaxed/simple; bh=hpFYqVe6ysg9za0CJbNVYYOl7z3o1IuEZ7WBoGNTegg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rYAqJF9RND7cG+1PZaIH6XZ0jaoZjWcAFQJONVboihktntl6vseyDoAr3dMVjNCUF4AgHwLjr6mPmwqvMVGM/P++mK+ELlqqzhZIC4vQmHNl/W7+o3Hj8Y1VeuONizCd72f8TvUpmvAYlXelPxld0NF6aubpRnHpowD3Tr2o2ek= 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=OWRQAF6c; 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="OWRQAF6c" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-36bdda53d99so3176684a91.0 for ; Wed, 10 Jun 2026 20:53:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781149988; x=1781754788; 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; bh=/U4fRir7cY7WmN1QFR3JHwmFXZxM36Et4Gv4EjzBgmY=; b=OWRQAF6cIJE+8kFar8W0K/P3Ac4He8NpzIzdvFwKSPZMXJSAeXSmXYUDveVuFJOhSD E3EHIoOBoyTViFrNgCVr3++4u7jaWvbS8ep3y43e05B1OuVNltU+AjQ2e1dNFIsHWrsy 6hYpwiNB9WGKXLT/ZsA7odqVJMq0qc3s/rRXnbHIKP9Ze+bRckXLf3Odv0wzdyUazSR9 BUYz9v8zvW5D7y/HI/PzgdqmjerXwe41AZtraOBfV5bt4BsemCRkTDOWBhkHEDgy7nY3 AYwmcUI8wYrtW5E6FiM+o1Yq6wVeEhJa6BKjK7E5vjhvxeKg/wMn37G9Jv0EN8JpI7qe uy0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781149988; x=1781754788; 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; bh=/U4fRir7cY7WmN1QFR3JHwmFXZxM36Et4Gv4EjzBgmY=; b=Qc8TpJRkH3njk59lXWuJCBRFRRoYDWczioOQl4iWQ3sLhtmP21eNjAj03gQUcCdXVI amcH1U+TpI2IuIUReuXW+5NVTKoag5wtQol647KKbjfPbqBzCojvL1LTlzgSNeNKCFc4 pLizGI6cN95NSw61dXS3nbhlT3FXCLz0DfJEInRyBR4VJxo4ijc2hmSsTsoPywgm9OWt YFJsrebWOrlV3USBX0B2mAaPoBKt7z1EUZWL+kq+Ss1CdyZD0ZhtEixcZYn5ogH9hL3M ZlPS9nc07StlvmcifcDsojYerO2jOFCoHgrzFuGMFycZbF0SX8VA3fb9QCHo3hutxME3 7yTw== X-Forwarded-Encrypted: i=1; AFNElJ9nYGJPhBhJlfGU56aR8le/++CK+MwDMrU0JFVsFYeTQqAGOIqz40xZ2iQBTz1d/qVghk6AF/i7yMwdCaM=@vger.kernel.org X-Gm-Message-State: AOJu0YwMr8QeBIZxyJQw7n1o0mt9vmSlcfMYklf1vhhp7d0RD8fuxf8/ 1qTCkmAtUP1QBFXPF1PnwVoAK+leI/sZ7gMolfAMsb6vzH6JWIDCej2X X-Gm-Gg: Acq92OGoP7FcRIdx0UGrSX1+PqGbK6LaXmR5bhRXmBYugOckWfCUzCJzMzG8qb9caSv joe112gGhvb9F5MAYAmnGfxeDQujvy90NG30aqguUQ8ea8RQGY4VZzuLfS8IJGAQofxebjWy35C bmNMASQhl4Y1IAm9V/5kneKj1rqcV6n0PSpxWV0xaJ5F7OttEkmyWy7rupyCxv769Or/W0nx1Rt 2MrS7HNYV2hdqsYNrblEhUJsErnIbLEtG434mK2iAfd/b0wIWi+htse/+gUbv7lFZUDRNyOMP2Y FY2TaFIzfiImRKmRzbdSMO/T2Ivuh3BRD9PeRvMG6y+S1IKB2MjRMBTsAJMrQNl25IVaUtR65d9 Da8ceHBTEZ/FizCMXfedCbQQoGf2pJUn9S/wYKCGTravzePKpISRqP9vTwyHm2+9aMv7zMpG9AI zENb5tbXbyZjmQ3Tyy7F1KT19J3wyUtEub7aMHPNJdiZ9KxJmFbvb1XtQvOBgpwyDexh4BuO09Q /edsrz/+flGVt9jUMx/5t5E2pF53rcG6oVMZE+YmvwRiQ== X-Received: by 2002:a17:90b:3f50:b0:369:c5f4:9681 with SMTP id 98e67ed59e1d1-377a870982emr1259378a91.22.1781149988448; Wed, 10 Jun 2026 20:53:08 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d:7285:c2ff:fe45:8a32]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-377522a188asm910131a91.3.2026.06.10.20.53.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 20:53:07 -0700 (PDT) From: Rosen Penev To: dmaengine@vger.kernel.org Cc: Vinod Koul , Frank Li , Zhang Wei , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , linux-kernel@vger.kernel.org (open list), linuxppc-dev@lists.ozlabs.org (open list:FREESCALE DMA DRIVER), llvm@lists.linux.dev (open list:CLANG/LLVM BUILD SUPPORT:Keyword:\b(?i:clang|llvm)\b) Subject: [PATCHv4 03/15] dmaengine: fsldma: halt DMA engine before freeing resources Date: Wed, 10 Jun 2026 20:52:33 -0700 Message-ID: <20260611035245.13439-4-rosenp@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260611035245.13439-1-rosenp@gmail.com> References: <20260611035245.13439-1-rosenp@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 When a channel is released (fsl_dma_free_chan_resources) or the driver is unbound (fsl_dma_chan_remove), the descriptor pool and channel resources are freed without stopping the DMA hardware first. An active transfer could continue executing in the background, fetching descriptors or writing data to physical memory pages that have already been freed. Fix by calling dma_halt() in both paths before cleaning up, matching the pattern already used in fsl_dma_device_terminate_all(). Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev Reviewed-by: Frank Li --- drivers/dma/fsldma.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c index 455d21d738de..1ba10d065278 100644 --- a/drivers/dma/fsldma.c +++ b/drivers/dma/fsldma.c @@ -748,6 +748,7 @@ static void fsl_dma_free_chan_resources(struct dma_chan *dchan) chan_dbg(chan, "free all channel resources\n"); spin_lock_bh(&chan->desc_lock); + dma_halt(chan); fsldma_cleanup_descriptors(chan); fsldma_free_desc_list(chan, &chan->ld_pending); fsldma_free_desc_list(chan, &chan->ld_running); @@ -1207,6 +1208,10 @@ static int fsl_dma_chan_probe(struct fsldma_device *fdev, static void fsl_dma_chan_remove(struct fsldma_chan *chan) { + spin_lock_bh(&chan->desc_lock); + dma_halt(chan); + spin_unlock_bh(&chan->desc_lock); + tasklet_kill(&chan->tasklet); irq_dispose_mapping(chan->irq); list_del(&chan->common.device_node); -- 2.54.0