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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.