drm/i915: Fix l3 parity user buffer offset
authorBen Widawsky <benjamin.widawsky@intel.com>
Fri, 13 Sep 2013 05:28:29 +0000 (22:28 -0700)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 13 Sep 2013 12:56:15 +0000 (14:56 +0200)
The buf pointer used during l3_write is just char *, therefore it does
not require the silly any addition of offset.

v2: Also fix i915_l3_read with a suggested logic from Ville

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_sysfs.c

index 9070f503d3321df8360579628eb68b1d489967a3..d572435cfbe771fa2773b7e05fe24f35e57e4843 100644 (file)
@@ -127,6 +127,8 @@ i915_l3_read(struct file *filp, struct kobject *kobj,
        if (ret)
                return ret;
 
+       count = min_t(int, GEN7_L3LOG_SIZE-offset, count);
+
        ret = i915_mutex_lock_interruptible(drm_dev);
        if (ret)
                return ret;
@@ -134,14 +136,14 @@ i915_l3_read(struct file *filp, struct kobject *kobj,
        misccpctl = I915_READ(GEN7_MISCCPCTL);
        I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
 
-       for (i = offset; count >= 4 && i < GEN7_L3LOG_SIZE; i += 4, count -= 4)
-               *((uint32_t *)(&buf[i])) = I915_READ(GEN7_L3LOG_BASE + i);
+       for (i = 0; i < count; i += 4)
+               *((uint32_t *)(&buf[i])) = I915_READ(GEN7_L3LOG_BASE + offset + i);
 
        I915_WRITE(GEN7_MISCCPCTL, misccpctl);
 
        mutex_unlock(&drm_dev->struct_mutex);
 
-       return i - offset;
+       return i;
 }
 
 static ssize_t
@@ -186,9 +188,7 @@ i915_l3_write(struct file *filp, struct kobject *kobj,
        if (temp)
                dev_priv->l3_parity.remap_info = temp;
 
-       memcpy(dev_priv->l3_parity.remap_info + (offset/4),
-              buf + (offset/4),
-              count);
+       memcpy(dev_priv->l3_parity.remap_info + (offset/4), buf, count);
 
        i915_gem_l3_remap(drm_dev);