summaryrefslogtreecommitdiff
path: root/mali_kbase
diff options
context:
space:
mode:
authorJack Diver <diverj@google.com>2023-04-04 17:22:36 +0000
committerJack Diver <diverj@google.com>2023-04-05 09:46:56 +0000
commitb141d6e750e9651a243433eac73fa3b8c00cd763 (patch)
tree1ea2c79612bbae14d1767db4e6d742ccff7636b8 /mali_kbase
parenta6919ba26a50a8d8d70377fcd0b75102af4265ee (diff)
downloadgpu-b141d6e750e9651a243433eac73fa3b8c00cd763.tar.gz
mali_kbase: Remove redundant if check to unblock suspend
Completed atoms are expected to always have a flag indicating they were submitted. A warning is present to assert this fact. Currently, if the flag is not present it will block GPU suspend. Remove the if to unblock suspend and prevent a kernel lockup. Bug: 233522199 Change-Id: I541ac835ec36562f7724b35e171d71537e763ed9 Signed-off-by: Jack Diver <diverj@google.com>
Diffstat (limited to 'mali_kbase')
-rw-r--r--mali_kbase/mali_kbase_js.c52
1 files changed, 23 insertions, 29 deletions
diff --git a/mali_kbase/mali_kbase_js.c b/mali_kbase/mali_kbase_js.c
index 752a462..598a11b 100644
--- a/mali_kbase/mali_kbase_js.c
+++ b/mali_kbase/mali_kbase_js.c
@@ -3281,6 +3281,7 @@ bool kbase_js_complete_atom_wq(struct kbase_context *kctx,
int atom_slot;
bool context_idle = false;
int prio = katom->sched_priority;
+ bool slot_became_unblocked;
kbdev = kctx->kbdev;
atom_slot = katom->slot_nr;
@@ -3303,44 +3304,37 @@ bool kbase_js_complete_atom_wq(struct kbase_context *kctx,
mutex_lock(&js_devdata->runpool_mutex);
spin_lock_irqsave(&kbdev->hwaccess_lock, flags);
- if (katom->atom_flags & KBASE_KATOM_FLAG_JSCTX_IN_TREE) {
- bool slot_became_unblocked;
+ WARN_ON(!(katom->atom_flags & KBASE_KATOM_FLAG_JSCTX_IN_TREE));
- dev_dbg(kbdev->dev, "Atom %pK is in runnable_tree\n",
- (void *)katom);
+ dev_dbg(kbdev->dev, "Atom %pK is in runnable_tree\n", (void *)katom);
- slot_became_unblocked =
- kbase_jsctx_slot_atom_pulled_dec(kctx, katom);
- context_idle = !kbase_jsctx_atoms_pulled(kctx);
+ slot_became_unblocked = kbase_jsctx_slot_atom_pulled_dec(kctx, katom);
+ context_idle = !kbase_jsctx_atoms_pulled(kctx);
- if (!kbase_jsctx_atoms_pulled(kctx) && !kctx->slots_pullable) {
- WARN_ON(!kbase_ctx_flag(kctx, KCTX_RUNNABLE_REF));
- kbase_ctx_flag_clear(kctx, KCTX_RUNNABLE_REF);
- atomic_dec(&kbdev->js_data.nr_contexts_runnable);
- timer_sync = true;
- }
+ if (!kbase_jsctx_atoms_pulled(kctx) && !kctx->slots_pullable) {
+ WARN_ON(!kbase_ctx_flag(kctx, KCTX_RUNNABLE_REF));
+ kbase_ctx_flag_clear(kctx, KCTX_RUNNABLE_REF);
+ atomic_dec(&kbdev->js_data.nr_contexts_runnable);
+ timer_sync = true;
+ }
- /* If this slot has been blocked due to soft-stopped atoms, and
- * all atoms have now been processed at this priority level and
- * higher, then unblock the slot
- */
- if (slot_became_unblocked) {
- dev_dbg(kbdev->dev,
- "kctx %pK is no longer blocked from submitting on slot %d at priority %d or higher\n",
- (void *)kctx, atom_slot, prio);
+ /* If this slot has been blocked due to soft-stopped atoms, and
+ * all atoms have now been processed at this priority level and
+ * higher, then unblock the slot
+ */
+ if (slot_became_unblocked) {
+ dev_dbg(kbdev->dev,
+ "kctx %pK is no longer blocked from submitting on slot %d at priority %d or higher\n",
+ (void *)kctx, atom_slot, prio);
- if (kbase_js_ctx_pullable(kctx, atom_slot, true))
- timer_sync |=
- kbase_js_ctx_list_add_pullable_nolock(
- kbdev, kctx, atom_slot);
- }
+ if (kbase_js_ctx_pullable(kctx, atom_slot, true))
+ timer_sync |=
+ kbase_js_ctx_list_add_pullable_nolock(kbdev, kctx, atom_slot);
}
- WARN_ON(!(katom->atom_flags & KBASE_KATOM_FLAG_JSCTX_IN_TREE));
if (!kbase_jsctx_slot_atoms_pulled(kctx, atom_slot) &&
jsctx_rb_none_to_pull(kctx, atom_slot)) {
- if (!list_empty(
- &kctx->jctx.sched_info.ctx.ctx_list_entry[atom_slot]))
+ if (!list_empty(&kctx->jctx.sched_info.ctx.ctx_list_entry[atom_slot]))
timer_sync |= kbase_js_ctx_list_remove_nolock(
kctx->kbdev, kctx, atom_slot);
}