[PATCH v2 2/4] drm/i915/gvt: Select appropriate mmio list at initialization time

Du, Changbin changbin.du at intel.com
Tue Dec 5 08:31:23 UTC 2017


On Tue, Dec 05, 2017 at 11:55:31AM +0800, Zhenyu Wang wrote:
> On 2017.12.05 11:49:34 +0800, Du, Changbin wrote:
> > On Tue, Dec 05, 2017 at 11:46:22AM +0800, Zhenyu Wang wrote:
> >  >  static u32 gen9_render_mocs[I915_NUM_ENGINES][64];
> > > > @@ -282,21 +276,14 @@ static void switch_mmio_to_vgpu(struct intel_vgpu *vgpu, int ring_id)
> > > >  	u32 inhibit_mask =
> > > >  		_MASKED_BIT_ENABLE(CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT);
> > > >  	i915_reg_t last_reg = _MMIO(0);
> > > > -	struct render_mmio *mmio;
> > > > +	struct engine_mmio *mmio;
> > > >  	u32 v;
> > > > -	int i, array_size;
> > > >  
> > > > -	if (IS_SKYLAKE(vgpu->gvt->dev_priv)
> > > > -		|| IS_KABYLAKE(vgpu->gvt->dev_priv)) {
> > > > -		mmio = gen9_render_mmio_list;
> > > > -		array_size = ARRAY_SIZE(gen9_render_mmio_list);
> > > > +	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
> > > >  		load_mocs(vgpu, ring_id);
> > > > -	} else {
> > > > -		mmio = gen8_render_mmio_list;
> > > > -		array_size = ARRAY_SIZE(gen8_render_mmio_list);
> > > > -	}
> > > >  
> > > > -	for (i = 0; i < array_size; i++, mmio++) {
> > > > +	mmio = vgpu->gvt->engine_mmio_list;
> > > > +	while (i915_mmio_reg_offset((mmio++)->reg)) {
> > > >  		if (mmio->ring_id != ring_id)
> > > >  			continue;
> > > 
> > > Not safe to check end of the list and this will try to exceed the list?
> > > Seems wrong to me. Either use size of the list or mark array 0 end then
> > > check mmio pointer.
> > >
> > It will not exceed the list. The last mmio item is termination mark.
> >  
> 
> oh, wrong reading, was reading that's a comment line instead of real
> termination mark..better write explicitly as 0 item. thanks
>
zhenyu, the inside comment is to highlight the special purpose. Since default
value is 0, repeating that is a little werdy.

-- 
Thanks,
Changbin Du


More information about the intel-gvt-dev mailing list