Re: [PATCH] drm/lima: call drm_mm_init() with a valid allocation range

Qiang Yu <[email protected]>
Newsgroups org.kernel.vger.linux-samsung-soc,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel
Message-ID <CAKGbVbtxGOw1WQcmV-_1aWQpHGZp6yvDPcyVBYYCRF7z8UGwhg@mail.gmail.com>
applied to drm-misc-next

On Tue, Jun 2, 2026 at 3:16 PM Qiang Yu <[email protected]> wrote:
>
> On Mon, Jun 1, 2026 at 8:04 PM Henrik Grimler <[email protected]> wrote:
> >
> > lima_vm_create() is currently run before va_start and va_end are set up,
> > meaning they are both 0. lima_vm_create() runs drm_mm_init() with them
> > as arguments for the allocator, and if DRM_DEBUG_MM is enabled the
> > DRM_MM_BUG_ON check in drm_mm_init then fires, as seen here on
> > exynos4412-odroid-u2:
> >
> > [    1.736297] ------------[ cut here ]------------
> > [    1.740370] kernel BUG at drivers/gpu/drm/drm_mm.c:931!
> > [    1.745574] Internal error: Oops - BUG: 0 [#1] SMP ARM
> > [    1.750697] Modules linked in:
> > [    1.753734] CPU: 0 UID: 0 PID: 41 Comm: kworker/u16:1 Not tainted 7.0.10-postmarketos-exynos4 #11 PREEMPT
> > [    1.763372] Hardware name: Samsung Exynos (Flattened Device Tree)
> > [    1.769446] Workqueue: events_unbound deferred_probe_work_func
> > [    1.775261] PC is at drm_mm_init+0x9c/0xa4
> > [    1.779339] LR is at lima_vm_create+0x144/0x17c
> > [ ... ]
> >
> > Fix the issue by moving the lima_vm_create() call after va_start and
> > va_end are set up.
> >
> > Fixes: a1d2a6339961 ("drm/lima: driver for ARM Mali4xx GPUs")
> > Signed-off-by: Henrik Grimler <[email protected]>
> > ---
> > This is a low priority fix and can wait for v7.2, it does not cause
> > any real issues as far as I have seen: drm_mm_init() is re-run some
> > seconds after first run with correct parameters.
>
> Reviewed-by: Qiang Yu <[email protected]>
>
> drm mm in the empty_vm is not used at all, so no issue caused by it.
> drm mm of a real per app vm matters but they are initialized properly
> after va_start/end set. In fact only the PDE page matters in empty_vm,
> I should only create it instead of the full lima_vm.
>
> > ---
> >  drivers/gpu/drm/lima/lima_device.c | 12 ++++++------
> >  1 file changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/lima/lima_device.c b/drivers/gpu/drm/lima/lima_device.c
> > index 0bf7105c8748..7c873e62c16d 100644
> > --- a/drivers/gpu/drm/lima/lima_device.c
> > +++ b/drivers/gpu/drm/lima/lima_device.c
> > @@ -368,12 +368,6 @@ int lima_device_init(struct lima_device *ldev)
> >         if (err)
> >                 goto err_out0;
> >
> > -       ldev->empty_vm = lima_vm_create(ldev);
> > -       if (!ldev->empty_vm) {
> > -               err = -ENOMEM;
> > -               goto err_out1;
> > -       }
> > -
> >         ldev->va_start = 0;
> >         if (ldev->id == lima_gpu_mali450) {
> >                 ldev->va_end = LIMA_VA_RESERVE_START;
> > @@ -387,6 +381,12 @@ int lima_device_init(struct lima_device *ldev)
> >         } else
> >                 ldev->va_end = LIMA_VA_RESERVE_END;
> >
> > +       ldev->empty_vm = lima_vm_create(ldev);
> > +       if (!ldev->empty_vm) {
> > +               err = -ENOMEM;
> > +               goto err_out1;
> > +       }
> > +
> >         ldev->iomem = devm_platform_ioremap_resource(pdev, 0);
> >         if (IS_ERR(ldev->iomem)) {
> >                 dev_err(ldev->dev, "fail to ioremap iomem\n");
> >
> > ---
> > base-commit: c453c60fdba437f69209e027b418c4a24143605a
> > change-id: 20260529-lima-alloc-fix-2cd5408f6493
> >
> > Best regards,
> > --
> > Henrik Grimler <[email protected]>
> >
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.