Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 189e0fb7 authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/amdgpu: RCU protected amd_sched_fence_release



Fences must be freed RCU protected, otherwise the reservation_object_*_rcu()
functions can run into problems.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b4413535
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -84,12 +84,33 @@ static bool amd_sched_fence_enable_signaling(struct fence *f)
	return true;
}

static void amd_sched_fence_release(struct fence *f)
/**
 * amd_sched_fence_free - free up the fence memory
 *
 * @rcu: RCU callback head
 *
 * Free up the fence memory after the RCU grace period.
 */
static void amd_sched_fence_free(struct rcu_head *rcu)
{
	struct fence *f = container_of(rcu, struct fence, rcu);
	struct amd_sched_fence *fence = to_amd_sched_fence(f);
	kmem_cache_free(sched_fence_slab, fence);
}

/**
 * amd_sched_fence_release - callback that fence can be freed
 *
 * @fence: fence
 *
 * This function is called when the reference count becomes zero.
 * It just RCU schedules freeing up the fence.
 */
static void amd_sched_fence_release(struct fence *f)
{
	call_rcu(&f->rcu, amd_sched_fence_free);
}

const struct fence_ops amd_sched_fence_ops = {
	.get_driver_name = amd_sched_fence_get_driver_name,
	.get_timeline_name = amd_sched_fence_get_timeline_name,