All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: "Michał Winiarski" <michal.winiarski@intel.com>,
	intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v4 11/12] drm/i915/guc: Preemption! With GuC
Date: Wed, 25 Oct 2017 21:24:29 +0100	[thread overview]
Message-ID: <150896306920.2864.5272816339243082458@mail.alporthouse.com> (raw)
In-Reply-To: <20171025200020.16636-12-michal.winiarski@intel.com>

Quoting Michał Winiarski (2017-10-25 21:00:19)
> Pretty similar to what we have on execlists.
> We're reusing most of the GEM code, however, due to GuC quirks we need a
> couple of extra bits.
> Preemption is implemented as GuC action, and actions can be pretty slow.
> Because of that, we're using a mutex to serialize them. Since we're
> requesting preemption from the tasklet, the task of creating a workitem
> and wrapping it in GuC action is delegated to a worker.
> 
> To distinguish that preemption has finished, we're using additional
> piece of HWSP, and since we're not getting context switch interrupts,
> we're also adding a user interrupt.
> 
> The fact that our special preempt context has completed unfortunately
> doesn't mean that we're ready to submit new work. We also need to wait
> for GuC to finish its own processing.
> 
> v2: Don't compile out the wait for GuC, handle workqueue flush on reset,
> no need for ordered workqueue, put on a reviewer hat when looking at my own
> patches (Chris)
> Move struct work around in intel_guc, move user interruput outside of
> conditional (Michał)
> Keep ring around rather than chase though intel_context
> 
> v3: Extract WA for flushing ggtt writes to a helper (Chris)
> Keep work_struct in intel_guc rather than engine (Michał)
> Use ordered workqueue for inject_preempt worker to avoid GuC quirks.
> 
> v4: Drop now unused INTEL_GUC_PREEMPT_OPTION_IMMEDIATE (Daniele)
> Drop stray newlines, use container_of for intel_guc in worker,
> check for presence of workqueue when flushing it, rather than
> enable_guc_submission modparam, reorder preempt postprocessing (Chris)
> 
> Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Jeff McGee <jeff.mcgee@intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> Cc: Oscar Mateo <oscar.mateo@intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
> +#define GUC_PREEMPT_POSTPROCESS_DELAY_MS 10
> +static void wait_for_guc_preempt_report(struct intel_engine_cs *engine)
> +{
> +       struct intel_guc *guc = &engine->i915->guc;
> +       struct guc_shared_ctx_data *data = guc->shared_data_vaddr;
> +       struct guc_ctx_report *report =
> +               &data->preempt_ctx_report[engine->guc_id];
> +
> +       WARN_ON(wait_for_atomic(report->report_return_status ==
> +                               INTEL_GUC_REPORT_STATUS_COMPLETE,
> +                               GUC_PREEMPT_POSTPROCESS_DELAY_MS));
> +       /*
> +        * GuC is expecting that we're also going to clear the affected context
> +        * counter, let's also reset the return status to not depend on GuC
> +        * resetting it after recieving another preempt action
> +        */
> +       report->affected_count = 0;
> +       report->report_return_status = INTEL_GUC_REPORT_STATUS_UNKNOWN;
> +}
> +
> +

The horror! ;)

Looks like everything is in order. Preemptive
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>

I shall ponder the question of whether we can stress these
(guc/execlists) preemption paths more. We have checks that we can
preempt and reorder in-flight requests; we have simple smoketests. What
I feel is like we probably need more of the latter to find timing
issues. (A new mode for gem_concurrent_blit? There's nothing like running
a test for a few days to shake out timing bugs.)  Unless I've missed a
rule we can test in gem_exec_schedule.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2017-10-25 20:24 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-25 20:00 [PATCH 00/12] Preemption with GuC, fourth try Michał Winiarski
2017-10-25 20:00 ` [PATCH v2 01/12] drm/i915/guc: Do not use 0 for GuC doorbell cookie Michał Winiarski
2017-10-25 20:00 ` [PATCH 02/12] drm/i915/guc: Extract GuC stage desc pool creation into a helper Michał Winiarski
2017-10-25 20:00 ` [PATCH v2 03/12] drm/i915/guc: Allocate separate shared data object for GuC communication Michał Winiarski
2017-10-25 21:04   ` Michel Thierry
2017-10-25 20:00 ` [PATCH v2 04/12] drm/i915/guc: Add preemption action to GuC firmware interface Michał Winiarski
2017-10-25 20:00 ` [PATCH v3 05/12] drm/i915/guc: Add a second client, to be used for preemption Michał Winiarski
2017-10-26 12:50   ` Michal Wajdeczko
2017-10-26 13:20   ` [PATCH v4] " Michał Winiarski
2017-10-26 13:32     ` [PATCH v5] " Michał Winiarski
2017-10-26 13:44       ` Michal Wajdeczko
2017-10-26 14:17       ` [PATCH v6] " Michał Winiarski
2017-10-26 18:49         ` Michel Thierry
2017-10-26 20:02           ` Chris Wilson
2017-10-26 20:15             ` Michel Thierry
2017-10-25 20:00 ` [PATCH 06/12] drm/i915/guc: Split guc_wq_item_append Michał Winiarski
2017-10-25 20:00 ` [PATCH v2 07/12] drm/i915: Extract "emit write" part of emit breadcrumb functions Michał Winiarski
2017-10-25 20:00 ` [PATCH 08/12] drm/i915: Add information needed to track engine preempt state Michał Winiarski
2017-10-25 20:00 ` [PATCH v2 09/12] drm/i915/guc: Keep request->priority for its lifetime Michał Winiarski
2017-10-25 20:00 ` [PATCH v3 10/12] drm/i915: Rename helpers used for unwinding, use macro for can_preempt Michał Winiarski
2017-10-25 20:15   ` Chris Wilson
2017-10-25 20:00 ` [PATCH v4 11/12] drm/i915/guc: Preemption! With GuC Michał Winiarski
2017-10-25 20:24   ` Chris Wilson [this message]
2017-10-25 21:14   ` Chris Wilson
2017-10-26  7:27   ` [PATCH v5] " Michał Winiarski
2017-10-26 13:35     ` [PATCH v6] " Michał Winiarski
2017-10-25 20:00 ` [PATCH 12/12] HAX Enable GuC Submission for CI Michał Winiarski
2017-10-25 21:06 ` ✗ Fi.CI.BAT: failure for Preemption with GuC, fourth try Patchwork
2017-10-26  7:48 ` ✗ Fi.CI.BAT: warning for Preemption with GuC, fourth try (rev2) Patchwork
2017-10-26 13:41 ` ✗ Fi.CI.BAT: warning for Preemption with GuC, fourth try (rev3) Patchwork
2017-10-26 13:59 ` ✓ Fi.CI.BAT: success for Preemption with GuC, fourth try (rev5) Patchwork
2017-10-26 14:43 ` ✗ Fi.CI.BAT: warning for Preemption with GuC, fourth try (rev6) Patchwork
2017-10-26 15:18 ` ✓ Fi.CI.IGT: success for Preemption with GuC, fourth try (rev5) Patchwork
2017-10-26 15:59 ` ✓ Fi.CI.IGT: success for Preemption with GuC, fourth try (rev6) Patchwork
2017-10-26 20:37 ` [PATCH 00/12] Preemption with GuC, fourth try Chris Wilson

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=150896306920.2864.5272816339243082458@mail.alporthouse.com \
    --to=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=michal.winiarski@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 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.