Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/msm: deal with exhausted vmap space better

Some, but not all, callers of obj->vmap() would check if return
IS_ERR(). So let's actually return an error if vmap() fails. And fixup
the call-sites that were not handling this properly.

Signed-off-by: Rob Clark <robdclark@gmail.com>

Rob Clark 69a834c2 ab3ab684

+14 -1
+1 -1
drivers/gpu/drm/msm/adreno/adreno_gpu.c
··· 408 408 } 409 409 410 410 adreno_gpu->memptrs = msm_gem_vaddr(adreno_gpu->memptrs_bo); 411 - if (!adreno_gpu->memptrs) { 411 + if (IS_ERR(adreno_gpu->memptrs)) { 412 412 dev_err(drm->dev, "could not vmap memptrs\n"); 413 413 return -ENOMEM; 414 414 }
+4
drivers/gpu/drm/msm/msm_fbdev.c
··· 159 159 dev->mode_config.fb_base = paddr; 160 160 161 161 fbi->screen_base = msm_gem_vaddr_locked(fbdev->bo); 162 + if (IS_ERR(fbi->screen_base)) { 163 + ret = PTR_ERR(fbi->screen_base); 164 + goto fail_unlock; 165 + } 162 166 fbi->screen_size = fbdev->bo->size; 163 167 fbi->fix.smem_start = paddr; 164 168 fbi->fix.smem_len = fbdev->bo->size;
+2
drivers/gpu/drm/msm/msm_gem.c
··· 398 398 return ERR_CAST(pages); 399 399 msm_obj->vaddr = vmap(pages, obj->size >> PAGE_SHIFT, 400 400 VM_MAP, pgprot_writecombine(PAGE_KERNEL)); 401 + if (msm_obj->vaddr == NULL) 402 + return ERR_PTR(-ENOMEM); 401 403 } 402 404 return msm_obj->vaddr; 403 405 }
+3
drivers/gpu/drm/msm/msm_rd.c
··· 312 312 struct msm_gem_object *obj = submit->bos[idx].obj; 313 313 const char *buf = msm_gem_vaddr_locked(&obj->base); 314 314 315 + if (IS_ERR(buf)) 316 + continue; 317 + 315 318 buf += iova - submit->bos[idx].iova; 316 319 317 320 rd_write_section(rd, RD_GPUADDR,
+4
drivers/gpu/drm/msm/msm_ringbuffer.c
··· 40 40 } 41 41 42 42 ring->start = msm_gem_vaddr_locked(ring->bo); 43 + if (IS_ERR(ring->start)) { 44 + ret = PTR_ERR(ring->start); 45 + goto fail; 46 + } 43 47 ring->end = ring->start + (size / 4); 44 48 ring->cur = ring->start; 45 49