[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