diff options
author | Sidath Senanayake <sidaths@google.com> | 2020-04-14 14:55:25 +0200 |
---|---|---|
committer | Sidath Senanayake <sidaths@google.com> | 2020-04-14 14:55:25 +0200 |
commit | b64f568f943e567534694cc993270adca96dcd06 (patch) | |
tree | ff175812d02016e7e630217ecf8de53d6ac2d6a2 /mali_kbase/mali_kbase_event.c | |
parent | b2b1764ee0fe59773c1c8f621ad2955c35cd9d92 (diff) | |
download | gpu-b64f568f943e567534694cc993270adca96dcd06.tar.gz |
Mali Valhall DDK r24p0 KMD
Provenance:
c5a37f014 (collaborate/EAC/v_r24p0)
VX504X08X-BU-00000-r24p0-01rel0 - Android DDK
VX504X08X-BU-60000-r24p0-01rel0 - Android Document Bundle
Signed-off-by: Sidath Senanayake <sidaths@google.com>
Change-Id: I1536474b6a18731cd377251c6dc947811ba0c787
Diffstat (limited to 'mali_kbase/mali_kbase_event.c')
-rw-r--r-- | mali_kbase/mali_kbase_event.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/mali_kbase/mali_kbase_event.c b/mali_kbase/mali_kbase_event.c index 0ba5f97..2bbc313 100644 --- a/mali_kbase/mali_kbase_event.c +++ b/mali_kbase/mali_kbase_event.c @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT 2010-2016,2018-2019 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2010-2016,2018-2020 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -44,7 +44,7 @@ static struct base_jd_udata kbase_event_process(struct kbase_context *kctx, stru KBASE_TLSTREAM_TL_DEL_ATOM(kbdev, katom); katom->status = KBASE_JD_ATOM_STATE_UNUSED; - + dev_dbg(kbdev->dev, "Atom %p status to unused\n", (void *)katom); wake_up(&katom->completed); return data; @@ -83,10 +83,12 @@ int kbase_event_dequeue(struct kbase_context *ctx, struct base_jd_event_v2 *ueve dev_dbg(ctx->kbdev->dev, "event dequeuing %p\n", (void *)atom); uevent->event_code = atom->event_code; + uevent->atom_number = (atom - ctx->jctx.atoms); if (atom->core_req & BASE_JD_REQ_EXTERNAL_RESOURCES) kbase_jd_free_external_resources(atom); + mutex_lock(&ctx->jctx.lock); uevent->udata = kbase_event_process(ctx, atom); mutex_unlock(&ctx->jctx.lock); @@ -110,6 +112,7 @@ static void kbase_event_process_noreport_worker(struct work_struct *data) if (katom->core_req & BASE_JD_REQ_EXTERNAL_RESOURCES) kbase_jd_free_external_resources(katom); + mutex_lock(&kctx->jctx.lock); kbase_event_process(kctx, katom); mutex_unlock(&kctx->jctx.lock); @@ -162,22 +165,25 @@ void kbase_event_post(struct kbase_context *ctx, struct kbase_jd_atom *atom) { struct kbase_device *kbdev = ctx->kbdev; + dev_dbg(kbdev->dev, "Posting event for atom %p\n", (void *)atom); + if (atom->core_req & BASE_JD_REQ_EVENT_ONLY_ON_FAILURE) { if (atom->event_code == BASE_JD_EVENT_DONE) { - /* Don't report the event */ + dev_dbg(kbdev->dev, "Suppressing event (atom done)\n"); kbase_event_process_noreport(ctx, atom); return; } } if (atom->core_req & BASEP_JD_REQ_EVENT_NEVER) { - /* Don't report the event */ + dev_dbg(kbdev->dev, "Suppressing event (never)\n"); kbase_event_process_noreport(ctx, atom); return; } KBASE_TLSTREAM_TL_ATTRIB_ATOM_STATE(kbdev, atom, TL_ATOM_STATE_POSTED); if (atom->core_req & BASE_JD_REQ_EVENT_COALESCE) { /* Don't report the event until other event(s) have completed */ + dev_dbg(kbdev->dev, "Deferring event (coalesced)\n"); mutex_lock(&ctx->event_mutex); list_add_tail(&atom->dep_item[0], &ctx->event_coalesce_list); ++ctx->event_coalesce_count; @@ -191,6 +197,7 @@ void kbase_event_post(struct kbase_context *ctx, struct kbase_jd_atom *atom) list_add_tail(&atom->dep_item[0], &ctx->event_list); atomic_add(event_count, &ctx->event_count); mutex_unlock(&ctx->event_mutex); + dev_dbg(kbdev->dev, "Reporting %d events\n", event_count); kbase_event_wakeup(ctx); } @@ -212,9 +219,7 @@ int kbase_event_init(struct kbase_context *kctx) INIT_LIST_HEAD(&kctx->event_list); INIT_LIST_HEAD(&kctx->event_coalesce_list); mutex_init(&kctx->event_mutex); - atomic_set(&kctx->event_count, 0); kctx->event_coalesce_count = 0; - atomic_set(&kctx->event_closed, false); kctx->event_workq = alloc_workqueue("kbase_event", WQ_MEM_RECLAIM, 1); if (NULL == kctx->event_workq) |