amdgpu/TTM oopses since merging swiotlb_dma_ops into the dma_direct code

Sibren Vasse sibren at sibrenvasse.nl
Mon Jan 14 19:00:10 UTC 2019


On Mon, 14 Jan 2019 at 19:10, Christoph Hellwig <hch at lst.de> wrote:
>
> On Thu, Jan 10, 2019 at 06:52:26PM +0100, Sibren Vasse wrote:
> > On Thu, 10 Jan 2019 at 15:48, Christoph Hellwig <hch at lst.de> wrote:
> > >
> > > On Thu, Jan 10, 2019 at 03:00:31PM +0100, Christian König wrote:
> > > >>  From the trace it looks like we git the case where swiotlb tries
> > > >> to copy back data from a bounce buffer, but hits a dangling or NULL
> > > >> pointer.  So a couple questions for the submitter:
> > > >>
> > > >>   - does the system have more than 4GB memory and thus use swiotlb?
> > > >>     (check /proc/meminfo, and if something SWIOTLB appears in dmesg)
> > > >>   - does the device this happens on have a DMA mask smaller than
> > > >>     the available memory, that is should swiotlb be used here to start
> > > >>     with?
> > > >
> > > > Rather unlikely. The device is an AMD GPU, so we can address memory up to
> > > > 1TB.
> > >
> > > So we probably somehow got a false positive.
> > >
> > > For now I'like the reported to confirm that the dma_direct_unmap_page+0x92
> > > backtrace really is in the swiotlb code (I can't think of anything else,
> > > but I'd rather be sure).
> > I'm not sure what you want me to confirm. Could you elaborate?
>
> Please open the vmlinux file for which this happend in gdb,
> then send the output from this command
>
>         l *(dma_direct_unmap_page+0x92)
>
> to this thread.
My call trace contained:
Jan 10 16:34:51 <hostname> kernel:  dma_direct_unmap_page+0x7a/0x80

(gdb) list *(dma_direct_unmap_page+0x7a)
0xffffffff810fa28a is in dma_direct_unmap_page (kernel/dma/direct.c:291).
286                     size_t size, enum dma_data_direction dir,
unsigned long attrs)
287     {
288             phys_addr_t phys = dma_to_phys(dev, addr);
289
290             if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
291                     dma_direct_sync_single_for_cpu(dev, addr, size, dir);
292
293             if (unlikely(is_swiotlb_buffer(phys)))
294                     swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs);
295     }


More information about the dri-devel mailing list