summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/xe/xe_exec_queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/xe/xe_exec_queue.c')
-rw-r--r--drivers/gpu/drm/xe/xe_exec_queue.c55
1 files changed, 2 insertions, 53 deletions
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 0b9e074b022f..529a40ca4002 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -467,26 +467,6 @@ struct xe_exec_queue *xe_exec_queue_create_bind(struct xe_device *xe,
}
ALLOW_ERROR_INJECTION(xe_exec_queue_create_bind, ERRNO);
-static void xe_exec_queue_group_kill(struct kref *ref)
-{
- struct xe_exec_queue_group *group = container_of(ref, struct xe_exec_queue_group,
- kill_refcount);
- xe_exec_queue_kill(group->primary);
-}
-
-static inline void xe_exec_queue_group_kill_get(struct xe_exec_queue_group *group)
-{
- kref_get(&group->kill_refcount);
-}
-
-void xe_exec_queue_group_kill_put(struct xe_exec_queue_group *group)
-{
- if (!group)
- return;
-
- kref_put(&group->kill_refcount, xe_exec_queue_group_kill);
-}
-
void xe_exec_queue_destroy(struct kref *ref)
{
struct xe_exec_queue *q = container_of(ref, struct xe_exec_queue, refcount);
@@ -716,7 +696,6 @@ static int xe_exec_queue_group_init(struct xe_device *xe, struct xe_exec_queue *
group->primary = q;
group->cgp_bo = bo;
INIT_LIST_HEAD(&group->list);
- kref_init(&group->kill_refcount);
xa_init_flags(&group->xa, XA_FLAGS_ALLOC1);
mutex_init(&group->list_lock);
q->multi_queue.group = group;
@@ -792,11 +771,6 @@ static int xe_exec_queue_group_add(struct xe_device *xe, struct xe_exec_queue *q
q->multi_queue.pos = pos;
- if (group->primary->multi_queue.keep_active) {
- xe_exec_queue_group_kill_get(group);
- q->multi_queue.keep_active = true;
- }
-
return 0;
}
@@ -810,11 +784,6 @@ static void xe_exec_queue_group_delete(struct xe_device *xe, struct xe_exec_queu
lrc = xa_erase(&group->xa, q->multi_queue.pos);
xe_assert(xe, lrc);
xe_lrc_put(lrc);
-
- if (q->multi_queue.keep_active) {
- xe_exec_queue_group_kill_put(group);
- q->multi_queue.keep_active = false;
- }
}
static int exec_queue_set_multi_group(struct xe_device *xe, struct xe_exec_queue *q,
@@ -836,24 +805,12 @@ static int exec_queue_set_multi_group(struct xe_device *xe, struct xe_exec_queue
return -EINVAL;
if (value & DRM_XE_MULTI_GROUP_CREATE) {
- if (XE_IOCTL_DBG(xe, value & ~(DRM_XE_MULTI_GROUP_CREATE |
- DRM_XE_MULTI_GROUP_KEEP_ACTIVE)))
- return -EINVAL;
-
- /*
- * KEEP_ACTIVE is not supported in preempt fence mode as in that mode,
- * VM_DESTROY ioctl expects all exec queues of that VM are already killed.
- */
- if (XE_IOCTL_DBG(xe, (value & DRM_XE_MULTI_GROUP_KEEP_ACTIVE) &&
- xe_vm_in_preempt_fence_mode(q->vm)))
+ if (XE_IOCTL_DBG(xe, value & ~DRM_XE_MULTI_GROUP_CREATE))
return -EINVAL;
q->multi_queue.valid = true;
q->multi_queue.is_primary = true;
q->multi_queue.pos = 0;
- if (value & DRM_XE_MULTI_GROUP_KEEP_ACTIVE)
- q->multi_queue.keep_active = true;
-
return 0;
}
@@ -1419,11 +1376,6 @@ void xe_exec_queue_kill(struct xe_exec_queue *q)
q->ops->kill(q);
xe_vm_remove_compute_exec_queue(q->vm, q);
-
- if (!xe_exec_queue_is_multi_queue_primary(q) && q->multi_queue.keep_active) {
- xe_exec_queue_group_kill_put(q->multi_queue.group);
- q->multi_queue.keep_active = false;
- }
}
int xe_exec_queue_destroy_ioctl(struct drm_device *dev, void *data,
@@ -1450,10 +1402,7 @@ int xe_exec_queue_destroy_ioctl(struct drm_device *dev, void *data,
if (q->vm && q->hwe->hw_engine_group)
xe_hw_engine_group_del_exec_queue(q->hwe->hw_engine_group, q);
- if (xe_exec_queue_is_multi_queue_primary(q))
- xe_exec_queue_group_kill_put(q->multi_queue.group);
- else
- xe_exec_queue_kill(q);
+ xe_exec_queue_kill(q);
trace_xe_exec_queue_close(q);
xe_exec_queue_put(q);