Re: [PATCH] dma-debug: Skip cacheline tracking for MMIO mappings
From: Leon Romanovsky
Date: Tue Oct 13 2026 - 14:50:11 EST
On Tue, Oct 13, 2026 at 01:43:56PM +0100, Robin Murphy wrote:
> On 13/10/2026 12:44 pm, Leon Romanovsky wrote:
> > From: Leon Romanovsky <leonro@xxxxxxxxxx>
> >
> > Mapping one MMIO dma-buf for many RDMA importers overflows dma-debug's
> > cacheline overlap counter and triggers a warning. DMA_ATTR_MMIO mappings
> > must never be CPU-cacheable, so CPU cacheline overlap tracking does not
> > apply to them.
> >
> > Skip MMIO entries in both cacheline insertion and removal. Keep them in
> > the DMA entry hash so mapping and unmapping checks still run.
>
> Seems fair;
>
> Reviewed-by: Robin Murphy <robin.murphy@xxxxxxx>
>
> [...]
> >
> > Fixes: 0e74b34dfc33 ("dma-debug: add support for resource mappings")
>
> Although it would be a challenge to backport _that_ far, so more
> realistically I'd probably say:
>
> Fixes: 3aa31a8bb11e ("dma-buf: provide phys_vec to scatter-gather mapping
> routine")
This error was probably observed when we started exercising dma-buf in
various corner cases.
Thanks
>
> since regular dma_map_resource() users are still never going to hit this
> making their one-off mapping of a UART FIFO or whatever.
>
> Thanks,
> Robin.
>
> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx>
> > ---
> > kernel/dma/debug.c | 7 +++++--
> > 1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
> > index 026d50de340e..36c1f7cbb2ae 100644
> > --- a/kernel/dma/debug.c
> > +++ b/kernel/dma/debug.c
> > @@ -489,8 +489,10 @@ static int active_cacheline_insert(struct dma_debug_entry *entry,
> > /* If the device is not writing memory then we don't have any
> > * concerns about the cpu consuming stale data. This mitigates
> > * legitimate usages of overlapping mappings.
> > + * MMIO mappings are never CPU-cacheable and do not need tracking either.
> > */
> > - if (entry->direction == DMA_TO_DEVICE)
> > + if (entry->direction == DMA_TO_DEVICE ||
> > + entry->attrs & DMA_ATTR_MMIO)
> > return 0;
> > spin_lock_irqsave(&radix_lock, flags);
> > @@ -519,7 +521,8 @@ static void active_cacheline_remove(struct dma_debug_entry *entry)
> > unsigned long flags;
> > /* ...mirror the insert case */
> > - if (entry->direction == DMA_TO_DEVICE)
> > + if (entry->direction == DMA_TO_DEVICE ||
> > + entry->attrs & DMA_ATTR_MMIO)
> > return;
> > spin_lock_irqsave(&radix_lock, flags);
> >
> > ---
> > base-commit: 39d3758108bb0ef9da484062d65288bbe9cada0e
> > change-id: 20261013-dma-debug-fixes-5aaf1bb17544
> >
> > Best regards,
> > --
> > Leon Romanovsky <leonro@xxxxxxxxxx>
> >
>
>