From mboxrd@z Thu Jan 1 00:00:00 1970 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 0483333260B for ; Thu, 11 Jun 2026 03:53:08 +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=1781149995; cv=none; b=Tl4PgPNX5Mj4vJ4MNAAuwn1ifyrc8S2yIJ+Cz+miLk3Y03wBb1JEjSBAe51WvAXaNqrg0jQgUCCNvHIDFuXLutIBeyY16tNjSvUSZbq5aAqDbEWMGsvBJS1LaR4+eOunj/lHM8D6LgeNwlOW+HGe0+wKa0vajTgDJqdKHxEcZks= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781149995; c=relaxed/simple; bh=hpFYqVe6ysg9za0CJbNVYYOl7z3o1IuEZ7WBoGNTegg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lALALOuD12MWhUddnndqBEuHySVRS79pr/T3MecLEygEEGJ4S9wDEArwE3Sv0hTVDZc10TZaiOuH99vYPuHLLJ60wi351BqBbMYXaTcKz+bcpxgXZzvnuG6PuL9lonpOol/rWCYVkNM0zxGEzwOtMeyA9qAe51AJ7TPB+WoSL18= 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.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="OWRQAF6c" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-36b8d414666so4196510a91.3 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=d9awEO2XoHuNf7g65G7+DqHpDKs5aKwmyllDGB1UMDY60TcBiy2T3LoiDyAp/I6oIx +tld6GObVx1h52oV18zzJG5SKLfmohLdJRWu1gbi7fo3XYZ5Xdb2OTazPicoFM66hwaJ OS/0I6A9Sk87AU/jsAPfb0+duub0zmDBkCYNUX0BTiqEnPdypd13f/yvrP6hSdY3Y9CU di2RmoW9/JK/zweNAChJa87LAmuOTViIyCihPLBXB8a5qeQZey76FKBjy9iTNgEeZDmc jCTeYaK/JJyZ9dltbn3vkwXYcaApod31USS0QRW+pYPtHM3/ee5Egqf8oC7Yl/F2yX+a MN/g== X-Gm-Message-State: AOJu0Yxo+/NU6d9vgeqZh6O9nR9+60mTmBtna2wG9kao4Q3fiyabgsje GpX9HQPbT9t5mzKNi/VuFV/qOCGSKglohbPl8fuoTNqXZbNoHGOqGr1w06/Lig== X-Gm-Gg: Acq92OG7Kqw6GdnkwSqLOsC8m4+JtN536ufDO09Xkt4zHHTEkCaBx0VV44qbiJgXy9a B22ue/YdOCdP6q1fU8jJPlmo1T7v31O9QOzZOMaQgdRuiDYpv+Oi3ZqVS6HGYqN5tm06k6eKQba 7GRoAku1zVBmjpg2HtzuOO/fqP6NM28WM5JRILM3y6lAirveIY/b0COjxS7xzVJDjvu1OEmwz4J EWiFolMrBRXwhrZ7nNaWBjoSXkvSnGnWjNMke4CXN4F8/hv2yVnX2nMl7WFSbO6tkBxSyRExS+7 xcv7Izai8SAbQZqNqC8pPROPJ/0CPWFD5vzLtxCx8Q9Jc1VO/CXurJ+fcVNeB2w1d+yx+UuexV7 6F/eozAnYyL9YVUX58l978mNdbM+oz3KnO44WgeZtlqzi1grLQErReMrfE6/2xDKcHNLtLKYMtc PlvmRXYQxUg9QeD/DCKkJvsAFmwmejBVS2koJL4ack62RE9uhK6elt2KaQUlTHa4Il9llAtT/j0 DnmenZ3lXY8gj0ELAmN7nLjbwjkJy/bWUi0ICxNaxfBSA== 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: dmaengine@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