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

Zhang, Xiong Y xiong.y.zhang at intel.com
Mon Jan 29 02:05:37 UTC 2018


> 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>
> ---
>  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);
[Zhang, Xiong Y] for odd *ppos is always 1 byte, which is different from the original without your patch.
> +		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


More information about the intel-gvt-dev mailing list