From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/4] drm/i915: Report back whether the irq was armed when adding the waiter
Date: Thu, 08 Jun 2017 13:12:18 +0300 [thread overview]
Message-ID: <8737badbzx.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <20170605102619.4679-2-chris@chris-wilson.co.uk>
Chris Wilson <chris@chris-wilson.co.uk> writes:
> The important condition that we need to check after enabling the
> interrupt for signaling is whether the request completed in the process
> (and so we missed that interrupt). A large cost in enabling the
> signaling (rather than waiters) is in waking up the auxiliary signaling
> thread, but we only need to do so to catch that missed interrupt. If we
> know we didn't miss any interrupts (because we didn't arm the interrupt)
> then we can skip waking the auxiliary thread.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
> drivers/gpu/drm/i915/intel_breadcrumbs.c | 16 +++++++++++-----
> 1 file changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c
> index 183afcb036aa..dbcad9f6b2d5 100644
> --- a/drivers/gpu/drm/i915/intel_breadcrumbs.c
> +++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c
> @@ -329,7 +329,7 @@ static bool __intel_engine_add_wait(struct intel_engine_cs *engine,
> {
> struct intel_breadcrumbs *b = &engine->breadcrumbs;
> struct rb_node **p, *parent, *completed;
> - bool first;
> + bool first, irq_armed;
> u32 seqno;
>
> /* Insert the request into the retirement ordered list
> @@ -344,6 +344,7 @@ static bool __intel_engine_add_wait(struct intel_engine_cs *engine,
> * removing stale elements in the tree, we may be able to reduce the
> * ping-pong between the old bottom-half and ourselves as first-waiter.
> */
> + irq_armed = false;
> first = true;
> parent = NULL;
> completed = NULL;
> @@ -390,6 +391,7 @@ static bool __intel_engine_add_wait(struct intel_engine_cs *engine,
>
> if (first) {
> spin_lock(&b->irq_lock);
> + irq_armed = !b->irq_armed;
This could use a comment.
> b->irq_wait = wait;
> /* After assigning ourselves as the new bottom-half, we must
> * perform a cursory check to prevent a missed interrupt.
> @@ -426,20 +428,24 @@ static bool __intel_engine_add_wait(struct intel_engine_cs *engine,
> GEM_BUG_ON(!b->irq_armed);
> GEM_BUG_ON(rb_first(&b->waiters) != &b->irq_wait->node);
>
> - return first;
> + return irq_armed;
> }
>
> bool intel_engine_add_wait(struct intel_engine_cs *engine,
> struct intel_wait *wait)
> {
> struct intel_breadcrumbs *b = &engine->breadcrumbs;
> - bool first;
> + bool irq_armed;
>
> spin_lock_irq(&b->rb_lock);
> - first = __intel_engine_add_wait(engine, wait);
> + irq_armed = __intel_engine_add_wait(engine, wait);
> spin_unlock_irq(&b->rb_lock);
> + if (irq_armed)
> + return irq_armed;
>
> - return first;
> + /* Make the caller recheck if its request has already
> started. */
This could be lifted to the function documentation to describe
what the return value actually means. But I am not insisting.
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
> + return i915_seqno_passed(intel_engine_get_seqno(engine),
> + wait->seqno - 1);
> }
>
> static inline bool chain_wakeup(struct rb_node *rb, int priority)
> --
> 2.11.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2017-06-08 10:12 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-05 10:26 [PATCH 1/4] drm/i915: Check signaled state after enabling signaling Chris Wilson
2017-06-05 10:26 ` [PATCH 2/4] drm/i915: Report back whether the irq was armed when adding the waiter Chris Wilson
2017-06-08 10:09 ` Joonas Lahtinen
2017-06-08 10:12 ` Mika Kuoppala [this message]
2017-06-05 10:26 ` [PATCH 3/4] drm/i915: Skip adding the request to the signal tree is complete Chris Wilson
2017-06-08 9:47 ` Joonas Lahtinen
2017-06-05 10:26 ` [PATCH 4/4] drm/i915: Remove the spin-request during execbuf await_request Chris Wilson
2017-06-07 10:22 ` Tvrtko Ursulin
2017-06-08 10:02 ` Joonas Lahtinen
2017-06-08 10:07 ` Chris Wilson
2017-06-05 10:54 ` ✓ Fi.CI.BAT: success for series starting with [1/4] drm/i915: Check signaled state after enabling signaling Patchwork
2017-06-05 10:55 ` [PATCH 1/4] " Mika Kuoppala
2017-06-08 9:32 ` Joonas Lahtinen
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=8737badbzx.fsf@gaia.fi.intel.com \
--to=mika.kuoppala@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--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