Commit 7d9c3442 authored by Adrián Larumbe's avatar Adrián Larumbe Committed by Steven Price
Browse files

drm/panthor: Defer scheduler entitiy destruction to queue release



Commit de854881 ("drm/panthor: Add the scheduler logical block")
handled destruction of a group's queues' drm scheduler entities early
into the group destruction procedure.

However, that races with the group submit ioctl, because by the time
entities are destroyed (through the group destroy ioctl), the submission
procedure might've already obtained a group handle, and therefore the
ability to push jobs into entities. This is met with a DRM error message
within the drm scheduler core as a situation that should never occur.

Fix by deferring drm scheduler entity destruction to queue release time.

Fixes: de854881 ("drm/panthor: Add the scheduler logical block")
Signed-off-by: default avatarAdrián Larumbe <adrian.larumbe@collabora.com>
Reviewed-by: default avatarSteven Price <steven.price@arm.com>
Reviewed-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: default avatarSteven Price <steven.price@arm.com>
Link: https://lore.kernel.org/r/20250919164436.531930-1-adrian.larumbe@collabora.com
parent 9b2f5ef0
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -886,7 +886,6 @@ static void group_free_queue(struct panthor_group *group, struct panthor_queue *
	if (IS_ERR_OR_NULL(queue))
		return;

	if (queue->entity.fence_context)
	drm_sched_entity_destroy(&queue->entity);

	if (queue->scheduler.ops)
@@ -3558,11 +3557,6 @@ int panthor_group_destroy(struct panthor_file *pfile, u32 group_handle)
	if (!group)
		return -EINVAL;

	for (u32 i = 0; i < group->queue_count; i++) {
		if (group->queues[i])
			drm_sched_entity_destroy(&group->queues[i]->entity);
	}

	mutex_lock(&sched->reset.lock);
	mutex_lock(&sched->lock);
	group->destroyed = true;