drm/i915: Make contexts non-snooped on non-LLC platforms
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 4 Apr 2014 13:36:10 +0000 (16:36 +0300)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 9 Apr 2014 12:37:10 +0000 (14:37 +0200)
We don't do CPU access to GPU contexts so making the GPU access snoop
the CPU caches seems silly, and potentially expensive.

v2: Use !IS_VALLEYVIEW instead of HAS_LLC as this is really
    about what the PTEs can represent.
    Add a comment clarifying the situation.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem_context.c

index 8827892..30b355a 100644 (file)
@@ -240,7 +240,15 @@ __create_hw_context(struct drm_device *dev,
                return ERR_PTR(-ENOMEM);
        }
 
-       if (INTEL_INFO(dev)->gen >= 7) {
+       /*
+        * Try to make the context utilize L3 as well as LLC.
+        *
+        * On VLV we don't have L3 controls in the PTEs so we
+        * shouldn't touch the cache level, especially as that
+        * would make the object snooped which might have a
+        * negative performance impact.
+        */
+       if (INTEL_INFO(dev)->gen >= 7 && !IS_VALLEYVIEW(dev)) {
                ret = i915_gem_object_set_cache_level(ctx->obj,
                                                      I915_CACHE_L3_LLC);
                /* Failure shouldn't ever happen this early */