[PATCH] drm/amdgpu: add rcu_barrier after entity fini

Deng, Emily Emily.Deng at amd.com
Wed May 23 07:47:55 UTC 2018


Thanks.

Best Wishes,
Emily Deng

> -----Original Message-----
> From: Christian König [mailto:ckoenig.leichtzumerken at gmail.com]
> Sent: Wednesday, May 23, 2018 3:33 PM
> To: Deng, Emily <Emily.Deng at amd.com>; amd-gfx at lists.freedesktop.org
> Subject: Re: [PATCH] drm/amdgpu: add rcu_barrier after entity fini
> 
> Sorry missed that one.
> 
> Patch is Reviewed-by: Christian König <christian.koenig at amd.com>.
> 
> Nice work,
> Christian.
> 
> Am 23.05.2018 um 07:25 schrieb Deng, Emily:
> > Ping ......
> >
> >> -----Original Message-----
> >> From: Emily Deng [mailto:Emily.Deng at amd.com]
> >> Sent: Monday, May 21, 2018 4:09 PM
> >> To: amd-gfx at lists.freedesktop.org
> >> Cc: Deng, Emily <Emily.Deng at amd.com>
> >> Subject: [PATCH] drm/amdgpu: add rcu_barrier after entity fini
> >>
> >> To free the fence from the amdgpu_fence_slab, need twice call_rcu, to
> >> avoid the amdgpu_fence_slab_fini call
> >> kmem_cache_destroy(amdgpu_fence_slab) before
> >> kmem_cache_free(amdgpu_fence_slab, fence), add rcu_barrier after
> >> drm_sched_entity_fini.
> >>
> >> The kmem_cache_free(amdgpu_fence_slab, fence)'s call trace as below:
> >> 1.drm_sched_entity_fini ->
> >> drm_sched_entity_cleanup ->
> >> dma_fence_put(entity->last_scheduled) ->
> >> drm_sched_fence_release_finished ->
> drm_sched_fence_release_scheduled
> >> -> call_rcu(&fence->finished.rcu,
> >> drm_sched_fence_free)
> >>
> >> 2.drm_sched_fence_free ->
> >> dma_fence_put(fence->parent) ->
> >> amdgpu_fence_release ->
> >> call_rcu(&f->rcu, amdgpu_fence_free) ->
> >> kmem_cache_free(amdgpu_fence_slab, fence);
> >>
> >> v2:put the barrier before the kmem_cache_destroy v3:put the
> >> dma_fence_put(fence->parent) before call_rcu in
> >> drm_sched_fence_release_scheduled
> >>
> >> Change-Id: I8dcadd3372f97e72461bf46b41cc26d90f09b8df
> >> Signed-off-by: Emily Deng <Emily.Deng at amd.com>
> >> ---
> >>   drivers/gpu/drm/scheduler/sched_fence.c | 2 +-
> >>   1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/gpu/drm/scheduler/sched_fence.c
> >> b/drivers/gpu/drm/scheduler/sched_fence.c
> >> index 786b47f..df44616 100644
> >> --- a/drivers/gpu/drm/scheduler/sched_fence.c
> >> +++ b/drivers/gpu/drm/scheduler/sched_fence.c
> >> @@ -98,7 +98,6 @@ static void drm_sched_fence_free(struct rcu_head
> *rcu)
> >>   	struct dma_fence *f = container_of(rcu, struct dma_fence, rcu);
> >>   	struct drm_sched_fence *fence = to_drm_sched_fence(f);
> >>
> >> -	dma_fence_put(fence->parent);
> >>   	kmem_cache_free(sched_fence_slab, fence);  }
> >>
> >> @@ -114,6 +113,7 @@ static void
> >> drm_sched_fence_release_scheduled(struct dma_fence *f)  {
> >>   	struct drm_sched_fence *fence = to_drm_sched_fence(f);
> >>
> >> +	dma_fence_put(fence->parent);
> >>   	call_rcu(&fence->finished.rcu, drm_sched_fence_free);  }
> >>
> >> --
> >> 2.7.4
> > _______________________________________________
> > 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