[PATCH v2] drm/i915/gvt: emit init breadcrumb for gvt request
Zhenyu Wang
zhenyuw at linux.intel.com
Mon May 13 02:36:21 UTC 2019
On 2019.05.10 15:57:20 +0800, Weinan wrote:
> "To track whether a request has started on HW, we can emit a breadcrumb at
> the beginning of the request and check its timeline's HWSP to see if the
> breadcrumb has advanced past the start of this request." It means all the
> request which timeline's has_init_breadcrumb is true, then the
> emit_init_breadcrumb process must have before emitting the real commands,
> otherwise, the scheduler might get a wrong state of this request during
> reset. If the request is exactly the guilty one, the scheduler won't
> terminate it with the wrong state. To avoid this, do emit_init_breadcrumb
> for all the requests from gvt.
>
> v2: cc to stable kernel
>
> Fixes: 8547444137ec ("drm/i915: Identify active requests")
> Cc: stable at vger.kernel.org
> Signed-off-by: Weinan <weinan.z.li at intel.com>
Thanks for the fix!
Acked-by: Zhenyu Wang <zhenyuw at linux.intel.com>
> ---
> drivers/gpu/drm/i915/gvt/scheduler.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
> index 7c99bbc3e2b8..ccd71152c9bc 100644
> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> @@ -298,12 +298,31 @@ static int copy_workload_to_ring_buffer(struct intel_vgpu_workload *workload)
> struct i915_request *req = workload->req;
> void *shadow_ring_buffer_va;
> u32 *cs;
> + int err;
>
> if ((IS_KABYLAKE(req->i915) || IS_BROXTON(req->i915)
> || IS_COFFEELAKE(req->i915))
> && is_inhibit_context(req->hw_context))
> intel_vgpu_restore_inhibit_context(vgpu, req);
>
> + /*
> + * To track whether a request has started on HW, we can emit a
> + * breadcrumb at the beginning of the request and check its
> + * timeline's HWSP to see if the breadcrumb has advanced past the
> + * start of this request. Actually, the request must have the
> + * init_breadcrumb if its timeline set has_init_bread_crumb, or the
> + * scheduler might get a wrong state of it during reset. Since the
> + * requests from gvt always set the has_init_breadcrumb flag, here
> + * need to do the emit_init_breadcrumb for all the requests.
> + */
> + if (req->engine->emit_init_breadcrumb) {
> + err = req->engine->emit_init_breadcrumb(req);
> + if (err) {
> + gvt_vgpu_err("fail to emit init breadcrumb\n");
> + return err;
> + }
> + }
> +
> /* allocate shadow ring buffer */
> cs = intel_ring_begin(workload->req, workload->rb_len / sizeof(u32));
> if (IS_ERR(cs)) {
> --
> 2.17.1
>
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev
--
Open Source Technology Center, Intel ltd.
$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20190513/d5dd2caf/attachment.sig>
More information about the intel-gvt-dev
mailing list