[PATCH] drm/i915/gvt: Use fence error from GVT request for workload status
Dong, Chuanxiao
chuanxiao.dong at intel.com
Fri Jun 23 03:26:29 UTC 2017
> -----Original Message-----
> From: Zhenyu Wang [mailto:zhenyuw at linux.intel.com]
> Sent: Friday, June 23, 2017 11:09 AM
> To: Dong, Chuanxiao <chuanxiao.dong at intel.com>
> Cc: intel-gvt-dev at lists.freedesktop.org
> Subject: Re: [PATCH] drm/i915/gvt: Use fence error from GVT request for
> workload status
>
> On 2017.06.21 11:28:47 +0800, Chuanxiao Dong wrote:
> > The req->fence.error will be set if this request caused GPU hang so we
> > can use this value to workload->status to indicate whether this GVT
> > request caused any problem. If it caused GPU hang, we shouldn't
> > trigger any context switch back to the guest.
> >
> > Fixes: 8f1117abb408 (drm/i915/gvt: handle workload lifecycle properly)
> > Signed-off-by: Chuanxiao Dong <chuanxiao.dong at intel.com>
> > ---
> > drivers/gpu/drm/i915/gvt/scheduler.c | 17 ++++++++---------
> > 1 file changed, 8 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c
> > b/drivers/gpu/drm/i915/gvt/scheduler.c
> > index 488fdea..e7a18d8 100644
> > --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> > +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> > @@ -174,15 +174,6 @@ static int shadow_context_status_change(struct
> notifier_block *nb,
> > atomic_set(&workload->shadow_ctx_active, 1);
> > break;
> > case INTEL_CONTEXT_SCHEDULE_OUT:
> > - /* If the status is -EINPROGRESS means this workload
> > - * doesn't meet any issue during dispatching so when
> > - * get the SCHEDULE_OUT set the status to be zero for
> > - * good. If the status is NOT -EINPROGRESS means there
> > - * is something wrong happened during dispatching and
> > - * the status should not be set to zero
> > - */
> > - if (workload->status == -EINPROGRESS)
> > - workload->status = 0;
> > atomic_set(&workload->shadow_ctx_active, 0);
> > break;
> > default:
> > @@ -427,6 +418,14 @@ static void complete_current_workload(struct
> intel_gvt *gvt, int ring_id)
> > wait_event(workload->shadow_ctx_status_wq,
> > !atomic_read(&workload->shadow_ctx_active));
> >
> > + /* If this request caused GPU hang, req->fence.error will
> > + * be set. Use req->fence.error to set workload status so
> > + * that when this request caused GPU hang, didn't trigger
> > + * context switch interrupt to guest
> > + */
> > + if (workload->status == -EINPROGRESS)
> > + workload->status = workload->req->fence.error;
> > +
>
> If gpu hang is not caused by request, still need to cover for guest state right?
> With this need to check if it's really guilty for -EIO.
Right, so here is to check if req->fence.error is -EIO. If it is, workload->status = -EIO, otherwise workload->status = 0?
Thanks
Chuanxiao
More information about the intel-gvt-dev
mailing list