[PATCH libdrm 2/2] drm: merge and cleanup amdgpu_bo_free

Alex Deucher alexdeucher at gmail.com
Tue Aug 8 16:19:07 UTC 2017


On Tue, Aug 8, 2017 at 3:54 AM, Christian König <deathsimple at vodafone.de> wrote:
> Am 08.08.2017 um 09:34 schrieb Monk Liu:
>>
>> From: Monk Liu <monk.liu at amd.com>
>>
>> since bo_reference and bo_internal_free are
>> all only used by bo_free, so we just merge them
>> together
>>
>> Change-Id: I72ebc9c8bcfcd23f4d52a1385db871a95c23859e
>> Signed-off-by: Monk Liu <monk.liu at amd.com>
>
>
> Reviewed-by: Christian König <christian.koenig at amd.com>

Pushed both upstream.  Thanks!

Alex

>
>
>> ---
>>   amdgpu/amdgpu_bo.c       | 52
>> +++++++++++++++++++++++++++---------------------
>>   amdgpu/amdgpu_internal.h | 33 ------------------------------
>>   2 files changed, 29 insertions(+), 56 deletions(-)
>>
>> diff --git a/amdgpu/amdgpu_bo.c b/amdgpu/amdgpu_bo.c
>> index 82f38c0..901673a 100644
>> --- a/amdgpu/amdgpu_bo.c
>> +++ b/amdgpu/amdgpu_bo.c
>> @@ -52,27 +52,6 @@ static void
>> amdgpu_close_kms_handle(amdgpu_device_handle dev,
>>         drmIoctl(dev->fd, DRM_IOCTL_GEM_CLOSE, &args);
>>   }
>>   -void amdgpu_bo_free_internal(amdgpu_bo_handle bo)
>> -{
>> -       /* Remove the buffer from the hash tables. */
>> -       util_hash_table_remove(bo->dev->bo_handles,
>> -                              (void*)(uintptr_t)bo->handle);
>> -       if (bo->flink_name) {
>> -               util_hash_table_remove(bo->dev->bo_flink_names,
>> -                                      (void*)(uintptr_t)bo->flink_name);
>> -       }
>> -
>> -       /* Release CPU access. */
>> -       if (bo->cpu_map_count > 0) {
>> -               bo->cpu_map_count = 1;
>> -               amdgpu_bo_cpu_unmap(bo);
>> -       }
>> -
>> -       amdgpu_close_kms_handle(bo->dev, bo->handle);
>> -       pthread_mutex_destroy(&bo->cpu_access_mutex);
>> -       free(bo);
>> -}
>> -
>>   int amdgpu_bo_alloc(amdgpu_device_handle dev,
>>                     struct amdgpu_bo_alloc_request *alloc_buffer,
>>                     amdgpu_bo_handle *buf_handle)
>> @@ -415,8 +394,35 @@ int amdgpu_bo_import(amdgpu_device_handle dev,
>>     int amdgpu_bo_free(amdgpu_bo_handle buf_handle)
>>   {
>> -       /* Just drop the reference. */
>> -       amdgpu_bo_reference(&buf_handle, NULL);
>> +       struct amdgpu_device *dev;
>> +       struct amdgpu_bo *bo = buf_handle;
>> +
>> +       assert(bo != NULL);
>> +       dev = bo->dev;
>> +       pthread_mutex_lock(&dev->bo_table_mutex);
>> +
>> +       if (update_references(&bo->refcount, NULL)) {
>> +               /* Remove the buffer from the hash tables. */
>> +               util_hash_table_remove(dev->bo_handles,
>> +                                       (void*)(uintptr_t)bo->handle);
>> +
>> +               if (bo->flink_name) {
>> +                       util_hash_table_remove(dev->bo_flink_names,
>> +
>> (void*)(uintptr_t)bo->flink_name);
>> +               }
>> +
>> +               /* Release CPU access. */
>> +               if (bo->cpu_map_count > 0) {
>> +                       bo->cpu_map_count = 1;
>> +                       amdgpu_bo_cpu_unmap(bo);
>> +               }
>> +
>> +               amdgpu_close_kms_handle(dev, bo->handle);
>> +               pthread_mutex_destroy(&bo->cpu_access_mutex);
>> +               free(bo);
>> +       }
>> +
>> +       pthread_mutex_unlock(&dev->bo_table_mutex);
>>         return 0;
>>   }
>>   diff --git a/amdgpu/amdgpu_internal.h b/amdgpu/amdgpu_internal.h
>> index 79da0e7..a6bf831 100644
>> --- a/amdgpu/amdgpu_internal.h
>> +++ b/amdgpu/amdgpu_internal.h
>> @@ -133,8 +133,6 @@ struct amdgpu_semaphore {
>>     void amdgpu_device_free_internal(amdgpu_device_handle dev);
>>   -void amdgpu_bo_free_internal(amdgpu_bo_handle bo);
>> -
>>   void amdgpu_vamgr_init(struct amdgpu_bo_va_mgr *mgr, uint64_t start,
>>                        uint64_t max, uint64_t alignment);
>>   @@ -177,37 +175,6 @@ static inline bool update_references(atomic_t *dst,
>> atomic_t *src)
>>   }
>>     /**
>> - * Assignment between two amdgpu_bo pointers with reference counting.
>> - *
>> - * Usage:
>> - *    struct amdgpu_bo *dst = ... , *src = ...;
>> - *
>> - *    dst = src;
>> - *    // No reference counting. Only use this when you need to move
>> - *    // a reference from one pointer to another.
>> - *
>> - *    amdgpu_bo_reference(&dst, src);
>> - *    // Reference counters are updated. dst is decremented and src is
>> - *    // incremented. dst is freed if its reference counter is 0.
>> - */
>> -static inline void amdgpu_bo_reference(struct amdgpu_bo **dst,
>> -                                       struct amdgpu_bo *src)
>> -{
>> -       pthread_mutex_t *mlock;
>> -       struct amdgpu_bo* bo = *dst;
>> -
>> -       assert(bo != NULL);
>> -       mlock = &bo->dev->bo_table_mutex;
>> -       pthread_mutex_lock(mlock);
>> -
>> -       if (update_references(&bo->refcount, src?&src->refcount:NULL))
>> -               amdgpu_bo_free_internal(bo);
>> -
>> -       pthread_mutex_unlock(mlock);
>> -       *dst = src;
>> -}
>> -
>> -/**
>>    * Assignment between two amdgpu_device pointers with reference
>> counting.
>>    *
>>    * Usage:
>
>
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list