From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: "Ceraolo Spurio, Daniele" <daniele.ceraolospurio@intel.com>,
intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH] drm/i915/guc: Initialize GuC submission locks and queues early
Date: Wed, 16 Feb 2022 11:54:35 +0000 [thread overview]
Message-ID: <10cd355a-cc30-ac88-bed1-adcf91b033db@linux.intel.com> (raw)
In-Reply-To: <02e89fe1-a97d-1587-ea78-1e3a4518c649@intel.com>
On 15/02/2022 16:39, Ceraolo Spurio, Daniele wrote:
> On 2/15/2022 1:09 AM, Tvrtko Ursulin wrote:
>>
>> On 15/02/2022 01:11, Daniele Ceraolo Spurio wrote:
>>> Move initialization of submission-related spinlock, lists and workers to
>>> init_early. This fixes an issue where if the GuC init fails we might
>>> still try to get the lock in the context cleanup code. Note that it is
>>
>> What's the worst case impact on non-debug builds aka is Fixes: required?
>
> There is no lock contention in this scenario and nothing is done within
> the locked section (because submission is not initialized and all
> contexts are marked as invalid), so no problems from the fact that the
> lock doesn't work. Is that enough to avoid a fixes tag?
If the "lock doesn't work" is benign due no chance of touching
uninitialised memory and then deadlocking then it's good. I just
couldn't read that part from the commit message and did not have time to
go dig into the code.
Regards,
Tvrtko
> Daniele
>
>>
>> Regards,
>>
>> Tvrtko
>>
>>> safe to call the GuC context cleanup code even if the init failed
>>> because all contexts are initialized with an invalid GuC ID, which will
>>> cause the GuC side of the cleanup to be skipped, so it is easier to just
>>> make sure the variables are initialized than to special case the cleanup
>>> to handle the case when they're not.
>>>
>>> References: https://gitlab.freedesktop.org/drm/intel/-/issues/4932
>>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>>> Cc: Matthew Brost <matthew.brost@intel.com>
>>> Cc: John Harrison <John.C.Harrison@Intel.com>
>>> ---
>>> .../gpu/drm/i915/gt/uc/intel_guc_submission.c | 27 ++++++++++---------
>>> 1 file changed, 14 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>>> b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>>> index b3a429a92c0da..2160da2c83cbf 100644
>>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>>> @@ -1818,24 +1818,11 @@ int intel_guc_submission_init(struct
>>> intel_guc *guc)
>>> */
>>> GEM_BUG_ON(!guc->lrc_desc_pool);
>>> - xa_init_flags(&guc->context_lookup, XA_FLAGS_LOCK_IRQ);
>>> -
>>> - spin_lock_init(&guc->submission_state.lock);
>>> - INIT_LIST_HEAD(&guc->submission_state.guc_id_list);
>>> - ida_init(&guc->submission_state.guc_ids);
>>> - INIT_LIST_HEAD(&guc->submission_state.destroyed_contexts);
>>> - INIT_WORK(&guc->submission_state.destroyed_worker,
>>> - destroyed_worker_func);
>>> - INIT_WORK(&guc->submission_state.reset_fail_worker,
>>> - reset_fail_worker_func);
>>> -
>>> guc->submission_state.guc_ids_bitmap =
>>> bitmap_zalloc(NUMBER_MULTI_LRC_GUC_ID(guc), GFP_KERNEL);
>>> if (!guc->submission_state.guc_ids_bitmap)
>>> return -ENOMEM;
>>> - spin_lock_init(&guc->timestamp.lock);
>>> - INIT_DELAYED_WORK(&guc->timestamp.work, guc_timestamp_ping);
>>> guc->timestamp.ping_delay = (POLL_TIME_CLKS /
>>> gt->clock_frequency + 1) * HZ;
>>> guc->timestamp.shift = gpm_timestamp_shift(gt);
>>> @@ -3831,6 +3818,20 @@ static bool __guc_submission_selected(struct
>>> intel_guc *guc)
>>> void intel_guc_submission_init_early(struct intel_guc *guc)
>>> {
>>> + xa_init_flags(&guc->context_lookup, XA_FLAGS_LOCK_IRQ);
>>> +
>>> + spin_lock_init(&guc->submission_state.lock);
>>> + INIT_LIST_HEAD(&guc->submission_state.guc_id_list);
>>> + ida_init(&guc->submission_state.guc_ids);
>>> + INIT_LIST_HEAD(&guc->submission_state.destroyed_contexts);
>>> + INIT_WORK(&guc->submission_state.destroyed_worker,
>>> + destroyed_worker_func);
>>> + INIT_WORK(&guc->submission_state.reset_fail_worker,
>>> + reset_fail_worker_func);
>>> +
>>> + spin_lock_init(&guc->timestamp.lock);
>>> + INIT_DELAYED_WORK(&guc->timestamp.work, guc_timestamp_ping);
>>> +
>>> guc->submission_state.num_guc_ids = GUC_MAX_LRC_DESCRIPTORS;
>>> guc->submission_supported = __guc_submission_supported(guc);
>>> guc->submission_selected = __guc_submission_selected(guc);
>
next prev parent reply other threads:[~2022-02-16 11:54 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-15 1:11 [Intel-gfx] [PATCH] drm/i915/guc: Initialize GuC submission locks and queues early Daniele Ceraolo Spurio
2022-02-15 9:09 ` Tvrtko Ursulin
2022-02-15 16:39 ` Ceraolo Spurio, Daniele
2022-02-16 11:54 ` Tvrtko Ursulin [this message]
2022-02-16 4:20 ` [Intel-gfx] ✓ Fi.CI.BAT: success for " Patchwork
2022-02-16 9:23 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2022-02-19 0:54 ` [Intel-gfx] [PATCH] " John Harrison
2022-02-25 23:18 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/guc: Initialize GuC submission locks and queues early (rev2) Patchwork
2022-02-26 22:31 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=10cd355a-cc30-ac88-bed1-adcf91b033db@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=daniele.ceraolospurio@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox