mirror of https://gitee.com/openkylin/linux.git
dma-buf: cleanup reservation_object_init/fini
They are not used that often and certainly not in a hot path. Make them normal functions instead of an inline. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/314480/
This commit is contained in:
parent
5ed7191dd9
commit
8735f16803
|
@ -55,6 +55,51 @@ EXPORT_SYMBOL(reservation_seqcount_class);
|
||||||
const char reservation_seqcount_string[] = "reservation_seqcount";
|
const char reservation_seqcount_string[] = "reservation_seqcount";
|
||||||
EXPORT_SYMBOL(reservation_seqcount_string);
|
EXPORT_SYMBOL(reservation_seqcount_string);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reservation_object_init - initialize a reservation object
|
||||||
|
* @obj: the reservation object
|
||||||
|
*/
|
||||||
|
void reservation_object_init(struct reservation_object *obj)
|
||||||
|
{
|
||||||
|
ww_mutex_init(&obj->lock, &reservation_ww_class);
|
||||||
|
|
||||||
|
__seqcount_init(&obj->seq, reservation_seqcount_string,
|
||||||
|
&reservation_seqcount_class);
|
||||||
|
RCU_INIT_POINTER(obj->fence, NULL);
|
||||||
|
RCU_INIT_POINTER(obj->fence_excl, NULL);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(reservation_object_init);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reservation_object_fini - destroys a reservation object
|
||||||
|
* @obj: the reservation object
|
||||||
|
*/
|
||||||
|
void reservation_object_fini(struct reservation_object *obj)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct reservation_object_list *fobj;
|
||||||
|
struct dma_fence *excl;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This object should be dead and all references must have
|
||||||
|
* been released to it, so no need to be protected with rcu.
|
||||||
|
*/
|
||||||
|
excl = rcu_dereference_protected(obj->fence_excl, 1);
|
||||||
|
if (excl)
|
||||||
|
dma_fence_put(excl);
|
||||||
|
|
||||||
|
fobj = rcu_dereference_protected(obj->fence, 1);
|
||||||
|
if (fobj) {
|
||||||
|
for (i = 0; i < fobj->shared_count; ++i)
|
||||||
|
dma_fence_put(rcu_dereference_protected(fobj->shared[i], 1));
|
||||||
|
|
||||||
|
kfree(fobj);
|
||||||
|
}
|
||||||
|
|
||||||
|
ww_mutex_destroy(&obj->lock);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(reservation_object_fini);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* reservation_object_reserve_shared - Reserve space to add shared fences to
|
* reservation_object_reserve_shared - Reserve space to add shared fences to
|
||||||
* a reservation_object.
|
* a reservation_object.
|
||||||
|
|
|
@ -81,50 +81,6 @@ struct reservation_object {
|
||||||
#define reservation_object_assert_held(obj) \
|
#define reservation_object_assert_held(obj) \
|
||||||
lockdep_assert_held(&(obj)->lock.base)
|
lockdep_assert_held(&(obj)->lock.base)
|
||||||
|
|
||||||
/**
|
|
||||||
* reservation_object_init - initialize a reservation object
|
|
||||||
* @obj: the reservation object
|
|
||||||
*/
|
|
||||||
static inline void
|
|
||||||
reservation_object_init(struct reservation_object *obj)
|
|
||||||
{
|
|
||||||
ww_mutex_init(&obj->lock, &reservation_ww_class);
|
|
||||||
|
|
||||||
__seqcount_init(&obj->seq, reservation_seqcount_string, &reservation_seqcount_class);
|
|
||||||
RCU_INIT_POINTER(obj->fence, NULL);
|
|
||||||
RCU_INIT_POINTER(obj->fence_excl, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* reservation_object_fini - destroys a reservation object
|
|
||||||
* @obj: the reservation object
|
|
||||||
*/
|
|
||||||
static inline void
|
|
||||||
reservation_object_fini(struct reservation_object *obj)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
struct reservation_object_list *fobj;
|
|
||||||
struct dma_fence *excl;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This object should be dead and all references must have
|
|
||||||
* been released to it, so no need to be protected with rcu.
|
|
||||||
*/
|
|
||||||
excl = rcu_dereference_protected(obj->fence_excl, 1);
|
|
||||||
if (excl)
|
|
||||||
dma_fence_put(excl);
|
|
||||||
|
|
||||||
fobj = rcu_dereference_protected(obj->fence, 1);
|
|
||||||
if (fobj) {
|
|
||||||
for (i = 0; i < fobj->shared_count; ++i)
|
|
||||||
dma_fence_put(rcu_dereference_protected(fobj->shared[i], 1));
|
|
||||||
|
|
||||||
kfree(fobj);
|
|
||||||
}
|
|
||||||
|
|
||||||
ww_mutex_destroy(&obj->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* reservation_object_get_list - get the reservation object's
|
* reservation_object_get_list - get the reservation object's
|
||||||
* shared fence list, with update-side lock held
|
* shared fence list, with update-side lock held
|
||||||
|
@ -271,6 +227,8 @@ reservation_object_get_excl_rcu(struct reservation_object *obj)
|
||||||
return fence;
|
return fence;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void reservation_object_init(struct reservation_object *obj);
|
||||||
|
void reservation_object_fini(struct reservation_object *obj);
|
||||||
int reservation_object_reserve_shared(struct reservation_object *obj,
|
int reservation_object_reserve_shared(struct reservation_object *obj,
|
||||||
unsigned int num_fences);
|
unsigned int num_fences);
|
||||||
void reservation_object_add_shared_fence(struct reservation_object *obj,
|
void reservation_object_add_shared_fence(struct reservation_object *obj,
|
||||||
|
|
Loading…
Reference in New Issue