]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
Merge tag 'drm-msm-next-2021-06-23b' of https://gitlab.freedesktop.org/drm/msm into...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_cs.c
index 3e240b952e7912a36365bdf7d2191e981b08598d..76fe5b71e35de9aad6b1527b45e2b7487dea61b8 100644 (file)
@@ -117,7 +117,7 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, union drm_amdgpu_cs
        if (cs->in.num_chunks == 0)
                return 0;
 
-       chunk_array = kmalloc_array(cs->in.num_chunks, sizeof(uint64_t), GFP_KERNEL);
+       chunk_array = kvmalloc_array(cs->in.num_chunks, sizeof(uint64_t), GFP_KERNEL);
        if (!chunk_array)
                return -ENOMEM;
 
@@ -144,7 +144,7 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, union drm_amdgpu_cs
        }
 
        p->nchunks = cs->in.num_chunks;
-       p->chunks = kmalloc_array(p->nchunks, sizeof(struct amdgpu_cs_chunk),
+       p->chunks = kvmalloc_array(p->nchunks, sizeof(struct amdgpu_cs_chunk),
                            GFP_KERNEL);
        if (!p->chunks) {
                ret = -ENOMEM;
@@ -238,7 +238,7 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, union drm_amdgpu_cs
 
        if (p->uf_entry.tv.bo)
                p->job->uf_addr = uf_offset;
-       kfree(chunk_array);
+       kvfree(chunk_array);
 
        /* Use this opportunity to fill in task info for the vm */
        amdgpu_vm_set_task_info(vm);
@@ -250,11 +250,11 @@ free_all_kdata:
 free_partial_kdata:
        for (; i >= 0; i--)
                kvfree(p->chunks[i].kdata);
-       kfree(p->chunks);
+       kvfree(p->chunks);
        p->chunks = NULL;
        p->nchunks = 0;
 free_chunk:
-       kfree(chunk_array);
+       kvfree(chunk_array);
 
        return ret;
 }
@@ -396,10 +396,10 @@ void amdgpu_cs_report_moved_bytes(struct amdgpu_device *adev, u64 num_bytes,
        spin_unlock(&adev->mm_stats.lock);
 }
 
-static int amdgpu_cs_bo_validate(struct amdgpu_cs_parser *p,
-                                struct amdgpu_bo *bo)
+static int amdgpu_cs_bo_validate(void *param, struct amdgpu_bo *bo)
 {
        struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
+       struct amdgpu_cs_parser *p = param;
        struct ttm_operation_ctx ctx = {
                .interruptible = true,
                .no_wait_gpu = false,
@@ -451,21 +451,6 @@ retry:
        return r;
 }
 
-static int amdgpu_cs_validate(void *param, struct amdgpu_bo *bo)
-{
-       struct amdgpu_cs_parser *p = param;
-       int r;
-
-       r = amdgpu_cs_bo_validate(p, bo);
-       if (r)
-               return r;
-
-       if (bo->shadow)
-               r = amdgpu_cs_bo_validate(p, bo->shadow);
-
-       return r;
-}
-
 static int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
                            struct list_head *validated)
 {
@@ -493,7 +478,7 @@ static int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
                                                     lobj->user_pages);
                }
 
-               r = amdgpu_cs_validate(p, bo);
+               r = amdgpu_cs_bo_validate(p, bo);
                if (r)
                        return r;
 
@@ -559,7 +544,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
                                        sizeof(struct page *),
                                        GFP_KERNEL | __GFP_ZERO);
                if (!e->user_pages) {
-                       DRM_ERROR("calloc failure\n");
+                       DRM_ERROR("kvmalloc_array failure\n");
                        return -ENOMEM;
                }
 
@@ -593,7 +578,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
        p->bytes_moved_vis = 0;
 
        r = amdgpu_vm_validate_pt_bos(p->adev, &fpriv->vm,
-                                     amdgpu_cs_validate, p);
+                                     amdgpu_cs_bo_validate, p);
        if (r) {
                DRM_ERROR("amdgpu_vm_validate_pt_bos() failed.\n");
                goto error_validate;
@@ -672,12 +657,12 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)
 }
 
 /**
- * cs_parser_fini() - clean parser states
+ * amdgpu_cs_parser_fini() - clean parser states
  * @parser:    parser structure holding parsing context.
  * @error:     error number
  * @backoff:   indicator to backoff the reservation
  *
- * If error is set than unvalidate buffer, otherwise just free memory
+ * If error is set then unvalidate buffer, otherwise just free memory
  * used by parsing context.
  **/
 static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error,
@@ -706,7 +691,7 @@ static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error,
 
        for (i = 0; i < parser->nchunks; i++)
                kvfree(parser->chunks[i].kdata);
-       kfree(parser->chunks);
+       kvfree(parser->chunks);
        if (parser->job)
                amdgpu_job_free(parser->job);
        if (parser->uf_entry.tv.bo) {
@@ -796,7 +781,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)
        if (r)
                return r;
 
-       r = amdgpu_vm_bo_update(adev, fpriv->prt_va, false);
+       r = amdgpu_vm_bo_update(adev, fpriv->prt_va, false, NULL);
        if (r)
                return r;
 
@@ -807,7 +792,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)
        if (amdgpu_mcbp || amdgpu_sriov_vf(adev)) {
                bo_va = fpriv->csa_va;
                BUG_ON(!bo_va);
-               r = amdgpu_vm_bo_update(adev, bo_va, false);
+               r = amdgpu_vm_bo_update(adev, bo_va, false, NULL);
                if (r)
                        return r;
 
@@ -826,7 +811,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)
                if (bo_va == NULL)
                        continue;
 
-               r = amdgpu_vm_bo_update(adev, bo_va, false);
+               r = amdgpu_vm_bo_update(adev, bo_va, false, NULL);
                if (r)
                        return r;
 
@@ -847,7 +832,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)
        if (r)
                return r;
 
-       p->job->vm_pd_addr = amdgpu_gmc_pd_addr(vm->root.base.bo);
+       p->job->vm_pd_addr = amdgpu_gmc_pd_addr(vm->root.bo);
 
        if (amdgpu_vm_debug) {
                /* Invalidate all BOs to test for userspace bugs */
@@ -1488,7 +1473,7 @@ int amdgpu_cs_fence_to_handle_ioctl(struct drm_device *dev, void *data,
 }
 
 /**
- * amdgpu_cs_wait_all_fence - wait on all fences to signal
+ * amdgpu_cs_wait_all_fences - wait on all fences to signal
  *
  * @adev: amdgpu device
  * @filp: file private
@@ -1639,7 +1624,7 @@ err_free_fences:
 }
 
 /**
- * amdgpu_cs_find_bo_va - find bo_va for VM address
+ * amdgpu_cs_find_mapping - find bo_va for VM address
  *
  * @parser: command submission parser context
  * @addr: VM address
This page took 0.044386 seconds and 4 git commands to generate.