From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Intel-gfx@lists.freedesktop.org
Subject: [PATCH v2 4/5] drm/i915: Add support for write-combined CPU mapping to DRM_IOCTL_I915_GEM_MMAP_GTT
Date: Wed, 27 Jan 2016 15:22:11 +0000 [thread overview]
Message-ID: <1453908131-12938-1-git-send-email-tvrtko.ursulin@linux.intel.com> (raw)
In-Reply-To: <1453820013-3908-5-git-send-email-tvrtko.ursulin@linux.intel.com>
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Old DRM_IOCTL_I915_GEM_MMAP supported write-combine mapping so
add support for it here as well.
v2: Commit msg.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 34 +++++++++++++++++++++++++++-------
include/uapi/drm/i915_drm.h | 3 ++-
2 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index a690cee31f20..642c75a5530e 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1954,8 +1954,8 @@ out:
return i915_gem_ret_to_vm_ret(dev_priv, ret);
}
-static int
-i915_gem_cpu_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+static inline int
+__i915_gem_cpu_fault(struct vm_area_struct *vma, struct vm_fault *vmf, bool wc)
{
struct drm_i915_gem_object *obj = to_intel_bo(vma->vm_private_data);
struct drm_device *dev = obj->base.dev;
@@ -1992,7 +1992,7 @@ i915_gem_cpu_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
ret = vm_insert_pfn(vma, (unsigned long)vmf->virtual_address,
page_to_pfn(page));
- if (ret == 0) {
+ if (ret == 0 && !wc) {
/* DRM core sets up WC by default and we want WB. */
pgprot = pgprot_val(vm_get_page_prot(vma->vm_flags));
pgprot &= ~_PAGE_CACHE_MASK;
@@ -2010,6 +2010,18 @@ out:
return i915_gem_ret_to_vm_ret(dev_priv, ret);
}
+static int
+i915_gem_cpu_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+{
+ return __i915_gem_cpu_fault(vma, vmf, false);
+}
+
+static int
+i915_gem_cpu_wc_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+{
+ return __i915_gem_cpu_fault(vma, vmf, true);
+}
+
/**
* i915_gem_release_mmap - remove physical page mappings
* @obj: obj in question
@@ -2140,6 +2152,12 @@ static const struct vm_operations_struct i915_gem_cpu_vm_ops = {
.close = drm_gem_vm_close,
};
+static const struct vm_operations_struct i915_gem_cpu_wc_vm_ops = {
+ .fault = i915_gem_cpu_wc_fault,
+ .open = drm_gem_vm_open,
+ .close = drm_gem_vm_close,
+};
+
static int
i915_gem_mmap(struct drm_file *file,
struct drm_device *dev,
@@ -2176,12 +2194,14 @@ i915_gem_mmap(struct drm_file *file,
if (ret)
goto out;
- if (flags & I915_MMAP2_CPU) {
+ if (flags & I915_MMAP2_CPU_WC)
+ ret = drm_vma_node_set_vm_ops(&obj->base.vma_node,
+ &i915_gem_cpu_wc_vm_ops);
+ else if (flags & I915_MMAP2_CPU)
ret = drm_vma_node_set_vm_ops(&obj->base.vma_node,
&i915_gem_cpu_vm_ops);
- if (ret)
- goto out;
- }
+ if (ret)
+ goto out;
*offset = drm_vma_node_offset_addr(&obj->base.vma_node);
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index 359a36d604bb..05e74c7aef4f 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -529,7 +529,8 @@ struct drm_i915_gem_mmap_gtt {
*/
__u64 offset;
-#define I915_MMAP2_CPU 0x1
+#define I915_MMAP2_CPU 0x1
+#define I915_MMAP2_CPU_WC 0x3
__u64 flags;
};
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-01-27 15:22 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-26 14:53 [RFC 0/5] Adding CPU mmap support to DRM_IOCTL_I915_GEM_MMAP_GTT Tvrtko Ursulin
2016-01-26 14:53 ` [RFC 1/5] drm: Allow drivers setting vm_ops per vma offset node Tvrtko Ursulin
2016-01-26 14:53 ` [RFC 2/5] drm/i915: Extract code mapping errno to vm fault code Tvrtko Ursulin
2016-01-26 15:18 ` Chris Wilson
2016-01-26 16:24 ` Tvrtko Ursulin
2016-01-26 16:42 ` Chris Wilson
2016-01-26 14:53 ` [RFC 3/5] drm/i915: Add support for CPU mapping to DRM_IOCTL_I915_GEM_MMAP_GTT Tvrtko Ursulin
2016-01-26 15:10 ` Chris Wilson
2016-01-26 16:23 ` Tvrtko Ursulin
2016-01-26 16:59 ` Chris Wilson
2016-01-27 15:24 ` Tvrtko Ursulin
2016-01-27 16:36 ` Chris Wilson
2016-01-27 16:40 ` Chris Wilson
2016-01-27 15:21 ` [PATCH v2 " Tvrtko Ursulin
2016-01-27 15:51 ` Daniel Vetter
2016-01-27 16:01 ` Tvrtko Ursulin
2016-01-27 16:10 ` Daniel Vetter
2016-01-27 16:32 ` Chris Wilson
2016-01-26 14:53 ` [RFC 4/5] drm/i915: Add support for write-combined " Tvrtko Ursulin
2016-01-26 15:11 ` Chris Wilson
2016-01-27 15:22 ` Tvrtko Ursulin [this message]
2016-01-26 14:53 ` [RFC 5/5] drm/i915: Announce the new DRM_IOCTL_I915_GEM_MMAP_GTT capabilities Tvrtko Ursulin
2016-01-28 9:18 ` ✓ Fi.CI.BAT: success for Adding CPU mmap support to DRM_IOCTL_I915_GEM_MMAP_GTT (rev3) Patchwork
2016-01-28 16:10 ` Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1453908131-12938-1-git-send-email-tvrtko.ursulin@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=Intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox