From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Andrzej Hajda <andrzej.hajda@intel.com>,
Jani Nikula <jani.nikula@linux.intel.com>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
Rodrigo Vivi <rodrigo.vivi@intel.com>,
David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org,
Chris Wilson <chris.p.wilson@linux.intel.com>,
Andi Shyti <andi.shyti@linux.intel.com>,
Chris Wilson <chris@chris-wilson.co.uk>
Subject: Re: [PATCH] drm/i915/gt: Hold a wakeref for the active VM
Date: Thu, 30 Mar 2023 16:10:37 +0100 [thread overview]
Message-ID: <8c9e6931-e445-4df6-90e5-b648a3fa1b3b@linux.intel.com> (raw)
In-Reply-To: <20230330-hold_wakeref_for_active_vm-v1-1-baca712692f6@intel.com>
On 30/03/2023 15:35, Andrzej Hajda wrote:
> From: Chris Wilson <chris@chris-wilson.co.uk>
>
> There may be a disconnect between the GT used by the engine and the GT
> used for the VM, requiring us to hold a wakeref on both while the GPU is
> active with this request.
Presumably this is for MTL? "drm/i1915/mtl: ..." ?
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> [ahajda: removed not-yet-upstremed wakeref tracking bits]
> Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com>
> ---
> drivers/gpu/drm/i915/gt/intel_context.h | 15 +++++++++++----
> drivers/gpu/drm/i915/gt/intel_engine_pm.c | 3 +++
> 2 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_context.h b/drivers/gpu/drm/i915/gt/intel_context.h
> index 0a8d553da3f439..48f888c3da083b 100644
> --- a/drivers/gpu/drm/i915/gt/intel_context.h
> +++ b/drivers/gpu/drm/i915/gt/intel_context.h
> @@ -14,6 +14,7 @@
> #include "i915_drv.h"
> #include "intel_context_types.h"
> #include "intel_engine_types.h"
> +#include "intel_gt_pm.h"
> #include "intel_ring_types.h"
> #include "intel_timeline_types.h"
> #include "i915_trace.h"
> @@ -207,8 +208,11 @@ void intel_context_exit_engine(struct intel_context *ce);
> static inline void intel_context_enter(struct intel_context *ce)
> {
> lockdep_assert_held(&ce->timeline->mutex);
> - if (!ce->active_count++)
> - ce->ops->enter(ce);
> + if (ce->active_count++)
> + return;
> +
> + ce->ops->enter(ce);
> + intel_gt_pm_get(ce->vm->gt);
> }
>
> static inline void intel_context_mark_active(struct intel_context *ce)
> @@ -222,8 +226,11 @@ static inline void intel_context_exit(struct intel_context *ce)
> {
> lockdep_assert_held(&ce->timeline->mutex);
> GEM_BUG_ON(!ce->active_count);
> - if (!--ce->active_count)
> - ce->ops->exit(ce);
> + if (--ce->active_count)
> + return;
> +
> + intel_gt_pm_put_async(ce->vm->gt);
> + ce->ops->exit(ce);
Above too are balance and plausible - media tile engine vs root tile VM,
although at the moment it escapes me what exactly would go bad, like
what gets powered down which is then access by the executing request and
fails how?
> }
>
> static inline struct intel_context *intel_context_get(struct intel_context *ce)
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_pm.c b/drivers/gpu/drm/i915/gt/intel_engine_pm.c
> index e971b153fda976..ac0566c5e99e17 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_pm.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_pm.c
> @@ -114,6 +114,9 @@ __queue_and_release_pm(struct i915_request *rq,
>
> ENGINE_TRACE(engine, "parking\n");
>
> + GEM_BUG_ON(rq->context->active_count != 1);
> + __intel_gt_pm_get(engine->gt);
> +
But this one I don't immediately get. Above we have get and put which is
balanced - fine, but where is this extra get coming from, who will put
it and where?
Regards,
Tvrtko
> /*
> * We have to serialise all potential retirement paths with our
> * submission, as we don't want to underflow either the
>
> ---
> base-commit: 3385d6482cd60f2a0bbb0fa97b70ae7dbba4f95c
> change-id: 20230330-hold_wakeref_for_active_vm-7f013a449ef3
>
> Best regards,
prev parent reply other threads:[~2023-03-30 15:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-30 14:35 [PATCH] drm/i915/gt: Hold a wakeref for the active VM Andrzej Hajda
2023-03-30 15:03 ` Rodrigo Vivi
2023-03-30 15:10 ` Tvrtko Ursulin [this message]
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=8c9e6931-e445-4df6-90e5-b648a3fa1b3b@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=airlied@gmail.com \
--cc=andi.shyti@linux.intel.com \
--cc=andrzej.hajda@intel.com \
--cc=chris.p.wilson@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rodrigo.vivi@intel.com \
/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