[PATCH] drm/i915/kvmgt: Simplify function intel_vgpu_read/write

Du, Changbin changbin.du at intel.com
Tue Jan 30 04:08:49 UTC 2018


On Tue, Jan 30, 2018 at 11:13:00AM +0800, Zhenyu Wang wrote:
> On 2018.01.26 14:59:01 +0800, changbin.du at intel.com wrote:
> > From: Changbin Du <changbin.du at intel.com>
> > 
> > The code needn't so complex, simplify it.
> > 
> > Signed-off-by: Changbin Du <changbin.du at intel.com>
> > ---
> 
> Could we fix up 8b access for gtt mmio as proposed by Tina?
> Not sure if she's still working on that? As that might also
> require to refactor intel_vgpu_read/write function, so maybe
> can clean them up together.
> 
I remember that still has unresolved comments? I think cfg space and mmio
handler needs corresponding change.

Anyway, I think this patch is a refine not a fix, so leave them alone?

> Previous discuss was like https://lists.freedesktop.org/archives/intel-gvt-dev/2017-August/001578.html,
> https://lists.freedesktop.org/archives/intel-gvt-dev/2017-December/002650.html
> 
> >  drivers/gpu/drm/i915/gvt/kvmgt.c | 106 +++++++++------------------------------
> >  1 file changed, 24 insertions(+), 82 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c
> > index 3c68727..8a4ad26 100644
> > --- a/drivers/gpu/drm/i915/gvt/kvmgt.c
> > +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
> > @@ -740,50 +740,21 @@ static ssize_t intel_vgpu_read(struct mdev_device *mdev, char __user *buf,
> >  	int ret;
> >  
> >  	while (count) {
> > -		size_t filled;
> > +		size_t rsz = *ppos % 2 ? 1 : (*ppos % 4 ? 2 : 4);
> > +		u32 val;
> >  
> > -		if (count >= 4 && !(*ppos % 4)) {
> > -			u32 val;
> > +		rsz = min(count, rsz);
> > +		ret = intel_vgpu_rw(mdev, (char *)&val, rsz, ppos, false);
> > +		if (ret <= 0)
> > +			goto read_err;
> >  
> > -			ret = intel_vgpu_rw(mdev, (char *)&val, sizeof(val),
> > -					ppos, false);
> > -			if (ret <= 0)
> > -				goto read_err;
> > +		if (copy_to_user(buf, &val, rsz))
> > +			goto read_err;
> >  
> > -			if (copy_to_user(buf, &val, sizeof(val)))
> > -				goto read_err;
> > -
> > -			filled = 4;
> > -		} else if (count >= 2 && !(*ppos % 2)) {
> > -			u16 val;
> > -
> > -			ret = intel_vgpu_rw(mdev, (char *)&val, sizeof(val),
> > -					ppos, false);
> > -			if (ret <= 0)
> > -				goto read_err;
> > -
> > -			if (copy_to_user(buf, &val, sizeof(val)))
> > -				goto read_err;
> > -
> > -			filled = 2;
> > -		} else {
> > -			u8 val;
> > -
> > -			ret = intel_vgpu_rw(mdev, &val, sizeof(val), ppos,
> > -					false);
> > -			if (ret <= 0)
> > -				goto read_err;
> > -
> > -			if (copy_to_user(buf, &val, sizeof(val)))
> > -				goto read_err;
> > -
> > -			filled = 1;
> > -		}
> > -
> > -		count -= filled;
> > -		done += filled;
> > -		*ppos += filled;
> > -		buf += filled;
> > +		count -= rsz;
> > +		done += rsz;
> > +		*ppos += rsz;
> > +		buf += rsz;
> >  	}
> >  
> >  	return done;
> > @@ -800,50 +771,21 @@ static ssize_t intel_vgpu_write(struct mdev_device *mdev,
> >  	int ret;
> >  
> >  	while (count) {
> > -		size_t filled;
> > +		size_t wsz = *ppos % 2 ? 1 : (*ppos % 4 ? 2 : 4);
> > +		u32 val;
> >  
> > -		if (count >= 4 && !(*ppos % 4)) {
> > -			u32 val;
> > +		wsz = min(count, wsz);
> > +		if (copy_from_user(&val, buf, wsz))
> > +			goto write_err;
> >  
> > -			if (copy_from_user(&val, buf, sizeof(val)))
> > -				goto write_err;
> > -
> > -			ret = intel_vgpu_rw(mdev, (char *)&val, sizeof(val),
> > -					ppos, true);
> > -			if (ret <= 0)
> > -				goto write_err;
> > -
> > -			filled = 4;
> > -		} else if (count >= 2 && !(*ppos % 2)) {
> > -			u16 val;
> > -
> > -			if (copy_from_user(&val, buf, sizeof(val)))
> > -				goto write_err;
> > -
> > -			ret = intel_vgpu_rw(mdev, (char *)&val,
> > -					sizeof(val), ppos, true);
> > -			if (ret <= 0)
> > -				goto write_err;
> > -
> > -			filled = 2;
> > -		} else {
> > -			u8 val;
> > -
> > -			if (copy_from_user(&val, buf, sizeof(val)))
> > -				goto write_err;
> > -
> > -			ret = intel_vgpu_rw(mdev, &val, sizeof(val),
> > -					ppos, true);
> > -			if (ret <= 0)
> > -				goto write_err;
> > -
> > -			filled = 1;
> > -		}
> > +		ret = intel_vgpu_rw(mdev, (char *)&val, wsz, ppos, true);
> > +		if (ret <= 0)
> > +			goto write_err;
> >  
> > -		count -= filled;
> > -		done += filled;
> > -		*ppos += filled;
> > -		buf += filled;
> > +		count -= wsz;
> > +		done += wsz;
> > +		*ppos += wsz;
> > +		buf += wsz;
> >  	}
> >  
> >  	return done;
> > -- 
> > 2.7.4
> > 
> > _______________________________________________
> > 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



-- 
Thanks,
Changbin Du


More information about the intel-gvt-dev mailing list