]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
Merge branch 'drm-next-4.13' of git://people.freedesktop.org/~agd5f/linux into drm...
[karo-tx-linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_cs.c
index 7a70a2d0187f11941a0d5a4ce60102f9778ea267..a37bdf4f8e9b6ef6ef132f67cba64f65d283e152 100644 (file)
@@ -122,7 +122,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
                size = p->chunks[i].length_dw;
                cdata = (void __user *)(uintptr_t)user_chunk.chunk_data;
 
-               p->chunks[i].kdata = drm_malloc_ab(size, sizeof(uint32_t));
+               p->chunks[i].kdata = kvmalloc_array(size, sizeof(uint32_t), GFP_KERNEL);
                if (p->chunks[i].kdata == NULL) {
                        ret = -ENOMEM;
                        i--;
@@ -175,7 +175,7 @@ free_all_kdata:
        i = p->nchunks - 1;
 free_partial_kdata:
        for (; i >= 0; i--)
-               drm_free_large(p->chunks[i].kdata);
+               kvfree(p->chunks[i].kdata);
        kfree(p->chunks);
        p->chunks = NULL;
        p->nchunks = 0;
@@ -433,7 +433,7 @@ static int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
                        return r;
 
                if (binding_userptr) {
-                       drm_free_large(lobj->user_pages);
+                       kvfree(lobj->user_pages);
                        lobj->user_pages = NULL;
                }
        }
@@ -499,7 +499,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
                                release_pages(e->user_pages,
                                              e->robj->tbo.ttm->num_pages,
                                              false);
-                               drm_free_large(e->user_pages);
+                               kvfree(e->user_pages);
                                e->user_pages = NULL;
                        }
 
@@ -529,8 +529,9 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
                list_for_each_entry(e, &need_pages, tv.head) {
                        struct ttm_tt *ttm = e->robj->tbo.ttm;
 
-                       e->user_pages = drm_calloc_large(ttm->num_pages,
-                                                        sizeof(struct page*));
+                       e->user_pages = kvmalloc_array(ttm->num_pages,
+                                                        sizeof(struct page*),
+                                                        GFP_KERNEL | __GFP_ZERO);
                        if (!e->user_pages) {
                                r = -ENOMEM;
                                DRM_ERROR("calloc failure in %s\n", __func__);
@@ -540,7 +541,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
                        r = amdgpu_ttm_tt_get_user_pages(ttm, e->user_pages);
                        if (r) {
                                DRM_ERROR("amdgpu_ttm_tt_get_user_pages failed.\n");
-                               drm_free_large(e->user_pages);
+                               kvfree(e->user_pages);
                                e->user_pages = NULL;
                                goto error_free_pages;
                        }
@@ -636,7 +637,7 @@ error_free_pages:
                        release_pages(e->user_pages,
                                      e->robj->tbo.ttm->num_pages,
                                      false);
-                       drm_free_large(e->user_pages);
+                       kvfree(e->user_pages);
                }
        }
 
@@ -689,7 +690,7 @@ static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error, bo
                amdgpu_bo_list_put(parser->bo_list);
 
        for (i = 0; i < parser->nchunks; i++)
-               drm_free_large(parser->chunks[i].kdata);
+               kvfree(parser->chunks[i].kdata);
        kfree(parser->chunks);
        if (parser->job)
                amdgpu_job_free(parser->job);