From: Dmitry Baryshkov Date: Sat, 23 Aug 2025 00:12:00 +0000 (+0300) Subject: drm/msm: fix msm_gem_vma_new() allocations for managed GPUVMs X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=efe927b9702643a1d80472664c2642f0304cb608;p=users%2Fhch%2Fmisc.git drm/msm: fix msm_gem_vma_new() allocations for managed GPUVMs Since commit 3309323241fb ("drm/gpuvm: Kill drm_gpuva_init()") MSM driver fails to init, failing with "[drm:msm_gpu_init] *ERROR* could not allocate memptrs: -22" errors. The mentioned commit reworked the function, but didn't take into account that op_map is initialized at the top of the function, while ranges might change if GPUVM is managed by the kernel. Move op_mode initialization after finalizing all addresses and right before the drm_gpuva_init_from_op() call. Reported-by: Danct12 Fixes: 3309323241fb ("drm/gpuvm: Kill drm_gpuva_init()") Suggested-by: Rob Clark Reviewed-by: Rob Clark Acked-by: Rob Clark Link: https://lore.kernel.org/r/20250823-msm-fix-gpuvm-init-v1-1-e199cd5b1983@oss.qualcomm.com Signed-off-by: Dmitry Baryshkov --- diff --git a/drivers/gpu/drm/msm/msm_gem_vma.c b/drivers/gpu/drm/msm/msm_gem_vma.c index 210604181c05..c632db9005e2 100644 --- a/drivers/gpu/drm/msm/msm_gem_vma.c +++ b/drivers/gpu/drm/msm/msm_gem_vma.c @@ -371,12 +371,6 @@ struct drm_gpuva * msm_gem_vma_new(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj, u64 offset, u64 range_start, u64 range_end) { - struct drm_gpuva_op_map op_map = { - .va.addr = range_start, - .va.range = range_end - range_start, - .gem.obj = obj, - .gem.offset = offset, - }; struct msm_gem_vm *vm = to_msm_vm(gpuvm); struct drm_gpuvm_bo *vm_bo; struct msm_gem_vma *vma; @@ -405,6 +399,13 @@ msm_gem_vma_new(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj, if (obj) GEM_WARN_ON((range_end - range_start) > obj->size); + struct drm_gpuva_op_map op_map = { + .va.addr = range_start, + .va.range = range_end - range_start, + .gem.obj = obj, + .gem.offset = offset, + }; + drm_gpuva_init_from_op(&vma->base, &op_map); vma->mapped = false;