diff options
author | Jack Diver <diverj@google.com> | 2023-04-04 17:22:36 +0000 |
---|---|---|
committer | Jack Diver <diverj@google.com> | 2023-04-05 09:46:56 +0000 |
commit | b141d6e750e9651a243433eac73fa3b8c00cd763 (patch) | |
tree | 1ea2c79612bbae14d1767db4e6d742ccff7636b8 /mali_kbase | |
parent | a6919ba26a50a8d8d70377fcd0b75102af4265ee (diff) | |
download | gpu-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.c | 52 |
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); } |