-
-
Save tiagovignatti/3c79ba7457e0360395ec to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c | |
index e1790af..5526fd5 100644 | |
--- a/drivers/gpu/drm/drm_stub.c | |
+++ b/drivers/gpu/drm/drm_stub.c | |
@@ -39,6 +39,7 @@ | |
#include <drm/drmP.h> | |
#include <drm/drm_core.h> | |
+//unsigned int drm_debug = 15; /* 1 to enable debug output */ | |
unsigned int drm_debug = 0; /* 1 to enable debug output */ | |
EXPORT_SYMBOL(drm_debug); | |
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c | |
index 5d0f65d..15058ac 100644 | |
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c | |
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c | |
@@ -195,11 +195,32 @@ static void i915_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_n | |
} | |
+/** Flushes the CPU write domain for the object if it's dirty. */ | |
+static void | |
+gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj, | |
+ bool force) | |
+{ | |
+ uint32_t old_write_domain; | |
+ | |
+ if (obj->base.write_domain != I915_GEM_DOMAIN_CPU) | |
+ return; | |
+ | |
+ if (i915_gem_clflush_object(obj, force)) | |
+ i915_gem_chipset_flush(obj->base.dev); | |
+ | |
+ old_write_domain = obj->base.write_domain; | |
+ obj->base.write_domain = 0; | |
+ | |
+ trace_i915_gem_object_change_domain(obj, | |
+ obj->base.read_domains, | |
+ old_write_domain); | |
+} | |
+ | |
static int i915_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma) | |
{ | |
struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf); | |
struct drm_device *dev = obj->base.dev; | |
- | |
+#if 0 | |
if (obj->base.size < vma->vm_end - vma->vm_start) | |
return -EINVAL; | |
@@ -212,6 +233,43 @@ static int i915_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct * | |
vma->vm_ops->open(vma); | |
return 0; | |
+#else | |
+ int ret; | |
+ | |
+ if (INTEL_INFO(dev)->gen < 6) | |
+ return -EINVAL; | |
+ | |
+ if (!obj->base.filp) | |
+ return -EINVAL; | |
+ | |
+ /* TODO: change this snip with i915_gem_begin_cpu_access */ | |
+ ret = i915_mutex_lock_interruptible(dev); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ ret = i915_gem_object_set_to_cpu_domain(obj, true); | |
+ mutex_unlock(&dev->struct_mutex); | |
+ | |
+ | |
+ ret = obj->base.filp->f_op->mmap(obj->base.filp, vma); | |
+ fput(vma->vm_file); | |
+ vma->vm_file = get_file(obj->base.filp); | |
+ | |
+ /* TODO: double check whether the following is needed */ | |
+ ret = i915_mutex_lock_interruptible(dev); | |
+ if (ret) | |
+ return ret; | |
+ | |
+ /* Pinned buffers may be scanout, so flush the cache */ | |
+// if (obj->pin_display) | |
+ gem_object_flush_cpu_write_domain(obj, true); | |
+ | |
+// drm_gem_object_unreference(&obj->base); | |
+ mutex_unlock(&dev->struct_mutex); | |
+ | |
+ DRM_DEBUG_DRIVER("MODIFIED returned okay\n"); | |
+ return ret; | |
+#endif | |
} | |
static int i915_gem_begin_cpu_access(struct dma_buf *dma_buf, size_t start, size_t length, enum dma_data_direction direction) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment