From b141d6e750e9651a243433eac73fa3b8c00cd763 Mon Sep 17 00:00:00 2001 From: Jack Diver Date: Tue, 4 Apr 2023 17:22:36 +0000 Subject: 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 --- mali_kbase/mali_kbase_js.c | 52 ++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 29 deletions(-) (limited to 'mali_kbase') 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); } -- cgit v1.2.3