[Mesa-dev] [PATCH 2/2] radv/winsys: use alloca() when creating the buffer object list

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Jul 17 07:40:17 UTC 2018



On 07/12/2018 04:29 PM, Bas Nieuwenhuizen wrote:
> Not really a fan of this one, we can literally have thousands of
> entries which seems largish when considering the stacks for heavily
> threaded stuff are often much smaller.

Hmm yeah, you are probably right. What about the first one?

> 
> On Thu, Jul 12, 2018 at 4:26 PM, Samuel Pitoiset
> <samuel.pitoiset at gmail.com> wrote:
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>   src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 16 +++-------------
>>   1 file changed, 3 insertions(+), 13 deletions(-)
>>
>> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
>> index c94c0f339f..e7ad9d7f6b 100644
>> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
>> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
>> @@ -605,11 +605,7 @@ static int radv_amdgpu_create_bo_list(struct radv_amdgpu_winsys *ws,
>>
>>                  pthread_mutex_lock(&ws->global_bo_list_lock);
>>
>> -               handles = malloc(sizeof(handles[0]) * ws->num_buffers);
>> -               if (!handles) {
>> -                       pthread_mutex_unlock(&ws->global_bo_list_lock);
>> -                       return -ENOMEM;
>> -               }
>> +               handles = alloca(sizeof(handles[0]) * ws->num_buffers);
>>
>>                  LIST_FOR_EACH_ENTRY(bo, &ws->global_bo_list, global_list_item) {
>>                          assert(num < ws->num_buffers);
>> @@ -619,7 +615,7 @@ static int radv_amdgpu_create_bo_list(struct radv_amdgpu_winsys *ws,
>>                  r = amdgpu_bo_list_create(ws->dev, ws->num_buffers,
>>                                            handles, NULL,
>>                                            bo_list);
>> -               free(handles);
>> +
>>                  pthread_mutex_unlock(&ws->global_bo_list_lock);
>>          } else if (count == 1 && !num_extra_bo && !extra_cs && !radv_bo_list &&
>>                     !radv_amdgpu_cs(cs_array[0])->num_virtual_buffers) {
>> @@ -652,11 +648,7 @@ static int radv_amdgpu_create_bo_list(struct radv_amdgpu_winsys *ws,
>>                          *bo_list = 0;
>>                          return 0;
>>                  }
>> -               amdgpu_bo_handle *handles = malloc(sizeof(amdgpu_bo_handle) * total_buffer_count);
>> -               if (!handles) {
>> -                       free(handles);
>> -                       return -ENOMEM;
>> -               }
>> +               amdgpu_bo_handle *handles = alloca(sizeof(amdgpu_bo_handle) * total_buffer_count);
>>
>>                  for (unsigned i = 0; i < num_extra_bo; i++) {
>>                          handles[i] = extra_bo_array[i]->bo;
>> @@ -735,8 +727,6 @@ static int radv_amdgpu_create_bo_list(struct radv_amdgpu_winsys *ws,
>>                  } else {
>>                          *bo_list = 0;
>>                  }
>> -
>> -               free(handles);
>>          }
>>
>>          return r;
>> --
>> 2.18.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list