The number of chunks/chunks_array may be passed in
by userspace and can be large.

Signed-off-by: Chen Li <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 3e240b952e79..d9ae2cb86bc7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -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 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser 
*p, union drm_amdgpu_cs
 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;
 }
@@ -706,7 +706,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) {
-- 
2.30.0



_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to