|
@@ -229,6 +229,14 @@ static void amd_sched_entity_wakeup(struct fence *f, struct fence_cb *cb)
|
|
amd_sched_wakeup(entity->sched);
|
|
amd_sched_wakeup(entity->sched);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void amd_sched_entity_clear_dep(struct fence *f, struct fence_cb *cb)
|
|
|
|
+{
|
|
|
|
+ struct amd_sched_entity *entity =
|
|
|
|
+ container_of(cb, struct amd_sched_entity, cb);
|
|
|
|
+ entity->dependency = NULL;
|
|
|
|
+ fence_put(f);
|
|
|
|
+}
|
|
|
|
+
|
|
static bool amd_sched_entity_add_dependency_cb(struct amd_sched_entity *entity)
|
|
static bool amd_sched_entity_add_dependency_cb(struct amd_sched_entity *entity)
|
|
{
|
|
{
|
|
struct amd_gpu_scheduler *sched = entity->sched;
|
|
struct amd_gpu_scheduler *sched = entity->sched;
|
|
@@ -251,7 +259,7 @@ static bool amd_sched_entity_add_dependency_cb(struct amd_sched_entity *entity)
|
|
}
|
|
}
|
|
|
|
|
|
/* Wait for fence to be scheduled */
|
|
/* Wait for fence to be scheduled */
|
|
- entity->cb.func = amd_sched_entity_wakeup;
|
|
|
|
|
|
+ entity->cb.func = amd_sched_entity_clear_dep;
|
|
list_add_tail(&entity->cb.node, &s_fence->scheduled_cb);
|
|
list_add_tail(&entity->cb.node, &s_fence->scheduled_cb);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|