From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 C22874A2E0E for ; Wed, 6 May 2026 18:06:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778090813; cv=none; b=L3ZSghis7JIdHeeq1MXSPhOyYRUkq/hZhX28NJdGZ7EPkSPUkKztxEiYjGwEeARCVgl7gu5prYe1x3bbIq7a6DGGAdxh0f7vNVSu9SOwCwLY1YW8aVhEiomUFxQmXicQRPo9PqyDJgu8YKCjHZM5/cqe8Gw2p06xNjCSm1AWIIQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778090813; c=relaxed/simple; bh=XMUkfGBqGHRl2Qmuvo2NWgJYpIC+bwtX8lQsG8v6MwE=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=YX7OASQ18Jsodqh3H+QXd1X73+4YaH36OljLJ6K5rz02/qpBeGNuoqknihShCbYvkDeDicXgz965rYaRi+2fTfQuZrt4Q9tymZ6hrmC4mQVq0oeF6TR7XL5/7D7MoV8W8NPMnb8/n+PPe47dnVT6xr/2eAZth/DMIYGLkI7Q1Os= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=mj7+pnx3; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="mj7+pnx3" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2ba180a022dso134775ad.1 for ; Wed, 06 May 2026 11:06:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1778090810; x=1778695610; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=1SCkx6Yh6YZ1BPi+tG3iQfCUha6CFKOYQ/X+Py4gHbo=; b=mj7+pnx3pXIH1aiz/I4B2X/XRDlh2Ff98JEancdO/s5RMNtckpwC9WO/1RJPUmwEGK 5O4inOuzBMLTovfy+1C1L892OcGMoKRLzB3sLAZ4ZSkKplEPXSsxC9azx3IpDaZ5QO0T EEkWiMgIWKbCv4QxZGyC/yfRxIOVOO5jrTkp4ZuhMrUMOLfH7SbbGADOEixJsFxTSLvB Q6cxCetOgRyMLzGOYrzMNCxFBlgzCV3CpdQvKaS4gABaSMhwPtLVJeoAvRLKAAHdJPXj 8y48bgQSEX8TgQ23JBqer9scPx1/36/j5uUN972xHCfISNgNVicNWIEHpmgQS8OgD7HB lQVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778090810; x=1778695610; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1SCkx6Yh6YZ1BPi+tG3iQfCUha6CFKOYQ/X+Py4gHbo=; b=XfbdoUZoQfxvF98SNi3w7acgzDXBYC15a/I6Th+WCRv8jryvzjnd4/0+jcocclzrNz mEiYeRmx9pIx18/L18mnKXilR3YYCFlkxiO5bSyAqd7N6F+8AUafEAPtvUx7Sd8nkoN7 8k8qjUZukrh5YzR6oBlYU0PARe956CFMW5e4JPGJ4sos9t/Ar19Pd5SLSBwJQLgEtjfl oqLVsbhjkx7an0dj9cJttyah2u98nziHaVeBKKK671dO+T03+wswRNY38SDWRmxWf8P1 fCynowOazCw2+exih+nwFvN49I6Lfxj3Z23KPR80D4uHPMKO5vL/kOdJ1DS+E2xsRmHK pkyQ== X-Forwarded-Encrypted: i=1; AFNElJ+mw4PAZECWBuR4m8MuSCKpc44qSmv3rSPZPV73L4xcXaHibz5sUd7u1uaVjfrKmYjMK/jNi48PVcDNFE4=@vger.kernel.org X-Gm-Message-State: AOJu0YzORDE5+dsSC0i3sb+2xc2BN+QKKxge1iFyEXITYtTePS06FItb ErLYXBdqljn64uqQf29Qr73aaa0gEXPUa/IRDovGOupUKzfRPrATWzwp6KEAyNR7zg== X-Gm-Gg: AeBDies2fOiWpAyw863ypjoWKUj8ARcQ1gvH5bVzxzpBQu2+rMKu1iJoRjsrj7pAEsG XNg2DTFWGQeJ1DVIL+Np4sZ9K8XwQPzOCVp0au6dUeAmPErl/6K2DGYGsOI7nK7Nud/4kWFmCHy UEzS29xwKXO1EKSV6s7qTu/EIsWSzuwu9KLsw4BKuvPq7HrxjpvOfRH4hfyT8+TRPjzGGCy4s5x sP2z+go+alSqMyxnMippO1g6X2vyQHZ9ZiU0mV8jYA79XjDMuIicAoVoUVwF7kHJIlEsrEGk1oq IqvI+MV5s1zx+c6WTwDKbHqOoZuu/Hs4SBlJzybEtHz3imazc+PsPP4FJymXPooGnUNoGR+fhak TaXQeqMIoq0m7VEhoEZ/9dxu4CodDpHc+TiwR/h1ah48W336EtTh2eYxYKK0FmY1ciQiQuMUTp+ RcXpAsso8goiuaPkrxeX019m2bsjRFUtfym7fkK/7wRj+/opGczaDaMZXljVjQLbkwkRJJkbvt2 p85/BKq X-Received: by 2002:a17:903:124b:b0:2b9:a39a:e5db with SMTP id d9443c01a7336-2bab63fdaeemr399045ad.7.1778090809148; Wed, 06 May 2026 11:06:49 -0700 (PDT) Received: from google.com (153.46.83.34.bc.googleusercontent.com. [34.83.46.153]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ba7c9e1af7sm32405505ad.46.2026.05.06.11.06.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 11:06:48 -0700 (PDT) Date: Wed, 6 May 2026 18:06:45 +0000 From: Samiullah Khawaja To: Leon Romanovsky Cc: Marek Szyprowski , Robin Murphy , Jon Mason , Dave Jiang , Allen Hubbe , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: Re: [PATCH v2 5/6] dma-debug: Feed DMA attribute for unmapping flows too Message-ID: References: <20260501-dma-attrs-debug-v2-0-8dbac75cd501@nvidia.com> <20260501-dma-attrs-debug-v2-5-8dbac75cd501@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20260501-dma-attrs-debug-v2-5-8dbac75cd501@nvidia.com> On Fri, May 01, 2026 at 09:35:09AM +0300, Leon Romanovsky wrote: >From: Leon Romanovsky > >There are multiple unmapping flows which didn't provide DMA attributes, >which limited DMA debug code to compare the mapping and unmapping >attributes. Let's fix it. > >Signed-off-by: Leon Romanovsky >--- > kernel/dma/debug.c | 13 ++++++++----- > kernel/dma/debug.h | 19 +++++++++++-------- > kernel/dma/mapping.c | 8 ++++---- > 3 files changed, 23 insertions(+), 17 deletions(-) > >diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c >index f07e6a1e9fbab..3dfed51c3d9aa 100644 >--- a/kernel/dma/debug.c >+++ b/kernel/dma/debug.c >@@ -1307,8 +1307,8 @@ void debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr) > } > EXPORT_SYMBOL(debug_dma_mapping_error); > >-void debug_dma_unmap_phys(struct device *dev, dma_addr_t dma_addr, >- size_t size, int direction) >+void debug_dma_unmap_phys(struct device *dev, dma_addr_t dma_addr, size_t size, >+ int direction, unsigned long attrs) > { > struct dma_debug_entry ref = { > .type = dma_debug_phy, >@@ -1316,6 +1316,7 @@ void debug_dma_unmap_phys(struct device *dev, dma_addr_t dma_addr, > .dev_addr = dma_addr, > .size = size, > .direction = direction, >+ .attrs = attrs, > }; > > if (unlikely(dma_debug_disabled())) >@@ -1381,7 +1382,7 @@ static int get_nr_mapped_entries(struct device *dev, > } > > void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, >- int nelems, int dir) >+ int nelems, int dir, unsigned long attrs) > { > struct scatterlist *s; > int mapped_ents = 0, i; >@@ -1399,6 +1400,7 @@ void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, > .size = sg_dma_len(s), > .direction = dir, > .sg_call_ents = nelems, >+ .attrs = attrs, > }; > > if (mapped_ents && i >= mapped_ents) >@@ -1454,8 +1456,8 @@ void debug_dma_alloc_coherent(struct device *dev, size_t size, > add_dma_entry(entry); > } > >-void debug_dma_free_coherent(struct device *dev, size_t size, >- void *virt, dma_addr_t dma_addr) >+void debug_dma_free_coherent(struct device *dev, size_t size, void *virt, >+ dma_addr_t dma_addr, unsigned long attrs) > { > struct dma_debug_entry ref = { > .type = dma_debug_coherent, >@@ -1463,6 +1465,7 @@ void debug_dma_free_coherent(struct device *dev, size_t size, > .dev_addr = dma_addr, > .size = size, > .direction = DMA_BIDIRECTIONAL, >+ .attrs = attrs, > }; > > /* handle vmalloc and linear addresses */ >diff --git a/kernel/dma/debug.h b/kernel/dma/debug.h >index 24b8610850fbd..13e384633c32a 100644 >--- a/kernel/dma/debug.h >+++ b/kernel/dma/debug.h >@@ -14,21 +14,22 @@ extern void debug_dma_map_phys(struct device *dev, phys_addr_t phys, > unsigned long attrs); > > extern void debug_dma_unmap_phys(struct device *dev, dma_addr_t addr, >- size_t size, int direction); >+ size_t size, int direction, >+ unsigned long attrs); > > extern void debug_dma_map_sg(struct device *dev, struct scatterlist *sg, > int nents, int mapped_ents, int direction, > unsigned long attrs); > > extern void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, >- int nelems, int dir); >+ int nelems, int dir, unsigned long attrs); > > extern void debug_dma_alloc_coherent(struct device *dev, size_t size, > dma_addr_t dma_addr, void *virt, > unsigned long attrs); > >-extern void debug_dma_free_coherent(struct device *dev, size_t size, >- void *virt, dma_addr_t addr); >+extern void debug_dma_free_coherent(struct device *dev, size_t size, void *virt, >+ dma_addr_t addr, unsigned long attrs); > > extern void debug_dma_sync_single_for_cpu(struct device *dev, > dma_addr_t dma_handle, size_t size, >@@ -59,7 +60,8 @@ static inline void debug_dma_map_phys(struct device *dev, phys_addr_t phys, > } > > static inline void debug_dma_unmap_phys(struct device *dev, dma_addr_t addr, >- size_t size, int direction) >+ size_t size, int direction, >+ unsigned long attrs) > { > } > >@@ -70,8 +72,8 @@ static inline void debug_dma_map_sg(struct device *dev, struct scatterlist *sg, > } > > static inline void debug_dma_unmap_sg(struct device *dev, >- struct scatterlist *sglist, >- int nelems, int dir) >+ struct scatterlist *sglist, int nelems, >+ int dir, unsigned long attrs) > { > } > >@@ -82,7 +84,8 @@ static inline void debug_dma_alloc_coherent(struct device *dev, size_t size, > } > > static inline void debug_dma_free_coherent(struct device *dev, size_t size, >- void *virt, dma_addr_t addr) >+ void *virt, dma_addr_t addr, >+ unsigned long attrs) > { > } > >diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c >index 6cbefbd4158c8..f010b3cc0ece4 100644 >--- a/kernel/dma/mapping.c >+++ b/kernel/dma/mapping.c >@@ -225,7 +225,7 @@ void dma_unmap_phys(struct device *dev, dma_addr_t addr, size_t size, > else if (ops->unmap_phys) > ops->unmap_phys(dev, addr, size, dir, attrs); > trace_dma_unmap_phys(dev, addr, size, dir, attrs); >- debug_dma_unmap_phys(dev, addr, size, dir); >+ debug_dma_unmap_phys(dev, addr, size, dir, attrs); > } > EXPORT_SYMBOL_GPL(dma_unmap_phys); > >@@ -351,7 +351,7 @@ void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, > > BUG_ON(!valid_dma_direction(dir)); > trace_dma_unmap_sg(dev, sg, nents, dir, attrs); >- debug_dma_unmap_sg(dev, sg, nents, dir); >+ debug_dma_unmap_sg(dev, sg, nents, dir, attrs); > if (dma_map_direct(dev, ops) || > arch_dma_unmap_sg_direct(dev, sg, nents)) > dma_direct_unmap_sg(dev, sg, nents, dir, attrs); >@@ -693,7 +693,7 @@ void dma_free_attrs(struct device *dev, size_t size, void *cpu_addr, > if (!cpu_addr) > return; > >- debug_dma_free_coherent(dev, size, cpu_addr, dma_handle); >+ debug_dma_free_coherent(dev, size, cpu_addr, dma_handle, attrs); > if (dma_alloc_direct(dev, ops) || arch_dma_free_direct(dev, dma_handle)) > dma_direct_free(dev, size, cpu_addr, dma_handle, attrs); > else if (use_dma_iommu(dev)) >@@ -840,7 +840,7 @@ void dma_free_noncontiguous(struct device *dev, size_t size, > struct sg_table *sgt, enum dma_data_direction dir) > { > trace_dma_free_sgt(dev, sgt, size, dir); >- debug_dma_unmap_sg(dev, sgt->sgl, sgt->orig_nents, dir); >+ debug_dma_unmap_sg(dev, sgt->sgl, sgt->orig_nents, dir, 0); > > if (use_dma_iommu(dev)) > iommu_dma_free_noncontiguous(dev, size, sgt, dir); > >-- >2.53.0 > > Reviewed-by: Samiullah Khawaja