* [RFT 0/5] drm/msm: DMABUF_DEBUG fixes
@ 2026-10-06 13:09 Rob Clark
2026-10-07 13:15 ` Jianfeng Liu
0 siblings, 1 reply; 3+ messages in thread
From: Rob Clark @ 2026-10-06 13:09 UTC (permalink / raw)
To: dri-devel
Cc: linux-arm-msm, freedreno, Jianfeng Liu, Christian König,
Rob Clark, Abel Vesa, Abhinav Kumar, Andrei Kuchynski,
Benson Leung, Chia-Lin Kao (AceLan), David Airlie,
Dmitry Baryshkov, Greg Kroah-Hartman, Heikki Krogerus,
Hsin-Te Yuan, Jessica Zhang, Johan Hovold, open list,
open list:USB TYPEC CLASS, Marijn Suijten, Pooja Katiyar,
Sean Paul, Simona Vetter
With DMABUF_DEBUG=y, the page information is stripped from the sgt that
we get for an externally allocated buffer that is dma-buf imported (as
opposed to an exported GEM buffer that is re-imported). This is a bit
unfortunate, since we need that information for mapping the buffer in
both paths:
1. Userspace GPU pgtables (TTBR0), where we use io_pgtable directly.
Fortunately this we can fix ourselves easily.
2. Iommu managed pgtables (scanout, kernel GPU buffers (TTBR1)). In
normal usage that iommu subsystem envisions the dma-mapping and
iommu-mapping are combined. We can't really work around this but
we can stop trying to pretend to be a normal iommu user and just
go directly to the iommu_domain_ops.
This all depends on being dma_map_direct() for the dma_map_sgtable()
to work. This should be the case on modern things that use arm-smmu.
It's less clear when it comes to older pre-arm-smmu hw. It's possible
that this series causes those things to catch fire. If so, look to
commit 0e764a01015d ("iommu/arm-smmu: Allow client devices to select
direct mapping") for inspiration.
Rob Clark (5):
drm/msm: Cleanup if pages_to_sg() fails
drm/msm/gem: dma_map/unmap_sgtable()
drm/msm: Extract out map/unmap helpers
drm/msm: Convert iommu map/unmap to helpers
drm/msm: Convert map helper to use dma-address
drivers/gpu/drm/msm/msm_gem.c | 57 ++++++----
drivers/gpu/drm/msm/msm_iommu.c | 182 ++++++++++++++++++++------------
2 files changed, 153 insertions(+), 86 deletions(-)
--
2.55.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFT 0/5] drm/msm: DMABUF_DEBUG fixes
2026-10-06 13:09 [RFT 0/5] drm/msm: DMABUF_DEBUG fixes Rob Clark
@ 2026-10-07 13:15 ` Jianfeng Liu
2026-10-07 15:54 ` Rob Clark
0 siblings, 1 reply; 3+ messages in thread
From: Jianfeng Liu @ 2026-10-07 13:15 UTC (permalink / raw)
To: robin.clark
Cc: abelvesa, abhinav.kumar, acelan.kao, airlied, akuchynski, bleung,
christian.koenig, dri-devel, freedreno, gregkh, heikki.krogerus,
jesszhan0024, johan, linux-arm-msm, linux-kernel, linux-usb,
liujianfeng1994, lumag, marijn.suijten, pooja.katiyar, sean,
simona, yuanhsinte
Hi Rob,
On Tue, Oct 6, 2026 at 6:09 AM Rob Clark wrote:
> With DMABUF_DEBUG=y, the page information is stripped from the sgt that
> we get for an externally allocated buffer that is dma-buf imported (as
> opposed to an exported GEM buffer that is re-imported). [...]
Tested on the machine that originally reported the breakage - this
exercises exactly the externally-allocated-buffer case from your cover
letter:
Tested-by: Jianfeng Liu <liujianfeng1994@gmail.com> # x1e78100 (Acer
SFA14-11), v7.3-rc5 + this series, CONFIG_DMABUF_DEBUG=y
Hardware video decode in chromium (V4L2 decoder capture buffers from
videobuf2-dma-contig imported into msm and rendered by the GPU)
displays correctly, with zero arm-smmu faults and zero io-pgtable
WARNs. For comparison, on plain v7.3-rc5 with DMABUF_DEBUG=y the
same workload logs UCHE translation faults and a __arm_lpae_unmap()
WARN storm (~470 traces per minute of playback).
This is also much cleaner than the translation-based approach in the
follow-up series I withdrew - mapping from the DMA addresses is where
I should have ended up in the first place.
One small suggestion for __do_map(): panthor treats "map_pages()
mapped nothing" as an error (panthor_mmu.c):
/* If nothing was mapped, consider it an ENOMEM. */
if (!ret && !mapped)
ret = -ENOMEM;
With the DMA fields now populated on both paths this should not
trigger in practice, but it would turn any future regression back
into a loud failure instead of a silent empty mapping - which is
the failure mode this whole series fixes.
Happy to run more (heap-exported dmabuf import test, kmssink scanout
of V4L2 frames) on any revision.
BR,
Jianfeng
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFT 0/5] drm/msm: DMABUF_DEBUG fixes
2026-10-07 13:15 ` Jianfeng Liu
@ 2026-10-07 15:54 ` Rob Clark
0 siblings, 0 replies; 3+ messages in thread
From: Rob Clark @ 2026-10-07 15:54 UTC (permalink / raw)
To: Jianfeng Liu
Cc: abelvesa, abhinav.kumar, acelan.kao, airlied, akuchynski, bleung,
christian.koenig, dri-devel, freedreno, gregkh, heikki.krogerus,
jesszhan0024, johan, linux-arm-msm, linux-kernel, linux-usb,
lumag, marijn.suijten, pooja.katiyar, sean, simona, yuanhsinte
On Wed, Oct 7, 2026 at 6:16 AM Jianfeng Liu <liujianfeng1994@gmail.com> wrote:
>
> Hi Rob,
>
> On Tue, Oct 6, 2026 at 6:09 AM Rob Clark wrote:
> > With DMABUF_DEBUG=y, the page information is stripped from the sgt that
> > we get for an externally allocated buffer that is dma-buf imported (as
> > opposed to an exported GEM buffer that is re-imported). [...]
>
> Tested on the machine that originally reported the breakage - this
> exercises exactly the externally-allocated-buffer case from your cover
> letter:
>
> Tested-by: Jianfeng Liu <liujianfeng1994@gmail.com> # x1e78100 (Acer
> SFA14-11), v7.3-rc5 + this series, CONFIG_DMABUF_DEBUG=y
>
> Hardware video decode in chromium (V4L2 decoder capture buffers from
> videobuf2-dma-contig imported into msm and rendered by the GPU)
> displays correctly, with zero arm-smmu faults and zero io-pgtable
> WARNs. For comparison, on plain v7.3-rc5 with DMABUF_DEBUG=y the
> same workload logs UCHE translation faults and a __arm_lpae_unmap()
> WARN storm (~470 traces per minute of playback).
>
> This is also much cleaner than the translation-based approach in the
> follow-up series I withdrew - mapping from the DMA addresses is where
> I should have ended up in the first place.
>
> One small suggestion for __do_map(): panthor treats "map_pages()
> mapped nothing" as an error (panthor_mmu.c):
>
> /* If nothing was mapped, consider it an ENOMEM. */
> if (!ret && !mapped)
> ret = -ENOMEM;
Yeah, that is probably a good idea.
Thanks for testing
BR,
-R
>
> With the DMA fields now populated on both paths this should not
> trigger in practice, but it would turn any future regression back
> into a loud failure instead of a silent empty mapping - which is
> the failure mode this whole series fixes.
>
> Happy to run more (heap-exported dmabuf import test, kmssink scanout
> of V4L2 frames) on any revision.
>
> BR,
> Jianfeng
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-07 15:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-06 13:09 [RFT 0/5] drm/msm: DMABUF_DEBUG fixes Rob Clark
2026-10-07 13:15 ` Jianfeng Liu
2026-10-07 15:54 ` Rob Clark
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox