* Re: [PATCH v2 3/6] dma-debug: Remove unused DMA attribute parameter
[not found] ` <20260501-dma-attrs-debug-v2-3-8dbac75cd501@nvidia.com>
@ 2026-05-06 17:47 ` Samiullah Khawaja
0 siblings, 0 replies; 7+ messages in thread
From: Samiullah Khawaja @ 2026-05-06 17:47 UTC (permalink / raw)
To: Leon Romanovsky
Cc: Marek Szyprowski, Robin Murphy, Jon Mason, Dave Jiang,
Allen Hubbe, iommu, linux-kernel, ntb
On Fri, May 01, 2026 at 09:35:07AM +0300, Leon Romanovsky wrote:
>From: Leon Romanovsky <leonro@nvidia.com>
>
>debug_dma_alloc_pages() always receives a DMA attribute value of 0,
>because dma_alloc_pages() never receives any attributes from its callers.
>As preparation for upcoming patches, remove this unused attribute from
>the debug routine.
>
>Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
>---
> kernel/dma/debug.c | 5 ++---
> kernel/dma/debug.h | 6 ++----
> kernel/dma/mapping.c | 2 +-
> 3 files changed, 5 insertions(+), 8 deletions(-)
>
>diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
>index 1a725edbbbf6a..3b53495337f5c 100644
>--- a/kernel/dma/debug.c
>+++ b/kernel/dma/debug.c
>@@ -1567,8 +1567,7 @@ void debug_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
>
> void debug_dma_alloc_pages(struct device *dev, struct page *page,
> size_t size, int direction,
>- dma_addr_t dma_addr,
>- unsigned long attrs)
>+ dma_addr_t dma_addr)
> {
> struct dma_debug_entry *entry;
>
>@@ -1586,7 +1585,7 @@ void debug_dma_alloc_pages(struct device *dev, struct page *page,
> entry->dev_addr = dma_addr;
> entry->direction = direction;
>
>- add_dma_entry(entry, attrs);
>+ add_dma_entry(entry, 0);
> }
>
> void debug_dma_free_pages(struct device *dev, struct page *page,
>diff --git a/kernel/dma/debug.h b/kernel/dma/debug.h
>index da7be0bddcf67..24b8610850fbd 100644
>--- a/kernel/dma/debug.h
>+++ b/kernel/dma/debug.h
>@@ -47,8 +47,7 @@ extern void debug_dma_sync_sg_for_device(struct device *dev,
> int nelems, int direction);
> extern void debug_dma_alloc_pages(struct device *dev, struct page *page,
> size_t size, int direction,
>- dma_addr_t dma_addr,
>- unsigned long attrs);
>+ dma_addr_t dma_addr);
> extern void debug_dma_free_pages(struct device *dev, struct page *page,
> size_t size, int direction,
> dma_addr_t dma_addr);
>@@ -113,8 +112,7 @@ static inline void debug_dma_sync_sg_for_device(struct device *dev,
>
> static inline void debug_dma_alloc_pages(struct device *dev, struct page *page,
> size_t size, int direction,
>- dma_addr_t dma_addr,
>- unsigned long attrs)
>+ dma_addr_t dma_addr)
> {
> }
>
>diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
>index 23ed8eb9233e5..6cbefbd4158c8 100644
>--- a/kernel/dma/mapping.c
>+++ b/kernel/dma/mapping.c
>@@ -733,7 +733,7 @@ struct page *dma_alloc_pages(struct device *dev, size_t size,
> if (page) {
> trace_dma_alloc_pages(dev, page_to_virt(page), *dma_handle,
> size, dir, gfp, 0);
>- debug_dma_alloc_pages(dev, page, size, dir, *dma_handle, 0);
>+ debug_dma_alloc_pages(dev, page, size, dir, *dma_handle);
> } else {
> trace_dma_alloc_pages(dev, NULL, 0, size, dir, gfp, 0);
> }
>
>--
>2.53.0
>
>
Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 4/6] dma-debug: Record DMA attributes in debug entry
[not found] ` <20260501-dma-attrs-debug-v2-4-8dbac75cd501@nvidia.com>
@ 2026-05-06 17:53 ` Samiullah Khawaja
0 siblings, 0 replies; 7+ messages in thread
From: Samiullah Khawaja @ 2026-05-06 17:53 UTC (permalink / raw)
To: Leon Romanovsky
Cc: Marek Szyprowski, Robin Murphy, Jon Mason, Dave Jiang,
Allen Hubbe, iommu, linux-kernel, ntb
On Fri, May 01, 2026 at 09:35:08AM +0300, Leon Romanovsky wrote:
>From: Leon Romanovsky <leonro@nvidia.com>
>
>To enable reliable comparison of DMA attributes between map and
>unmap operations, store the attribute value in dma_debug_entry.
>
>Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
>---
> kernel/dma/debug.c | 48 +++++++++++++++++++++++++++++-------------------
> 1 file changed, 29 insertions(+), 19 deletions(-)
>
>diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
>index 3b53495337f5c..f07e6a1e9fbab 100644
>--- a/kernel/dma/debug.c
>+++ b/kernel/dma/debug.c
>@@ -63,7 +63,7 @@ enum map_err_types {
> * @sg_mapped_ents: 'mapped_ents' from dma_map_sg
> * @paddr: physical start address of the mapping
> * @map_err_type: track whether dma_mapping_error() was checked
>- * @is_cache_clean: driver promises not to write to buffer while mapped
>+ * @attrs: dma attributes
> * @stack_len: number of backtrace entries in @stack_entries
> * @stack_entries: stack of backtrace history
> */
>@@ -78,7 +78,7 @@ struct dma_debug_entry {
> int sg_mapped_ents;
> phys_addr_t paddr;
> enum map_err_types map_err_type;
>- bool is_cache_clean;
>+ unsigned long attrs;
> #ifdef CONFIG_STACKTRACE
> unsigned int stack_len;
> unsigned long stack_entries[DMA_DEBUG_STACKTRACE_ENTRIES];
>@@ -478,6 +478,9 @@ static int active_cacheline_insert(struct dma_debug_entry *entry,
> bool *overlap_cache_clean)
> {
> phys_addr_t cln = to_cacheline_number(entry);
>+ bool is_cache_clean = entry->attrs &
>+ (DMA_ATTR_DEBUGGING_IGNORE_CACHELINES |
>+ DMA_ATTR_REQUIRE_COHERENT);
> unsigned long flags;
> int rc;
>
>@@ -495,12 +498,15 @@ static int active_cacheline_insert(struct dma_debug_entry *entry,
> if (rc == -EEXIST) {
> struct dma_debug_entry *existing;
>
>- active_cacheline_inc_overlap(cln, entry->is_cache_clean);
>+ active_cacheline_inc_overlap(cln, is_cache_clean);
> existing = radix_tree_lookup(&dma_active_cacheline, cln);
> /* A lookup failure here after we got -EEXIST is unexpected. */
> WARN_ON(!existing);
> if (existing)
>- *overlap_cache_clean = existing->is_cache_clean;
>+ *overlap_cache_clean =
>+ existing->attrs &
>+ (DMA_ATTR_DEBUGGING_IGNORE_CACHELINES |
>+ DMA_ATTR_REQUIRE_COHERENT);
> }
> spin_unlock_irqrestore(&radix_lock, flags);
>
>@@ -544,12 +550,13 @@ void debug_dma_dump_mappings(struct device *dev)
> if (!dev || dev == entry->dev) {
> cln = to_cacheline_number(entry);
> dev_info(entry->dev,
>- "%s idx %d P=%pa D=%llx L=%llx cln=%pa %s %s\n",
>+ "%s idx %d P=%pa D=%llx L=%llx cln=%pa %s %s attrs=0x%lx\n",
> type2name[entry->type], idx,
> &entry->paddr, entry->dev_addr,
> entry->size, &cln,
> dir2name[entry->direction],
>- maperr2str[entry->map_err_type]);
>+ maperr2str[entry->map_err_type],
>+ entry->attrs);
> }
> }
> spin_unlock_irqrestore(&bucket->lock, flags);
>@@ -575,14 +582,15 @@ static int dump_show(struct seq_file *seq, void *v)
> list_for_each_entry(entry, &bucket->list, list) {
> cln = to_cacheline_number(entry);
> seq_printf(seq,
>- "%s %s %s idx %d P=%pa D=%llx L=%llx cln=%pa %s %s\n",
>+ "%s %s %s idx %d P=%pa D=%llx L=%llx cln=%pa %s %s attrs=0x%lx\n",
> dev_driver_string(entry->dev),
> dev_name(entry->dev),
> type2name[entry->type], idx,
> &entry->paddr, entry->dev_addr,
> entry->size, &cln,
> dir2name[entry->direction],
>- maperr2str[entry->map_err_type]);
>+ maperr2str[entry->map_err_type],
>+ entry->attrs);
> }
> spin_unlock_irqrestore(&bucket->lock, flags);
> }
>@@ -594,16 +602,14 @@ DEFINE_SHOW_ATTRIBUTE(dump);
> * Wrapper function for adding an entry to the hash.
> * This function takes care of locking itself.
> */
>-static void add_dma_entry(struct dma_debug_entry *entry, unsigned long attrs)
>+static void add_dma_entry(struct dma_debug_entry *entry)
> {
>+ unsigned long attrs = entry->attrs;
> bool overlap_cache_clean;
> struct hash_bucket *bucket;
> unsigned long flags;
> int rc;
>
>- entry->is_cache_clean = attrs & (DMA_ATTR_DEBUGGING_IGNORE_CACHELINES |
>- DMA_ATTR_REQUIRE_COHERENT);
>-
> bucket = get_hash_bucket(entry, &flags);
> hash_bucket_add(bucket, entry);
> put_hash_bucket(bucket, flags);
>@@ -612,9 +618,10 @@ static void add_dma_entry(struct dma_debug_entry *entry, unsigned long attrs)
> if (rc == -ENOMEM) {
> pr_err_once("cacheline tracking ENOMEM, dma-debug disabled\n");
> global_disable = true;
>- } else if (rc == -EEXIST &&
>- !(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
>- !(entry->is_cache_clean && overlap_cache_clean) &&
>+ } else if (rc == -EEXIST && !(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
>+ !(attrs & (DMA_ATTR_DEBUGGING_IGNORE_CACHELINES |
>+ DMA_ATTR_REQUIRE_COHERENT) &&
>+ overlap_cache_clean) &&
> dma_get_cache_alignment() >= L1_CACHE_BYTES &&
> !(IS_ENABLED(CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC) &&
> is_swiotlb_active(entry->dev))) {
>@@ -1250,6 +1257,7 @@ void debug_dma_map_phys(struct device *dev, phys_addr_t phys, size_t size,
> entry->size = size;
> entry->direction = direction;
> entry->map_err_type = MAP_ERR_NOT_CHECKED;
>+ entry->attrs = attrs;
>
> if (!(attrs & DMA_ATTR_MMIO)) {
> check_for_stack(dev, phys);
>@@ -1258,7 +1266,7 @@ void debug_dma_map_phys(struct device *dev, phys_addr_t phys, size_t size,
> check_for_illegal_area(dev, phys_to_virt(phys), size);
> }
>
>- add_dma_entry(entry, attrs);
>+ add_dma_entry(entry);
> }
>
> void debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
>@@ -1345,10 +1353,11 @@ void debug_dma_map_sg(struct device *dev, struct scatterlist *sg,
> entry->direction = direction;
> entry->sg_call_ents = nents;
> entry->sg_mapped_ents = mapped_ents;
>+ entry->attrs = attrs;
>
> check_sg_segment(dev, s);
>
>- add_dma_entry(entry, attrs);
>+ add_dma_entry(entry);
> }
> }
>
>@@ -1440,8 +1449,9 @@ void debug_dma_alloc_coherent(struct device *dev, size_t size,
Unrelated to this patch/series, but I am wondering whether we should
rename this function to debug_dma_alloc_attrs() as it is called from
dma_alloc_attrs().
> entry->size = size;
> entry->dev_addr = dma_addr;
> entry->direction = DMA_BIDIRECTIONAL;
>+ entry->attrs = attrs;
>
>- add_dma_entry(entry, attrs);
>+ add_dma_entry(entry);
> }
>
> void debug_dma_free_coherent(struct device *dev, size_t size,
>@@ -1585,7 +1595,7 @@ void debug_dma_alloc_pages(struct device *dev, struct page *page,
> entry->dev_addr = dma_addr;
> entry->direction = direction;
>
>- add_dma_entry(entry, 0);
>+ add_dma_entry(entry);
> }
>
> void debug_dma_free_pages(struct device *dev, struct page *page,
>
>--
>2.53.0
>
>
Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 5/6] dma-debug: Feed DMA attribute for unmapping flows too
[not found] ` <20260501-dma-attrs-debug-v2-5-8dbac75cd501@nvidia.com>
@ 2026-05-06 18:06 ` Samiullah Khawaja
0 siblings, 0 replies; 7+ messages in thread
From: Samiullah Khawaja @ 2026-05-06 18:06 UTC (permalink / raw)
To: Leon Romanovsky
Cc: Marek Szyprowski, Robin Murphy, Jon Mason, Dave Jiang,
Allen Hubbe, iommu, linux-kernel, ntb
On Fri, May 01, 2026 at 09:35:09AM +0300, Leon Romanovsky wrote:
>From: Leon Romanovsky <leonro@nvidia.com>
>
>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 <leonro@nvidia.com>
>---
> 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 <skhawaja@google.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 6/6] dma-debug: Ensure mappings are created and released with matching attributes
[not found] ` <20260501-dma-attrs-debug-v2-6-8dbac75cd501@nvidia.com>
@ 2026-05-06 18:16 ` Samiullah Khawaja
0 siblings, 0 replies; 7+ messages in thread
From: Samiullah Khawaja @ 2026-05-06 18:16 UTC (permalink / raw)
To: Leon Romanovsky
Cc: Marek Szyprowski, Robin Murphy, Jon Mason, Dave Jiang,
Allen Hubbe, iommu, linux-kernel, ntb
On Fri, May 01, 2026 at 09:35:10AM +0300, Leon Romanovsky wrote:
>From: Leon Romanovsky <leonro@nvidia.com>
>
>The DMA API expects that callers use the same attributes when mapping
>and unmapping. Add tracking to verify this and catch mismatches.
>
>Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
>---
> kernel/dma/debug.c | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
>diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
>index 3dfed51c3d9aa..c38efc1ac8d6c 100644
>--- a/kernel/dma/debug.c
>+++ b/kernel/dma/debug.c
>@@ -1074,6 +1074,29 @@ static void check_unmap(struct dma_debug_entry *ref)
> type2name[entry->type]);
> }
>
>+ /*
>+ * This may be no bug in reality - but DMA API still expects
>+ * that entry is unmapped with same attributes as it was mapped.
>+ *
>+ * DMA_ATTR_UNMAP_VALID lists the attributes that must be identical
>+ * between map and unmap. Any attribute outside this set (e.g.
>+ * DMA_ATTR_NO_WARN, DMA_ATTR_SKIP_CPU_SYNC) is allowed to differ.
>+ */
>+#define DMA_ATTR_UNMAP_VALID \
>+ (DMA_ATTR_NO_KERNEL_MAPPING | DMA_ATTR_FORCE_CONTIGUOUS | \
>+ DMA_ATTR_MMIO | DMA_ATTR_REQUIRE_COHERENT | DMA_ATTR_PRIVILEGED | \
>+ DMA_ATTR_CC_SHARED)
>+ if ((ref->attrs & DMA_ATTR_UNMAP_VALID) !=
>+ (entry->attrs & DMA_ATTR_UNMAP_VALID)) {
>+ err_printk(ref->dev, entry,
>+ "device driver frees "
>+ "DMA memory with different attributes "
>+ "[device address=0x%016llx] [size=%llu bytes] "
>+ "[mapped with 0x%lx] [unmapped with 0x%lx]\n",
>+ ref->dev_addr, ref->size, entry->attrs, ref->attrs);
>+ }
>+#undef DMA_ATTR_UNMAP_VALID
>+
> hash_bucket_del(entry);
> put_hash_bucket(bucket, flags);
>
>
>--
>2.53.0
>
>
Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/6] Add DMA attributes tracking
[not found] ` <20260501-dma-attrs-debug-v2-0-8dbac75cd501@nvidia.com>
` (3 preceding siblings ...)
[not found] ` <20260501-dma-attrs-debug-v2-6-8dbac75cd501@nvidia.com>
@ 2026-05-08 8:50 ` Marek Szyprowski
2026-05-08 16:20 ` Dave Jiang
4 siblings, 1 reply; 7+ messages in thread
From: Marek Szyprowski @ 2026-05-08 8:50 UTC (permalink / raw)
To: Leon Romanovsky, Robin Murphy, Jon Mason, Dave Jiang, Allen Hubbe
Cc: iommu, linux-kernel, ntb
On 01.05.2026 08:35, Leon Romanovsky wrote:
> The DMA API expects that callers use the same attributes when mapping
> and unmapping. Add tracking to verify this and catch mismatches.
I would like to merge this to dma-mapping-for-next, but I have a question about ntb
patches - Jon, Dave, Allen: do You plan to take them (either to the fixes or to the
-next) or do You want me to take them together with dma patches?
> Thanks
>
> ---
> Changes in v2:
> - Split original patch to be a series
> - Added all unmap flows
> - Skipped DMA attributes which exist only in map path
> - Added ntb patch
> - Link to v1: https://protect2.fireeye.com/v1/url?k=70e722e7-116c37d7-70e6a9a8-000babffaa23-c39f7f9efe32c6a2&q=1&e=c79241ff-9ff4-40ae-8e29-753dd9d59f23&u=https%3A%2F%2Fpatch.msgid.link%2F20260323-dma-attrs-debug-v1-1-6275228ca300%40nvidia.com
>
> ---
> Leon Romanovsky (6):
> ntb: Store original DMA address for future release
> ntb: Use consistent DMA attributes when freeing DMA mappings
> dma-debug: Remove unused DMA attribute parameter
> dma-debug: Record DMA attributes in debug entry
> dma-debug: Feed DMA attribute for unmapping flows too
> dma-debug: Ensure mappings are created and released with matching attributes
>
> drivers/ntb/ntb_transport.c | 10 +++---
> kernel/dma/debug.c | 87 +++++++++++++++++++++++++++++++--------------
> kernel/dma/debug.h | 25 ++++++-------
> kernel/dma/mapping.c | 10 +++---
> 4 files changed, 85 insertions(+), 47 deletions(-)
> ---
> base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
> change-id: 20260323-dma-attrs-debug-85e282d6f3bb
>
> Best regards,
> --
> Leon Romanovsky <leonro@nvidia.com>
>
>
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/6] Add DMA attributes tracking
2026-05-08 8:50 ` [PATCH v2 0/6] Add DMA attributes tracking Marek Szyprowski
@ 2026-05-08 16:20 ` Dave Jiang
2026-05-08 20:31 ` Marek Szyprowski
0 siblings, 1 reply; 7+ messages in thread
From: Dave Jiang @ 2026-05-08 16:20 UTC (permalink / raw)
To: Marek Szyprowski, Leon Romanovsky, Robin Murphy, Jon Mason,
Allen Hubbe
Cc: iommu, linux-kernel, ntb
On 5/8/26 1:50 AM, Marek Szyprowski wrote:
> On 01.05.2026 08:35, Leon Romanovsky wrote:
>> The DMA API expects that callers use the same attributes when mapping
>> and unmapping. Add tracking to verify this and catch mismatches.
>
> I would like to merge this to dma-mapping-for-next, but I have a question about ntb
> patches - Jon, Dave, Allen: do You plan to take them (either to the fixes or to the
> -next) or do You want me to take them together with dma patches?
Please go ahead and take them together. Thanks!
>
>
>> Thanks
>>
>> ---
>> Changes in v2:
>> - Split original patch to be a series
>> - Added all unmap flows
>> - Skipped DMA attributes which exist only in map path
>> - Added ntb patch
>> - Link to v1: https://protect2.fireeye.com/v1/url?k=70e722e7-116c37d7-70e6a9a8-000babffaa23-c39f7f9efe32c6a2&q=1&e=c79241ff-9ff4-40ae-8e29-753dd9d59f23&u=https%3A%2F%2Fpatch.msgid.link%2F20260323-dma-attrs-debug-v1-1-6275228ca300%40nvidia.com
>>
>> ---
>> Leon Romanovsky (6):
>> ntb: Store original DMA address for future release
>> ntb: Use consistent DMA attributes when freeing DMA mappings
>> dma-debug: Remove unused DMA attribute parameter
>> dma-debug: Record DMA attributes in debug entry
>> dma-debug: Feed DMA attribute for unmapping flows too
>> dma-debug: Ensure mappings are created and released with matching attributes
>>
>> drivers/ntb/ntb_transport.c | 10 +++---
>> kernel/dma/debug.c | 87 +++++++++++++++++++++++++++++++--------------
>> kernel/dma/debug.h | 25 ++++++-------
>> kernel/dma/mapping.c | 10 +++---
>> 4 files changed, 85 insertions(+), 47 deletions(-)
>> ---
>> base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
>> change-id: 20260323-dma-attrs-debug-85e282d6f3bb
>>
>> Best regards,
>> --
>> Leon Romanovsky <leonro@nvidia.com>
>>
>>
> Best regards
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/6] Add DMA attributes tracking
2026-05-08 16:20 ` Dave Jiang
@ 2026-05-08 20:31 ` Marek Szyprowski
0 siblings, 0 replies; 7+ messages in thread
From: Marek Szyprowski @ 2026-05-08 20:31 UTC (permalink / raw)
To: Dave Jiang, Leon Romanovsky, Robin Murphy, Jon Mason, Allen Hubbe
Cc: iommu, linux-kernel, ntb
On 08.05.2026 18:20, Dave Jiang wrote:
> On 5/8/26 1:50 AM, Marek Szyprowski wrote:
>> On 01.05.2026 08:35, Leon Romanovsky wrote:
>>> The DMA API expects that callers use the same attributes when mapping
>>> and unmapping. Add tracking to verify this and catch mismatches.
>> I would like to merge this to dma-mapping-for-next, but I have a question about ntb
>> patches - Jon, Dave, Allen: do You plan to take them (either to the fixes or to the
>> -next) or do You want me to take them together with dma patches?
> Please go ahead and take them together. Thanks!
Applied all patches to dma-mapping-for-next. Thanks!
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-05-08 20:31 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <CGME20260501063531eucas1p1019e81b1904fc7f0811b3c50cbbf9567@eucas1p1.samsung.com>
[not found] ` <20260501-dma-attrs-debug-v2-0-8dbac75cd501@nvidia.com>
[not found] ` <20260501-dma-attrs-debug-v2-3-8dbac75cd501@nvidia.com>
2026-05-06 17:47 ` [PATCH v2 3/6] dma-debug: Remove unused DMA attribute parameter Samiullah Khawaja
[not found] ` <20260501-dma-attrs-debug-v2-4-8dbac75cd501@nvidia.com>
2026-05-06 17:53 ` [PATCH v2 4/6] dma-debug: Record DMA attributes in debug entry Samiullah Khawaja
[not found] ` <20260501-dma-attrs-debug-v2-5-8dbac75cd501@nvidia.com>
2026-05-06 18:06 ` [PATCH v2 5/6] dma-debug: Feed DMA attribute for unmapping flows too Samiullah Khawaja
[not found] ` <20260501-dma-attrs-debug-v2-6-8dbac75cd501@nvidia.com>
2026-05-06 18:16 ` [PATCH v2 6/6] dma-debug: Ensure mappings are created and released with matching attributes Samiullah Khawaja
2026-05-08 8:50 ` [PATCH v2 0/6] Add DMA attributes tracking Marek Szyprowski
2026-05-08 16:20 ` Dave Jiang
2026-05-08 20:31 ` Marek Szyprowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox