drm/ttm: Introduce ttm_bo_get() and ttm_bo_put() for ref counting
The TTM buffer-object interface provides ttm_bo_reference() and ttm_bo_unref() for managing reference counts. Replacing them with ttm_bo_get() and ttm_bo_put() aligns the API with conventions used throughout the Linux kernel. The implementation of ttm_bo_unref() clears the supplied pointer to NULL. This leads to workarounds where the caller saves the pointer's value before de-referencing the BO. ttm_bo_put() does not clear the supplied pointer. Signed-off-by: Thomas Zimmermann <contact@tzimmermann.org> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
31e1c59796
commit
89c815ef07
|
@ -587,12 +587,18 @@ static void ttm_bo_release(struct kref *kref)
|
|||
kref_put(&bo->list_kref, ttm_bo_release_list);
|
||||
}
|
||||
|
||||
void ttm_bo_put(struct ttm_buffer_object *bo)
|
||||
{
|
||||
kref_put(&bo->kref, ttm_bo_release);
|
||||
}
|
||||
EXPORT_SYMBOL(ttm_bo_put);
|
||||
|
||||
void ttm_bo_unref(struct ttm_buffer_object **p_bo)
|
||||
{
|
||||
struct ttm_buffer_object *bo = *p_bo;
|
||||
|
||||
*p_bo = NULL;
|
||||
kref_put(&bo->kref, ttm_bo_release);
|
||||
ttm_bo_put(bo);
|
||||
}
|
||||
EXPORT_SYMBOL(ttm_bo_unref);
|
||||
|
||||
|
|
|
@ -283,18 +283,30 @@ struct ttm_operation_ctx {
|
|||
/* when serving page fault or suspend, allow alloc anyway */
|
||||
#define TTM_OPT_FLAG_FORCE_ALLOC 0x2
|
||||
|
||||
/**
|
||||
* ttm_bo_get - reference a struct ttm_buffer_object
|
||||
*
|
||||
* @bo: The buffer object.
|
||||
*/
|
||||
static inline void ttm_bo_get(struct ttm_buffer_object *bo)
|
||||
{
|
||||
kref_get(&bo->kref);
|
||||
}
|
||||
|
||||
/**
|
||||
* ttm_bo_reference - reference a struct ttm_buffer_object
|
||||
*
|
||||
* @bo: The buffer object.
|
||||
*
|
||||
* Returns a refcounted pointer to a buffer object.
|
||||
*
|
||||
* This function is deprecated. Use @ttm_bo_get instead.
|
||||
*/
|
||||
|
||||
static inline struct ttm_buffer_object *
|
||||
ttm_bo_reference(struct ttm_buffer_object *bo)
|
||||
{
|
||||
kref_get(&bo->kref);
|
||||
ttm_bo_get(bo);
|
||||
return bo;
|
||||
}
|
||||
|
||||
|
@ -345,12 +357,23 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
|
|||
struct ttm_placement *placement,
|
||||
struct ttm_operation_ctx *ctx);
|
||||
|
||||
/**
|
||||
* ttm_bo_put
|
||||
*
|
||||
* @bo: The buffer object.
|
||||
*
|
||||
* Unreference a buffer object.
|
||||
*/
|
||||
void ttm_bo_put(struct ttm_buffer_object *bo);
|
||||
|
||||
/**
|
||||
* ttm_bo_unref
|
||||
*
|
||||
* @bo: The buffer object.
|
||||
*
|
||||
* Unreference and clear a pointer to a buffer object.
|
||||
*
|
||||
* This function is deprecated. Use @ttm_bo_put instead.
|
||||
*/
|
||||
void ttm_bo_unref(struct ttm_buffer_object **bo);
|
||||
|
||||
|
|
Loading…
Reference in New Issue