[PATCH] drm/i915/kvmgt: Simplify function intel_vgpu_read/write
Du, Changbin
changbin.du at intel.com
Mon Jan 29 05:11:30 UTC 2018
On Sun, Jan 28, 2018 at 06:05:37PM -0800, Zhang, Xiong Y 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>
> > ---
> > 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.
Can you give a example?
> > + 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
--
Thanks,
Changbin Du
More information about the intel-gvt-dev
mailing list