diff options
author | monk.liu <monk.liu@amd.com> | 2015-07-17 06:39:25 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-08-17 16:50:22 -0400 |
commit | e60b344f6c0eff03362b5083db746ef5442c4b36 (patch) | |
tree | 7973e249113218e776978be20a6e5ffe375ce6cd /drivers/gpu/drm/amd/amdgpu | |
parent | 2f7d10b393c83acd3eedc3d6ab94dce29ac6a890 (diff) |
drm/amdgpu: optimize amdgpu_parser_init
use kmalloc_array instead of kcalloc where appropriate and other
cleanups.
Signed-off-by: monk.liu <monk.liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 4794e14976ca..bc0a70415485 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |||
@@ -147,13 +147,13 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) | |||
147 | 147 | ||
148 | /* get chunks */ | 148 | /* get chunks */ |
149 | INIT_LIST_HEAD(&p->validated); | 149 | INIT_LIST_HEAD(&p->validated); |
150 | chunk_array = kcalloc(cs->in.num_chunks, sizeof(uint64_t), GFP_KERNEL); | 150 | chunk_array = kmalloc_array(cs->in.num_chunks, sizeof(uint64_t), GFP_KERNEL); |
151 | if (chunk_array == NULL) { | 151 | if (chunk_array == NULL) { |
152 | r = -ENOMEM; | 152 | r = -ENOMEM; |
153 | goto out; | 153 | goto out; |
154 | } | 154 | } |
155 | 155 | ||
156 | chunk_array_user = (uint64_t *)(unsigned long)(cs->in.chunks); | 156 | chunk_array_user = (uint64_t __user *)(cs->in.chunks); |
157 | if (copy_from_user(chunk_array, chunk_array_user, | 157 | if (copy_from_user(chunk_array, chunk_array_user, |
158 | sizeof(uint64_t)*cs->in.num_chunks)) { | 158 | sizeof(uint64_t)*cs->in.num_chunks)) { |
159 | r = -EFAULT; | 159 | r = -EFAULT; |
@@ -161,7 +161,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) | |||
161 | } | 161 | } |
162 | 162 | ||
163 | p->nchunks = cs->in.num_chunks; | 163 | p->nchunks = cs->in.num_chunks; |
164 | p->chunks = kcalloc(p->nchunks, sizeof(struct amdgpu_cs_chunk), | 164 | p->chunks = kmalloc_array(p->nchunks, sizeof(struct amdgpu_cs_chunk), |
165 | GFP_KERNEL); | 165 | GFP_KERNEL); |
166 | if (p->chunks == NULL) { | 166 | if (p->chunks == NULL) { |
167 | r = -ENOMEM; | 167 | r = -ENOMEM; |
@@ -173,7 +173,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) | |||
173 | struct drm_amdgpu_cs_chunk user_chunk; | 173 | struct drm_amdgpu_cs_chunk user_chunk; |
174 | uint32_t __user *cdata; | 174 | uint32_t __user *cdata; |
175 | 175 | ||
176 | chunk_ptr = (void __user *)(unsigned long)chunk_array[i]; | 176 | chunk_ptr = (void __user *)chunk_array[i]; |
177 | if (copy_from_user(&user_chunk, chunk_ptr, | 177 | if (copy_from_user(&user_chunk, chunk_ptr, |
178 | sizeof(struct drm_amdgpu_cs_chunk))) { | 178 | sizeof(struct drm_amdgpu_cs_chunk))) { |
179 | r = -EFAULT; | 179 | r = -EFAULT; |
@@ -183,7 +183,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) | |||
183 | p->chunks[i].length_dw = user_chunk.length_dw; | 183 | p->chunks[i].length_dw = user_chunk.length_dw; |
184 | 184 | ||
185 | size = p->chunks[i].length_dw; | 185 | size = p->chunks[i].length_dw; |
186 | cdata = (void __user *)(unsigned long)user_chunk.chunk_data; | 186 | cdata = (void __user *)user_chunk.chunk_data; |
187 | p->chunks[i].user_ptr = cdata; | 187 | p->chunks[i].user_ptr = cdata; |
188 | 188 | ||
189 | p->chunks[i].kdata = drm_malloc_ab(size, sizeof(uint32_t)); | 189 | p->chunks[i].kdata = drm_malloc_ab(size, sizeof(uint32_t)); |
@@ -235,11 +235,10 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) | |||
235 | } | 235 | } |
236 | } | 236 | } |
237 | 237 | ||
238 | p->ibs = kcalloc(p->num_ibs, sizeof(struct amdgpu_ib), GFP_KERNEL); | 238 | |
239 | if (!p->ibs) { | 239 | p->ibs = kmalloc_array(p->num_ibs, sizeof(struct amdgpu_ib), GFP_KERNEL); |
240 | if (!p->ibs) | ||
240 | r = -ENOMEM; | 241 | r = -ENOMEM; |
241 | goto out; | ||
242 | } | ||
243 | 242 | ||
244 | out: | 243 | out: |
245 | kfree(chunk_array); | 244 | kfree(chunk_array); |