aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h4
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c3
-rw-r--r--drivers/gpu/drm/i915/i915_gem_userptr.c3
3 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f0f75d7c0d94..e7cd311e9fbb 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1988,6 +1988,9 @@ enum hdmi_force_audio {
1988#define I915_GTT_OFFSET_NONE ((u32)-1) 1988#define I915_GTT_OFFSET_NONE ((u32)-1)
1989 1989
1990struct drm_i915_gem_object_ops { 1990struct drm_i915_gem_object_ops {
1991 unsigned int flags;
1992#define I915_GEM_OBJECT_HAS_STRUCT_PAGE 0x1
1993
1991 /* Interface between the GEM object and its backing storage. 1994 /* Interface between the GEM object and its backing storage.
1992 * get_pages() is called once prior to the use of the associated set 1995 * get_pages() is called once prior to the use of the associated set
1993 * of pages before to binding them into the GTT, and put_pages() is 1996 * of pages before to binding them into the GTT, and put_pages() is
@@ -2003,6 +2006,7 @@ struct drm_i915_gem_object_ops {
2003 */ 2006 */
2004 int (*get_pages)(struct drm_i915_gem_object *); 2007 int (*get_pages)(struct drm_i915_gem_object *);
2005 void (*put_pages)(struct drm_i915_gem_object *); 2008 void (*put_pages)(struct drm_i915_gem_object *);
2009
2006 int (*dmabuf_export)(struct drm_i915_gem_object *); 2010 int (*dmabuf_export)(struct drm_i915_gem_object *);
2007 void (*release)(struct drm_i915_gem_object *); 2011 void (*release)(struct drm_i915_gem_object *);
2008}; 2012};
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ddc21d4b388d..bb44bad15403 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4425,6 +4425,7 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj,
4425} 4425}
4426 4426
4427static const struct drm_i915_gem_object_ops i915_gem_object_ops = { 4427static const struct drm_i915_gem_object_ops i915_gem_object_ops = {
4428 .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE,
4428 .get_pages = i915_gem_object_get_pages_gtt, 4429 .get_pages = i915_gem_object_get_pages_gtt,
4429 .put_pages = i915_gem_object_put_pages_gtt, 4430 .put_pages = i915_gem_object_put_pages_gtt,
4430}; 4431};
@@ -5261,7 +5262,7 @@ i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj, int n)
5261 struct page *page; 5262 struct page *page;
5262 5263
5263 /* Only default objects have per-page dirty tracking */ 5264 /* Only default objects have per-page dirty tracking */
5264 if (WARN_ON(obj->ops != &i915_gem_object_ops)) 5265 if (WARN_ON((obj->ops->flags & I915_GEM_OBJECT_HAS_STRUCT_PAGE) == 0))
5265 return NULL; 5266 return NULL;
5266 5267
5267 page = i915_gem_object_get_page(obj, n); 5268 page = i915_gem_object_get_page(obj, n);
diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c
index 19fb0bddc1cd..59e45b3a6937 100644
--- a/drivers/gpu/drm/i915/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
@@ -789,9 +789,10 @@ i915_gem_userptr_dmabuf_export(struct drm_i915_gem_object *obj)
789} 789}
790 790
791static const struct drm_i915_gem_object_ops i915_gem_userptr_ops = { 791static const struct drm_i915_gem_object_ops i915_gem_userptr_ops = {
792 .dmabuf_export = i915_gem_userptr_dmabuf_export, 792 .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE,
793 .get_pages = i915_gem_userptr_get_pages, 793 .get_pages = i915_gem_userptr_get_pages,
794 .put_pages = i915_gem_userptr_put_pages, 794 .put_pages = i915_gem_userptr_put_pages,
795 .dmabuf_export = i915_gem_userptr_dmabuf_export,
795 .release = i915_gem_userptr_release, 796 .release = i915_gem_userptr_release,
796}; 797};
797 798