@@ -171,7 +171,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
value = HAS_RESOURCE_STREAMER(dev);
break;
case I915_PARAM_CREATE_VERSION:
- value = 3;
+ value = 4;
break;
default:
DRM_DEBUG("Unknown parameter %d\n", param->param);
@@ -426,6 +426,13 @@ i915_gem_create(struct drm_file *file,
return ret;
}
+ if (flags & I915_CREATE_FLUSH) {
+ if (i915_gem_clflush_object(obj, false))
+ i915_gem_chipset_flush(obj->base.dev);
+
+ obj->base.write_domain = 0;
+ }
+
mutex_lock(&dev->struct_mutex);
__i915_gem_object_get_pages__tail_locked(obj);
mutex_unlock(&dev->struct_mutex);
@@ -469,7 +469,8 @@ struct drm_i915_gem_create {
__u32 flags;
#define I915_CREATE_PLACEMENT_STOLEN (1<<0) /* Cannot use CPU mmaps */
#define I915_CREATE_POPULATE (1<<1) /* Pre-populate object pages */
-#define __I915_CREATE_UNKNOWN_FLAGS -(I915_CREATE_POPULATE << 1)
+#define I915_CREATE_FLUSH (1<<2) /* Clflush prepopulated pages */
+#define __I915_CREATE_UNKNOWN_FLAGS -(I915_CREATE_FLUSH << 1)
};
struct drm_i915_gem_pread {