Re: [PATCH v2 00/21] Refine memblock API

From: Mike Rapoport
Date: Wed Sep 25 2019 - 02:42:29 EST


(updated CC)

Hi,

On Tue, Sep 24, 2019 at 12:52:35PM -0500, Adam Ford wrote:
> On Mon, Jan 21, 2019 at 2:05 AM Mike Rapoport <rppt@xxxxxxxxxxxxx> wrote:
> >
> > Hi,
> >
> > v2 changes:
> > * replace some more %lu with %zu
> > * remove panics where they are not needed in s390 and in printk
> > * collect Acked-by and Reviewed-by.
> >
> >
> > Christophe Leroy (1):
> > powerpc: use memblock functions returning virtual address
> >
> > Mike Rapoport (20):
> > openrisc: prefer memblock APIs returning virtual address
> > memblock: replace memblock_alloc_base(ANYWHERE) with memblock_phys_alloc
> > memblock: drop memblock_alloc_base_nid()
> > memblock: emphasize that memblock_alloc_range() returns a physical address
> > memblock: memblock_phys_alloc_try_nid(): don't panic
> > memblock: memblock_phys_alloc(): don't panic
> > memblock: drop __memblock_alloc_base()
> > memblock: drop memblock_alloc_base()
> > memblock: refactor internal allocation functions
> > memblock: make memblock_find_in_range_node() and choose_memblock_flags() static
> > arch: use memblock_alloc() instead of memblock_alloc_from(size, align, 0)
> > arch: don't memset(0) memory returned by memblock_alloc()
> > ia64: add checks for the return value of memblock_alloc*()
> > sparc: add checks for the return value of memblock_alloc*()
> > mm/percpu: add checks for the return value of memblock_alloc*()
> > init/main: add checks for the return value of memblock_alloc*()
> > swiotlb: add checks for the return value of memblock_alloc*()
> > treewide: add checks for the return value of memblock_alloc*()
> > memblock: memblock_alloc_try_nid: don't panic
> > memblock: drop memblock_alloc_*_nopanic() variants
> >
> I know it's rather late, but this patch broke the Etnaviv 3D graphics
> in my i.MX6Q.

Can you identify the exact patch from the series that caused the
regression?

> When I try to use the 3D, it returns some errors and the dmesg log
> shows some memory allocation errors too:
> [ 3.682347] etnaviv etnaviv: bound 130000.gpu (ops gpu_ops)
> [ 3.688669] etnaviv etnaviv: bound 134000.gpu (ops gpu_ops)
> [ 3.695099] etnaviv etnaviv: bound 2204000.gpu (ops gpu_ops)
> [ 3.700800] etnaviv-gpu 130000.gpu: model: GC2000, revision: 5108
> [ 3.723013] etnaviv-gpu 130000.gpu: command buffer outside valid
> memory window
> [ 3.731308] etnaviv-gpu 134000.gpu: model: GC320, revision: 5007
> [ 3.752437] etnaviv-gpu 134000.gpu: command buffer outside valid
> memory window
> [ 3.760583] etnaviv-gpu 2204000.gpu: model: GC355, revision: 1215
> [ 3.766766] etnaviv-gpu 2204000.gpu: Ignoring GPU with VG and FE2.0
> [ 3.776131] [drm] Initialized etnaviv 1.2.0 20151214 for etnaviv on minor 0
>
> # glmark2-es2-drm
> Error creating gpu
> Error: eglCreateWindowSurface failed with error: 0x3009
> Error: eglCreateWindowSurface failed with error: 0x3009
> Error: CanvasGeneric: Invalid EGL state
> Error: main: Could not initialize canvas
>
>
> Before this patch:
>
> [ 3.691995] etnaviv etnaviv: bound 130000.gpu (ops gpu_ops)
> [ 3.698356] etnaviv etnaviv: bound 134000.gpu (ops gpu_ops)
> [ 3.704792] etnaviv etnaviv: bound 2204000.gpu (ops gpu_ops)
> [ 3.710488] etnaviv-gpu 130000.gpu: model: GC2000, revision: 5108
> [ 3.733649] etnaviv-gpu 134000.gpu: model: GC320, revision: 5007
> [ 3.756115] etnaviv-gpu 2204000.gpu: model: GC355, revision: 1215
> [ 3.762250] etnaviv-gpu 2204000.gpu: Ignoring GPU with VG and FE2.0
> [ 3.771432] [drm] Initialized etnaviv 1.2.0 20151214 for etnaviv on minor 0
>
> and the 3D gemos work without this.
>
> I don't know enough about the i.MX6 nor the 3D accelerator to know how
> to fix it.
> I am hoping someone in the know might have some suggestions.

Can you please add "memblock=debug" to your kernel command line and send
kernel logs for both working and failing versions?

--
Sincerely yours,
Mike.