[PATCH] drm/i915/gvt: force to set all context control bits from guest
Zhenyu Wang
zhenyuw at linux.intel.com
Mon Mar 19 09:31:35 UTC 2018
On 2018.03.19 09:30:23 +0000, Zhang, Xiong Y wrote:
> > Our shadow context content is from guest but with masked control reg like
> > CTX_CONTEXT_CONTROL, we need to make sure all settings from guest
> > would be set when this context is on hw, this trys to force mask enable bits
> > for all to ensure every bits setting would be effective on hw.
> >
> > One regression found related to once inhibit bit is set, gpu engine are
> > working on inhibit state until MI_LOAD_REG_IMM command or context
> > image clear inhibit bit with mask bit set to 1, and val bit set to 0. In gvt-g
> > currently workload has the highest priority, so gvt-g workload could trigger
> > preempt context easily, preempt context set inhibit bit, then gvt-g workload
> > is scheduled in, but gvt-g workload shadow context image usually doesn't set
> > inhibit mask bit, so gpu is still in inhibit state when gvt workload is running.
> > This caused gpu hang.
> >
> > Suggested-by: Zhang, Xiong <xiong.y.zhang at intel.com>
> > Signed-off-by: Zhenyu Wang <zhenyuw at linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/gvt/scheduler.c | 9 ++++++++-
> > 1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c
> > b/drivers/gpu/drm/i915/gvt/scheduler.c
> > index 87baeb69aaa5..638abe84857c 100644
> > --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> > +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> > @@ -173,8 +173,14 @@ static int populate_shadow_context(struct
> > intel_vgpu_workload *workload) #define COPY_REG(name) \
> > intel_gvt_hypervisor_read_gpa(vgpu, workload->ring_context_gpa \
> > + RING_CTX_OFF(name.val), &shadow_ring_context->name.val, 4)
> > +#define COPY_REG_MASKED(name) {\
> > + intel_gvt_hypervisor_read_gpa(vgpu, workload->ring_context_gpa
> > \
> > + + RING_CTX_OFF(name.val),\
> > + &shadow_ring_context->name.val, 4);\
> > + shadow_ring_context->name.val |= 0xffff << 16;\
> > + }
> >
> > - COPY_REG(ctx_ctrl);
> > + COPY_REG_MASKED(ctx_ctrl);
> > COPY_REG(ctx_timestamp);
> >
> > if (ring_id == RCS) {
> > @@ -183,6 +189,7 @@ static int populate_shadow_context(struct
> > intel_vgpu_workload *workload)
> > COPY_REG(rcs_indirect_ctx_offset);
> > }
> > #undef COPY_REG
> > +#undef COPY_REG_MASKED
> >
> > intel_gvt_hypervisor_read_gpa(vgpu,
> > workload->ring_context_gpa +
> > --
> [Zhang, Xiong Y] Reviewed-by: Zhang, Xiong <xiong.y.zhang at intel.com>
Applied, thanks for review!
--
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/20180319/d58b2ef4/attachment.sig>
More information about the intel-gvt-dev
mailing list