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]> >
