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

Configure Feed

Select the types of activity you want to include in your feed.

drm/msm: Collapse vma allocation and initialization

Now that we've dropped vram carveout support, we can collapse vma
allocation and initialization. This better matches how things work
with drm_gpuvm.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
Tested-by: Antonino Maniscalco <antomani103@gmail.com>
Reviewed-by: Antonino Maniscalco <antomani103@gmail.com>
Patchwork: https://patchwork.freedesktop.org/patch/661471/

authored by

Rob Clark and committed by
Rob Clark
da0e1407 eab7766c

+20 -50
+3 -27
drivers/gpu/drm/msm/msm_gem.c
··· 333 333 return offset; 334 334 } 335 335 336 - static struct msm_gem_vma *add_vma(struct drm_gem_object *obj, 337 - struct msm_gem_vm *vm) 338 - { 339 - struct msm_gem_object *msm_obj = to_msm_bo(obj); 340 - struct msm_gem_vma *vma; 341 - 342 - msm_gem_assert_locked(obj); 343 - 344 - vma = msm_gem_vma_new(vm); 345 - if (!vma) 346 - return ERR_PTR(-ENOMEM); 347 - 348 - list_add_tail(&vma->list, &msm_obj->vmas); 349 - 350 - return vma; 351 - } 352 - 353 336 static struct msm_gem_vma *lookup_vma(struct drm_gem_object *obj, 354 337 struct msm_gem_vm *vm) 355 338 { ··· 399 416 struct msm_gem_vm *vm, 400 417 u64 range_start, u64 range_end) 401 418 { 419 + struct msm_gem_object *msm_obj = to_msm_bo(obj); 402 420 struct msm_gem_vma *vma; 403 421 404 422 msm_gem_assert_locked(obj); ··· 407 423 vma = lookup_vma(obj, vm); 408 424 409 425 if (!vma) { 410 - int ret; 411 - 412 - vma = add_vma(obj, vm); 426 + vma = msm_gem_vma_new(vm, obj, range_start, range_end); 413 427 if (IS_ERR(vma)) 414 428 return vma; 415 - 416 - ret = msm_gem_vma_init(vma, obj->size, 417 - range_start, range_end); 418 - if (ret) { 419 - del_vma(vma); 420 - return ERR_PTR(ret); 421 - } 429 + list_add_tail(&vma->list, &msm_obj->vmas); 422 430 } else { 423 431 GEM_WARN_ON(vma->iova < range_start); 424 432 GEM_WARN_ON((vma->iova + obj->size) > range_end);
+2 -2
drivers/gpu/drm/msm/msm_gem.h
··· 66 66 bool mapped; 67 67 }; 68 68 69 - struct msm_gem_vma *msm_gem_vma_new(struct msm_gem_vm *vm); 70 - int msm_gem_vma_init(struct msm_gem_vma *vma, int size, 69 + struct msm_gem_vma * 70 + msm_gem_vma_new(struct msm_gem_vm *vm, struct drm_gem_object *obj, 71 71 u64 range_start, u64 range_end); 72 72 void msm_gem_vma_purge(struct msm_gem_vma *vma); 73 73 int msm_gem_vma_map(struct msm_gem_vma *vma, int prot, struct sg_table *sgt, int size);
+15 -21
drivers/gpu/drm/msm/msm_gem_vma.c
··· 106 106 msm_gem_vm_put(vm); 107 107 } 108 108 109 - struct msm_gem_vma *msm_gem_vma_new(struct msm_gem_vm *vm) 109 + /* Create a new vma and allocate an iova for it */ 110 + struct msm_gem_vma * 111 + msm_gem_vma_new(struct msm_gem_vm *vm, struct drm_gem_object *obj, 112 + u64 range_start, u64 range_end) 110 113 { 111 114 struct msm_gem_vma *vma; 115 + int ret; 112 116 113 117 vma = kzalloc(sizeof(*vma), GFP_KERNEL); 114 118 if (!vma) 115 - return NULL; 119 + return ERR_PTR(-ENOMEM); 116 120 117 121 vma->vm = vm; 118 122 119 - return vma; 120 - } 121 - 122 - /* Initialize a new vma and allocate an iova for it */ 123 - int msm_gem_vma_init(struct msm_gem_vma *vma, int size, 124 - u64 range_start, u64 range_end) 125 - { 126 - struct msm_gem_vm *vm = vma->vm; 127 - int ret; 128 - 129 - if (GEM_WARN_ON(!vm)) 130 - return -EINVAL; 131 - 132 - if (GEM_WARN_ON(vma->iova)) 133 - return -EBUSY; 134 - 135 123 spin_lock(&vm->lock); 136 124 ret = drm_mm_insert_node_in_range(&vm->mm, &vma->node, 137 - size, PAGE_SIZE, 0, 125 + obj->size, PAGE_SIZE, 0, 138 126 range_start, range_end, 0); 139 127 spin_unlock(&vm->lock); 140 128 141 129 if (ret) 142 - return ret; 130 + goto err_free_vma; 143 131 144 132 vma->iova = vma->node.start; 145 133 vma->mapped = false; 146 134 135 + INIT_LIST_HEAD(&vma->list); 136 + 147 137 kref_get(&vm->kref); 148 138 149 - return 0; 139 + return vma; 140 + 141 + err_free_vma: 142 + kfree(vma); 143 + return ERR_PTR(ret); 150 144 } 151 145 152 146 struct msm_gem_vm *