[PATCH] drm/i915/kvmgt: Simplify function intel_vgpu_read/write
changbin.du at intel.com
changbin.du at intel.com
Fri Jan 26 06:59:01 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);
+ 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
More information about the intel-gvt-dev
mailing list