[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