From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 29/39] drm/i915: Use b->irq_enable() as predicate for mock engine
Date: Wed, 2 Jan 2019 15:21:21 +0000 [thread overview]
Message-ID: <de78c8ff-733b-9bd0-94ab-3eb4dc07a9b7@linux.intel.com> (raw)
In-Reply-To: <20190102094139.24014-29-chris@chris-wilson.co.uk>
On 02/01/2019 09:41, Chris Wilson wrote:
Some commit text please.
> References: d4ccceb05591 ("drm/i915/icl: Ringbuffer interrupt handling")
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/intel_breadcrumbs.c | 39 ++++++++------------
> drivers/gpu/drm/i915/intel_engine_cs.c | 11 ++----
> drivers/gpu/drm/i915/intel_ringbuffer.h | 1 -
> drivers/gpu/drm/i915/selftests/mock_engine.c | 1 -
> 4 files changed, 20 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c
> index 4ed7105d7ff5..7b517bf83507 100644
> --- a/drivers/gpu/drm/i915/intel_breadcrumbs.c
> +++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c
> @@ -158,6 +158,9 @@ static void intel_breadcrumbs_fake_irq(struct timer_list *t)
>
> static void irq_enable(struct intel_engine_cs *engine)
> {
> + if (!engine->irq_enable)
> + return;
> +
> /*
> * FIXME: Ideally we want this on the API boundary, but for the
> * sake of testing with mock breadcrumbs (no HW so unable to
> @@ -167,21 +170,20 @@ static void irq_enable(struct intel_engine_cs *engine)
> GEM_BUG_ON(!intel_irqs_enabled(engine->i915));
>
> /* Caller disables interrupts */
> - if (engine->irq_enable) {
> - spin_lock(&engine->i915->irq_lock);
> - engine->irq_enable(engine);
> - spin_unlock(&engine->i915->irq_lock);
> - }
> + spin_lock(&engine->i915->irq_lock);
> + engine->irq_enable(engine);
> + spin_unlock(&engine->i915->irq_lock);
> }
>
> static void irq_disable(struct intel_engine_cs *engine)
> {
> + if (!engine->irq_disable)
> + return;
> +
> /* Caller disables interrupts */
> - if (engine->irq_disable) {
> - spin_lock(&engine->i915->irq_lock);
> - engine->irq_disable(engine);
> - spin_unlock(&engine->i915->irq_lock);
> - }
> + spin_lock(&engine->i915->irq_lock);
> + engine->irq_disable(engine);
> + spin_unlock(&engine->i915->irq_lock);
> }
Noise hunks.
>
> void __intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine)
> @@ -293,25 +295,16 @@ static bool __intel_breadcrumbs_enable_irq(struct intel_breadcrumbs *b)
> if (b->irq_armed)
> return false;
>
> - /* The breadcrumb irq will be disarmed on the interrupt after the
> + /*
> + * The breadcrumb irq will be disarmed on the interrupt after the
> * waiters are signaled. This gives us a single interrupt window in
> * which we can add a new waiter and avoid the cost of re-enabling
> * the irq.
> */
> b->irq_armed = true;
>
> - if (I915_SELFTEST_ONLY(b->mock)) {
> - /* For our mock objects we want to avoid interaction
> - * with the real hardware (which is not set up). So
> - * we simply pretend we have enabled the powerwell
> - * and the irq, and leave it up to the mock
> - * implementation to call intel_engine_wakeup()
> - * itself when it wants to simulate a user interrupt,
> - */
> - return true;
> - }
> -
> - /* Since we are waiting on a request, the GPU should be busy
> + /*
> + * Since we are waiting on a request, the GPU should be busy
> * and should have its own rpm reference. This is tracked
> * by i915->gt.awake, we can forgo holding our own wakref
> * for the interrupt as before i915->gt.awake is released (when
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index 36177546f68b..7b80a087cc32 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -917,6 +917,9 @@ static bool ring_is_idle(struct intel_engine_cs *engine)
> intel_wakeref_t wakeref;
> bool idle = true;
>
> + if (I915_SELFTEST_ONLY(!engine->mmio_base))
> + return true;
Seems to make sense, but shouldn't the patch title be "Use
engine->mmio_base as predicate for mock engine hw access"?
Regards,
Tvrtko
> +
> /* If the whole device is asleep, the engine must be idle */
> wakeref = intel_runtime_pm_get_if_in_use(dev_priv);
> if (!wakeref)
> @@ -955,9 +958,6 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine)
> if (!intel_engine_signaled(engine, intel_engine_last_submit(engine)))
> return false;
>
> - if (I915_SELFTEST_ONLY(engine->breadcrumbs.mock))
> - return true;
> -
> /* Waiting to drain ELSP? */
> if (READ_ONCE(engine->execlists.active)) {
> struct tasklet_struct *t = &engine->execlists.tasklet;
> @@ -983,10 +983,7 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine)
> return false;
>
> /* Ring stopped? */
> - if (!ring_is_idle(engine))
> - return false;
> -
> - return true;
> + return ring_is_idle(engine);
> }
>
> bool intel_engines_are_idle(struct drm_i915_private *dev_priv)
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index bedb25d27469..452c13f3dded 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -397,7 +397,6 @@ struct intel_engine_cs {
> unsigned int irq_count;
>
> bool irq_armed : 1;
> - I915_SELFTEST_DECLARE(bool mock : 1);
> } breadcrumbs;
>
> struct {
> diff --git a/drivers/gpu/drm/i915/selftests/mock_engine.c b/drivers/gpu/drm/i915/selftests/mock_engine.c
> index 50e1a0b1af7e..9fe5b2c8f8d4 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_engine.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_engine.c
> @@ -201,7 +201,6 @@ struct intel_engine_cs *mock_engine(struct drm_i915_private *i915,
> i915_timeline_set_subclass(&engine->base.timeline, TIMELINE_ENGINE);
>
> intel_engine_init_breadcrumbs(&engine->base);
> - engine->base.breadcrumbs.mock = true; /* prevent touching HW for irqs */
>
> /* fake hw queue */
> spin_lock_init(&engine->hw_lock);
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-01-02 15:21 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-02 9:41 [PATCH 01/39] drm: Reorder set_property_atomic to avoid returning with an active ww_ctx Chris Wilson
2019-01-02 9:41 ` [PATCH 02/39] drm/i915/selftests: Take a breath during check_partial_mappings() Chris Wilson
2019-01-02 11:07 ` Mika Kuoppala
2019-01-02 11:14 ` Chris Wilson
2019-01-02 9:41 ` [PATCH 03/39] drm/i915: Return immediately if trylock fails for direct-reclaim Chris Wilson
2019-01-02 9:41 ` [PATCH 04/39] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Chris Wilson
2019-01-02 9:41 ` [PATCH 05/39] drm/i915/userptr: Probe vma range before gup Chris Wilson
2019-01-02 9:41 ` [PATCH 06/39] drm/i915: Always try to reset the GPU on takeover Chris Wilson
2019-01-02 13:19 ` Mika Kuoppala
2019-01-02 13:47 ` Chris Wilson
2019-01-02 14:09 ` Mika Kuoppala
2019-01-02 9:41 ` [PATCH 07/39] drm/i915: Report the number of closed vma held by each context in debugfs Chris Wilson
2019-01-04 13:54 ` Mika Kuoppala
2019-01-02 9:41 ` [PATCH 08/39] drm/i915: Track all held rpm wakerefs Chris Wilson
2019-01-02 9:41 ` [PATCH 09/39] drm/i915: Markup paired operations on wakerefs Chris Wilson
2019-01-03 9:38 ` Jani Nikula
2019-01-03 10:28 ` Chris Wilson
2019-01-02 9:41 ` [PATCH 10/39] drm/i915: Syntatic sugar for using intel_runtime_pm Chris Wilson
2019-01-03 9:48 ` Jani Nikula
2019-01-03 10:35 ` Chris Wilson
2019-01-02 9:41 ` [PATCH 11/39] drm/i915: Markup paired operations on display power domains Chris Wilson
2019-01-02 9:41 ` [PATCH 12/39] drm/i915: Track the wakeref used to initialise " Chris Wilson
2019-01-02 9:41 ` [PATCH 13/39] drm/i915: Combined gt.awake/gt.power wakerefs Chris Wilson
2019-01-02 9:41 ` [PATCH 14/39] drm/i915/dp: Markup pps lock power well Chris Wilson
2019-01-02 9:41 ` [PATCH 15/39] drm/i915: Complain if hsw_get_pipe_config acquires the same power well twice Chris Wilson
2019-01-02 9:41 ` [PATCH 16/39] drm/i915: Mark up Ironlake ips with rpm wakerefs Chris Wilson
2019-01-02 9:41 ` [PATCH 17/39] drm/i915: Serialise concurrent calls to i915_gem_set_wedged() Chris Wilson
2019-01-02 9:41 ` [PATCH 18/39] drm/i915: Differentiate between ggtt->mutex and ppgtt->mutex Chris Wilson
2019-01-03 13:29 ` Mika Kuoppala
2019-01-03 13:43 ` Tvrtko Ursulin
2019-01-03 13:55 ` Chris Wilson
2019-01-02 9:41 ` [PATCH 19/39] drm/i915: Pull all the reset functionality together into i915_reset.c Chris Wilson
2019-01-02 9:41 ` [PATCH 20/39] drm/i915: Make all GPU resets atomic Chris Wilson
2019-01-02 9:41 ` [PATCH 21/39] drm/i915/guc: Disable global reset Chris Wilson
2019-01-07 18:31 ` Daniele Ceraolo Spurio
2019-01-07 18:50 ` Chris Wilson
2019-01-07 21:28 ` Daniele Ceraolo Spurio
2019-01-07 21:35 ` Chris Wilson
2019-01-07 21:45 ` Daniele Ceraolo Spurio
2019-01-02 9:41 ` [PATCH 22/39] drm/i915: Remove GPU reset dependence on struct_mutex Chris Wilson
2019-01-02 9:41 ` [PATCH 23/39] drm/i915: Issue engine resets onto idle engines Chris Wilson
2019-01-02 9:41 ` [PATCH 24/39] drm/i915: Stop tracking MRU activity on VMA Chris Wilson
2019-01-02 13:13 ` Tvrtko Ursulin
2019-01-02 13:48 ` Chris Wilson
2019-01-02 9:41 ` [PATCH 25/39] drm/i915: Pull VM lists under the VM mutex Chris Wilson
2019-01-02 13:21 ` Tvrtko Ursulin
2019-01-02 13:28 ` Chris Wilson
2019-01-02 9:41 ` [PATCH 26/39] drm/i915: Consolidate the bound/unbound vma lists into one Chris Wilson
2019-01-02 14:22 ` Tvrtko Ursulin
2019-01-02 9:41 ` [PATCH 27/39] drm/i915: Move vma lookup to its own lock Chris Wilson
2019-01-02 15:07 ` Tvrtko Ursulin
2019-01-02 9:41 ` [PATCH 28/39] drm/i915: Move intel_execlists_show_requests() aside Chris Wilson
2019-01-02 15:15 ` Tvrtko Ursulin
2019-01-02 9:41 ` [PATCH 29/39] drm/i915: Use b->irq_enable() as predicate for mock engine Chris Wilson
2019-01-02 15:21 ` Tvrtko Ursulin [this message]
2019-01-04 12:13 ` Chris Wilson
2019-01-04 13:24 ` Tvrtko Ursulin
2019-01-02 9:41 ` [PATCH 30/39] drm/i915/selftests: Allocate mock ring/timeline per context Chris Wilson
2019-01-02 9:41 ` [PATCH 31/39] drm/i915/selftests: Make evict tolerant of foreign objects Chris Wilson
2019-01-02 9:41 ` [PATCH 32/39] drm/i915: Remove the intel_engine_notify tracepoint Chris Wilson
2019-01-02 9:41 ` [PATCH 33/39] drm/i915: Move list of timelines under its own lock Chris Wilson
2019-01-02 9:41 ` [PATCH 34/39] drm/i915: Introduce concept of per-timeline (context) HWSP Chris Wilson
2019-01-02 9:41 ` [PATCH 35/39] drm/i915: Enlarge vma->pin_count Chris Wilson
2019-01-02 9:41 ` [PATCH 36/39] drm/i915: Allocate a status page for each timeline Chris Wilson
2019-01-02 9:41 ` [PATCH 37/39] drm/i915: Track the context's seqno in its own timeline HWSP Chris Wilson
2019-01-03 15:08 ` Chris Wilson
2019-01-02 9:41 ` [PATCH 38/39] drm/i915: Identify active requests Chris Wilson
2019-01-02 9:41 ` [PATCH 39/39] drm/i915: Replace global breadcrumbs with per-context interrupt tracking Chris Wilson
2019-01-02 12:09 ` ✗ Fi.CI.BAT: failure for series starting with [01/39] drm: Reorder set_property_atomic to avoid returning with an active ww_ctx 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=de78c8ff-733b-9bd0-94ab-3eb4dc07a9b7@linux.intel.com \
--to=tvrtko.ursulin@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