All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] drm/i915: Compare GGTT view structs instead of types
@ 2015-03-23 12:51 Joonas Lahtinen
  2015-03-23 13:39 ` Tvrtko Ursulin
  2015-03-24 18:18 ` [PATCH v2] " shuang.he
  0 siblings, 2 replies; 12+ messages in thread
From: Joonas Lahtinen @ 2015-03-23 12:51 UTC (permalink / raw)
  To: intel-gfx

Preparatory code to decrease amount of conflicts between rotated and
partial views code.

To allow for views where the view type is not defined by the view type only,
like it is in stereo or rotated 90 degree view, change the semantic to require
the whole view structure for comparison. This allows including parameters like
offset to be included in the view which is useful for eg. partial views.

Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h     |  8 ++++----
 drivers/gpu/drm/i915/i915_gem.c     | 26 ++++++++++++++------------
 drivers/gpu/drm/i915/i915_gem_gtt.c |  2 +-
 drivers/gpu/drm/i915/i915_gem_gtt.h |  7 +++++++
 4 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index eb38cd1..712f55e 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2791,19 +2791,19 @@ void i915_gem_restore_fences(struct drm_device *dev);
 
 unsigned long
 i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
-			      enum i915_ggtt_view_type view);
+			      const struct i915_ggtt_view *view);
 unsigned long
 i915_gem_obj_offset(struct drm_i915_gem_object *o,
 		    struct i915_address_space *vm);
 static inline unsigned long
 i915_gem_obj_ggtt_offset(struct drm_i915_gem_object *o)
 {
-	return i915_gem_obj_ggtt_offset_view(o, I915_GGTT_VIEW_NORMAL);
+	return i915_gem_obj_ggtt_offset_view(o, &i915_ggtt_view_normal);
 }
 
 bool i915_gem_obj_bound_any(struct drm_i915_gem_object *o);
 bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
-				  enum i915_ggtt_view_type view);
+				  const struct i915_ggtt_view *view);
 bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
 			struct i915_address_space *vm);
 
@@ -2851,7 +2851,7 @@ i915_vm_to_ppgtt(struct i915_address_space *vm)
 
 static inline bool i915_gem_obj_ggtt_bound(struct drm_i915_gem_object *obj)
 {
-	return i915_gem_obj_ggtt_bound_view(obj, I915_GGTT_VIEW_NORMAL);
+	return i915_gem_obj_ggtt_bound_view(obj, &i915_ggtt_view_normal);
 }
 
 static inline unsigned long
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 84e2a23..34aa7c0 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2978,7 +2978,7 @@ int i915_vma_unbind(struct i915_vma *vma)
 	 */
 
 	if (i915_is_ggtt(vma->vm) &&
-	    vma->ggtt_view.type == I915_GGTT_VIEW_NORMAL) {
+	    i915_ggtt_view_equal(&vma->ggtt_view, &i915_ggtt_view_normal)) {
 		i915_gem_object_finish_gtt(obj);
 
 		/* release the fence reg _after_ flushing */
@@ -4122,7 +4122,7 @@ i915_gem_object_do_pin(struct drm_i915_gem_object *obj,
 
 		if (i915_vma_misplaced(vma, alignment, flags)) {
 			unsigned long offset;
-			offset = ggtt_view ? i915_gem_obj_ggtt_offset_view(obj, ggtt_view->type) :
+			offset = ggtt_view ? i915_gem_obj_ggtt_offset_view(obj, ggtt_view) :
 					     i915_gem_obj_offset(obj, vm);
 			WARN(vma->pin_count,
 			     "bo is already pinned in %s with incorrect alignment:"
@@ -4524,7 +4524,7 @@ struct i915_vma *i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
 	struct i915_vma *vma;
 	list_for_each_entry(vma, &obj->vma_list, vma_link) {
 		if (i915_is_ggtt(vma->vm) &&
-		    vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
+		    !i915_ggtt_view_equal(&vma->ggtt_view, &i915_ggtt_view_normal))
 			continue;
 		if (vma->vm == vm)
 			return vma;
@@ -4542,7 +4542,8 @@ struct i915_vma *i915_gem_obj_to_ggtt_view(struct drm_i915_gem_object *obj,
 		return ERR_PTR(-EINVAL);
 
 	list_for_each_entry(vma, &obj->vma_list, vma_link)
-		if (vma->vm == ggtt && vma->ggtt_view.type == view->type)
+		if (vma->vm == ggtt &&
+		    i915_ggtt_view_equal(&vma->ggtt_view, view))
 			return vma;
 	return NULL;
 }
@@ -5086,7 +5087,7 @@ i915_gem_obj_offset(struct drm_i915_gem_object *o,
 
 	list_for_each_entry(vma, &o->vma_list, vma_link) {
 		if (i915_is_ggtt(vma->vm) &&
-		    vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
+		    !i915_ggtt_view_equal(&vma->ggtt_view, &i915_ggtt_view_normal))
 			continue;
 		if (vma->vm == vm)
 			return vma->node.start;
@@ -5099,13 +5100,14 @@ i915_gem_obj_offset(struct drm_i915_gem_object *o,
 
 unsigned long
 i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
-			      enum i915_ggtt_view_type view)
+			      const struct i915_ggtt_view *view)
 {
 	struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
 	struct i915_vma *vma;
 
 	list_for_each_entry(vma, &o->vma_list, vma_link)
-		if (vma->vm == ggtt && vma->ggtt_view.type == view)
+		if (vma->vm == ggtt &&
+		    i915_ggtt_view_equal(&vma->ggtt_view, view))
 			return vma->node.start;
 
 	WARN(1, "global vma for this object not found.\n");
@@ -5119,7 +5121,7 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
 
 	list_for_each_entry(vma, &o->vma_list, vma_link) {
 		if (i915_is_ggtt(vma->vm) &&
-		    vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
+		    !i915_ggtt_view_equal(&vma->ggtt_view, &i915_ggtt_view_normal))
 			continue;
 		if (vma->vm == vm && drm_mm_node_allocated(&vma->node))
 			return true;
@@ -5129,14 +5131,14 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
 }
 
 bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
-				  enum i915_ggtt_view_type view)
+				  const struct i915_ggtt_view *view)
 {
 	struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
 	struct i915_vma *vma;
 
 	list_for_each_entry(vma, &o->vma_list, vma_link)
 		if (vma->vm == ggtt &&
-		    vma->ggtt_view.type == view &&
+		    i915_ggtt_view_equal(&vma->ggtt_view, view) &&
 		    drm_mm_node_allocated(&vma->node))
 			return true;
 
@@ -5166,7 +5168,7 @@ unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o,
 
 	list_for_each_entry(vma, &o->vma_list, vma_link) {
 		if (i915_is_ggtt(vma->vm) &&
-		    vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
+		    !i915_ggtt_view_equal(&vma->ggtt_view, &i915_ggtt_view_normal))
 			continue;
 		if (vma->vm == vm)
 			return vma->node.size;
@@ -5179,7 +5181,7 @@ bool i915_gem_obj_is_pinned(struct drm_i915_gem_object *obj)
 	struct i915_vma *vma;
 	list_for_each_entry(vma, &obj->vma_list, vma_link) {
 		if (i915_is_ggtt(vma->vm) &&
-		    vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
+		    !i915_ggtt_view_equal(&vma->ggtt_view, &i915_ggtt_view_normal))
 			continue;
 		if (vma->pin_count > 0)
 			return true;
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 645c363..ff0ef1c 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -2507,7 +2507,7 @@ int i915_get_ggtt_vma_pages(struct i915_vma *vma)
 	if (vma->ggtt_view.pages)
 		return 0;
 
-	if (vma->ggtt_view.type == I915_GGTT_VIEW_NORMAL)
+	if (i915_ggtt_view_equal(&vma->ggtt_view, &i915_ggtt_view_normal))
 		vma->ggtt_view.pages = vma->obj->pages;
 	else
 		WARN_ONCE(1, "GGTT view %u not implemented!\n",
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 75e29f7..1db82d3 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -382,6 +382,13 @@ static inline uint32_t gen6_pde_index(uint32_t addr)
 	return i915_pde_index(addr, GEN6_PDE_SHIFT);
 }
 
+static inline bool
+i915_ggtt_view_equal(const struct i915_ggtt_view *a,
+		     const struct i915_ggtt_view *b)
+{
+	return a->type == b->type;
+}
+
 int i915_gem_gtt_init(struct drm_device *dev);
 void i915_gem_init_global_gtt(struct drm_device *dev);
 void i915_global_gtt_cleanup(struct drm_device *dev);
-- 
1.9.3



_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] drm/i915: Compare GGTT view structs instead of types
  2015-03-23 12:51 [PATCH v2] drm/i915: Compare GGTT view structs instead of types Joonas Lahtinen
@ 2015-03-23 13:39 ` Tvrtko Ursulin
  2015-03-24 12:45   ` Joonas Lahtinen
  2015-03-25 10:59   ` Daniel Vetter
  2015-03-24 18:18 ` [PATCH v2] " shuang.he
  1 sibling, 2 replies; 12+ messages in thread
From: Tvrtko Ursulin @ 2015-03-23 13:39 UTC (permalink / raw)
  To: Joonas Lahtinen, intel-gfx


On 03/23/2015 12:51 PM, Joonas Lahtinen wrote:
> Preparatory code to decrease amount of conflicts between rotated and
> partial views code.
>
> To allow for views where the view type is not defined by the view type only,
> like it is in stereo or rotated 90 degree view, change the semantic to require
> the whole view structure for comparison. This allows including parameters like
> offset to be included in the view which is useful for eg. partial views.
>
> Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> ---
>   drivers/gpu/drm/i915/i915_drv.h     |  8 ++++----
>   drivers/gpu/drm/i915/i915_gem.c     | 26 ++++++++++++++------------
>   drivers/gpu/drm/i915/i915_gem_gtt.c |  2 +-
>   drivers/gpu/drm/i915/i915_gem_gtt.h |  7 +++++++
>   4 files changed, 26 insertions(+), 17 deletions(-)

No objections for this version! :)

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] drm/i915: Compare GGTT view structs instead of types
  2015-03-23 13:39 ` Tvrtko Ursulin
@ 2015-03-24 12:45   ` Joonas Lahtinen
  2015-03-25 10:59   ` Daniel Vetter
  1 sibling, 0 replies; 12+ messages in thread
From: Joonas Lahtinen @ 2015-03-24 12:45 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: intel-gfx

The patch could be committed then with the R-B.

On ma, 2015-03-23 at 13:39 +0000, Tvrtko Ursulin wrote:
> On 03/23/2015 12:51 PM, Joonas Lahtinen wrote:
> > Preparatory code to decrease amount of conflicts between rotated and
> > partial views code.
> >
> > To allow for views where the view type is not defined by the view type only,
> > like it is in stereo or rotated 90 degree view, change the semantic to require
> > the whole view structure for comparison. This allows including parameters like
> > offset to be included in the view which is useful for eg. partial views.
> >
> > Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> > ---
> >   drivers/gpu/drm/i915/i915_drv.h     |  8 ++++----
> >   drivers/gpu/drm/i915/i915_gem.c     | 26 ++++++++++++++------------
> >   drivers/gpu/drm/i915/i915_gem_gtt.c |  2 +-
> >   drivers/gpu/drm/i915/i915_gem_gtt.h |  7 +++++++
> >   4 files changed, 26 insertions(+), 17 deletions(-)
> 
> No objections for this version! :)
> 
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> 
> Regards,
> 
> Tvrtko


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] drm/i915: Compare GGTT view structs instead of types
  2015-03-23 12:51 [PATCH v2] drm/i915: Compare GGTT view structs instead of types Joonas Lahtinen
  2015-03-23 13:39 ` Tvrtko Ursulin
@ 2015-03-24 18:18 ` shuang.he
  1 sibling, 0 replies; 12+ messages in thread
From: shuang.he @ 2015-03-24 18:18 UTC (permalink / raw)
  To: shuang.he, ethan.gao, intel-gfx, joonas.lahtinen

Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
Task id: 6029
-------------------------------------Summary-------------------------------------
Platform          Delta          drm-intel-nightly          Series Applied
PNV                 -1              275/275              274/275
ILK                                  303/303              303/303
SNB                                  304/304              304/304
IVB                                  339/339              339/339
BYT                                  287/287              287/287
HSW                                  361/361              361/361
BDW                                  310/310              310/310
-------------------------------------Detailed-------------------------------------
Platform  Test                                drm-intel-nightly          Series Applied
*PNV  igt@gem_userptr_blits@minor-normal-sync      PASS(2)      DMESG_WARN(1)PASS(1)
Note: You need to pay more attention to line start with '*'
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2] drm/i915: Compare GGTT view structs instead of types
  2015-03-23 13:39 ` Tvrtko Ursulin
  2015-03-24 12:45   ` Joonas Lahtinen
@ 2015-03-25 10:59   ` Daniel Vetter
  2015-03-27 10:03     ` [PATCH v3] " Joonas Lahtinen
  1 sibling, 1 reply; 12+ messages in thread
From: Daniel Vetter @ 2015-03-25 10:59 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: intel-gfx

On Mon, Mar 23, 2015 at 01:39:16PM +0000, Tvrtko Ursulin wrote:
> 
> On 03/23/2015 12:51 PM, Joonas Lahtinen wrote:
> >Preparatory code to decrease amount of conflicts between rotated and
> >partial views code.
> >
> >To allow for views where the view type is not defined by the view type only,
> >like it is in stereo or rotated 90 degree view, change the semantic to require
> >the whole view structure for comparison. This allows including parameters like
> >offset to be included in the view which is useful for eg. partial views.
> >
> >Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> >---
> >  drivers/gpu/drm/i915/i915_drv.h     |  8 ++++----
> >  drivers/gpu/drm/i915/i915_gem.c     | 26 ++++++++++++++------------
> >  drivers/gpu/drm/i915/i915_gem_gtt.c |  2 +-
> >  drivers/gpu/drm/i915/i915_gem_gtt.h |  7 +++++++
> >  4 files changed, 26 insertions(+), 17 deletions(-)
> 
> No objections for this version! :)
> 
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Queued for -next, thanks for the patch.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3] drm/i915: Compare GGTT view structs instead of types
  2015-03-25 10:59   ` Daniel Vetter
@ 2015-03-27 10:03     ` Joonas Lahtinen
  2015-03-27 10:41       ` Tvrtko Ursulin
  2015-03-27 13:22       ` [PATCH v3] " shuang.he
  0 siblings, 2 replies; 12+ messages in thread
From: Joonas Lahtinen @ 2015-03-27 10:03 UTC (permalink / raw)
  To: intel-gfx, Tvrtko Ursulin

To allow for views where the view type is not defined by the view type only,
like it is in stereo or rotated 90 degree view, change the semantic to require
the whole view structure for comparison when we match a GGTT view.

This allows including parameters like offset to be included in the view which
is useful for eg. partial views.

v3:
- Rely on ggtt_view type being 0 for non-GGTT vma's, which equals to
  I915_GGTT_VIEW_NORMAL. (Daniel Vetter)
- Do not use potentially slower comparison when we only want to know if
  something is or is not a normal view.
- Rebase on top of rotated view patches. Add rotated view singleton.
- If one view is missing in comparison they're equal only if both are missing.

Cc: Daniel Vetter <daniel@ffwll.ch>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> (v2)
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h      |  8 ++++----
 drivers/gpu/drm/i915/i915_gem.c      | 13 +++++++------
 drivers/gpu/drm/i915/i915_gem_gtt.c  |  3 +++
 drivers/gpu/drm/i915/i915_gem_gtt.h  |  8 ++++++++
 drivers/gpu/drm/i915/intel_display.c |  8 +++-----
 5 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 256369f..5aeba60 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2794,19 +2794,19 @@ void i915_gem_restore_fences(struct drm_device *dev);
 
 unsigned long
 i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
-			      enum i915_ggtt_view_type view);
+			      const struct i915_ggtt_view *view);
 unsigned long
 i915_gem_obj_offset(struct drm_i915_gem_object *o,
 		    struct i915_address_space *vm);
 static inline unsigned long
 i915_gem_obj_ggtt_offset(struct drm_i915_gem_object *o)
 {
-	return i915_gem_obj_ggtt_offset_view(o, I915_GGTT_VIEW_NORMAL);
+	return i915_gem_obj_ggtt_offset_view(o, &i915_ggtt_view_normal);
 }
 
 bool i915_gem_obj_bound_any(struct drm_i915_gem_object *o);
 bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
-				  enum i915_ggtt_view_type view);
+				  const struct i915_ggtt_view *view);
 bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
 			struct i915_address_space *vm);
 
@@ -2854,7 +2854,7 @@ i915_vm_to_ppgtt(struct i915_address_space *vm)
 
 static inline bool i915_gem_obj_ggtt_bound(struct drm_i915_gem_object *obj)
 {
-	return i915_gem_obj_ggtt_bound_view(obj, I915_GGTT_VIEW_NORMAL);
+	return i915_gem_obj_ggtt_bound_view(obj, &i915_ggtt_view_normal);
 }
 
 static inline unsigned long
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 3300963..8c32b1d 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4131,7 +4131,7 @@ i915_gem_object_do_pin(struct drm_i915_gem_object *obj,
 
 		if (i915_vma_misplaced(vma, alignment, flags)) {
 			unsigned long offset;
-			offset = ggtt_view ? i915_gem_obj_ggtt_offset_view(obj, ggtt_view->type) :
+			offset = ggtt_view ? i915_gem_obj_ggtt_offset_view(obj, ggtt_view) :
 					     i915_gem_obj_offset(obj, vm);
 			WARN(vma->pin_count,
 			     "bo is already pinned in %s with incorrect alignment:"
@@ -4230,7 +4230,7 @@ i915_gem_object_ggtt_unpin_view(struct drm_i915_gem_object *obj,
 
 	BUG_ON(!vma);
 	WARN_ON(vma->pin_count == 0);
-	WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view->type));
+	WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view));
 
 	if (--vma->pin_count == 0 && view->type == I915_GGTT_VIEW_NORMAL)
 		obj->pin_mappable = false;
@@ -5109,13 +5109,14 @@ i915_gem_obj_offset(struct drm_i915_gem_object *o,
 
 unsigned long
 i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
-			      enum i915_ggtt_view_type view)
+			      const struct i915_ggtt_view *view)
 {
 	struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
 	struct i915_vma *vma;
 
 	list_for_each_entry(vma, &o->vma_list, vma_link)
-		if (vma->vm == ggtt && vma->ggtt_view.type == view)
+		if (vma->vm == ggtt &&
+		    i915_ggtt_view_equal(&vma->ggtt_view, view))
 			return vma->node.start;
 
 	WARN(1, "global vma for this object not found.\n");
@@ -5139,14 +5140,14 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
 }
 
 bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
-				  enum i915_ggtt_view_type view)
+				  const struct i915_ggtt_view *view)
 {
 	struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
 	struct i915_vma *vma;
 
 	list_for_each_entry(vma, &o->vma_list, vma_link)
 		if (vma->vm == ggtt &&
-		    vma->ggtt_view.type == view &&
+		    i915_ggtt_view_equal(&vma->ggtt_view, view) &&
 		    drm_mm_node_allocated(&vma->node))
 			return true;
 
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 9903bb0..13eb769 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -93,6 +93,9 @@
  */
 
 const struct i915_ggtt_view i915_ggtt_view_normal;
+const struct i915_ggtt_view i915_ggtt_view_rotated = {
+        .type = I915_GGTT_VIEW_ROTATED
+};
 
 static void bdw_setup_private_ppat(struct drm_i915_private *dev_priv);
 static void chv_setup_private_ppat(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 0dad426..c1c426a 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -138,6 +138,7 @@ struct i915_ggtt_view {
 };
 
 extern const struct i915_ggtt_view i915_ggtt_view_normal;
+extern const struct i915_ggtt_view i915_ggtt_view_rotated;
 
 enum i915_cache_level;
 
@@ -422,4 +423,11 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev);
 int __must_check i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj);
 void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj);
 
+static inline bool
+i915_ggtt_view_equal(const struct i915_ggtt_view *a,
+                     const struct i915_ggtt_view *b)
+{
+	return !!a && !!b ? a->type == b->type : !a && !b;
+}
+
 #endif
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index cb50854..d6c2e34 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2293,8 +2293,6 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, struct drm_framebuffer *fb,
 			const struct drm_plane_state *plane_state)
 {
 	struct intel_rotation_info *info = &view->rotation_info;
-	static const struct i915_ggtt_view rotated_view =
-				{ .type = I915_GGTT_VIEW_ROTATED };
 
 	*view = i915_ggtt_view_normal;
 
@@ -2304,7 +2302,7 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, struct drm_framebuffer *fb,
 	if (!intel_rotation_90_or_270(plane_state->rotation))
 		return 0;
 
-	*view = rotated_view;
+	*view = i915_ggtt_view_rotated;
 
 	info->height = fb->height;
 	info->pixel_format = fb->pixel_format;
@@ -2904,10 +2902,10 @@ u32 intel_fb_stride_alignment(struct drm_device *dev, uint64_t fb_modifier,
 unsigned long intel_plane_obj_offset(struct intel_plane *intel_plane,
 				     struct drm_i915_gem_object *obj)
 {
-	enum i915_ggtt_view_type view = I915_GGTT_VIEW_NORMAL;
+	const struct i915_ggtt_view *view = &i915_ggtt_view_normal;
 
 	if (intel_rotation_90_or_270(intel_plane->base.state->rotation))
-		view = I915_GGTT_VIEW_ROTATED;
+		view = &i915_ggtt_view_rotated;
 
 	return i915_gem_obj_ggtt_offset_view(obj, view);
 }
-- 
1.9.3



_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v3] drm/i915: Compare GGTT view structs instead of types
  2015-03-27 10:03     ` [PATCH v3] " Joonas Lahtinen
@ 2015-03-27 10:41       ` Tvrtko Ursulin
  2015-03-27 11:09         ` [PATCH v4] " Joonas Lahtinen
  2015-03-27 13:22       ` [PATCH v3] " shuang.he
  1 sibling, 1 reply; 12+ messages in thread
From: Tvrtko Ursulin @ 2015-03-27 10:41 UTC (permalink / raw)
  To: Joonas Lahtinen, intel-gfx


Hi,

On 03/27/2015 10:03 AM, Joonas Lahtinen wrote:
> To allow for views where the view type is not defined by the view type only,
> like it is in stereo or rotated 90 degree view, change the semantic to require
> the whole view structure for comparison when we match a GGTT view.
>
> This allows including parameters like offset to be included in the view which
> is useful for eg. partial views.
>
> v3:
> - Rely on ggtt_view type being 0 for non-GGTT vma's, which equals to
>    I915_GGTT_VIEW_NORMAL. (Daniel Vetter)
> - Do not use potentially slower comparison when we only want to know if
>    something is or is not a normal view.
> - Rebase on top of rotated view patches. Add rotated view singleton.
> - If one view is missing in comparison they're equal only if both are missing.
>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> (v2)
> Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> ---
>   drivers/gpu/drm/i915/i915_drv.h      |  8 ++++----
>   drivers/gpu/drm/i915/i915_gem.c      | 13 +++++++------
>   drivers/gpu/drm/i915/i915_gem_gtt.c  |  3 +++
>   drivers/gpu/drm/i915/i915_gem_gtt.h  |  8 ++++++++
>   drivers/gpu/drm/i915/intel_display.c |  8 +++-----
>   5 files changed, 25 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 256369f..5aeba60 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2794,19 +2794,19 @@ void i915_gem_restore_fences(struct drm_device *dev);
>
>   unsigned long
>   i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
> -			      enum i915_ggtt_view_type view);
> +			      const struct i915_ggtt_view *view);
>   unsigned long
>   i915_gem_obj_offset(struct drm_i915_gem_object *o,
>   		    struct i915_address_space *vm);
>   static inline unsigned long
>   i915_gem_obj_ggtt_offset(struct drm_i915_gem_object *o)
>   {
> -	return i915_gem_obj_ggtt_offset_view(o, I915_GGTT_VIEW_NORMAL);
> +	return i915_gem_obj_ggtt_offset_view(o, &i915_ggtt_view_normal);
>   }
>
>   bool i915_gem_obj_bound_any(struct drm_i915_gem_object *o);
>   bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
> -				  enum i915_ggtt_view_type view);
> +				  const struct i915_ggtt_view *view);
>   bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
>   			struct i915_address_space *vm);
>
> @@ -2854,7 +2854,7 @@ i915_vm_to_ppgtt(struct i915_address_space *vm)
>
>   static inline bool i915_gem_obj_ggtt_bound(struct drm_i915_gem_object *obj)
>   {
> -	return i915_gem_obj_ggtt_bound_view(obj, I915_GGTT_VIEW_NORMAL);
> +	return i915_gem_obj_ggtt_bound_view(obj, &i915_ggtt_view_normal);
>   }
>
>   static inline unsigned long
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 3300963..8c32b1d 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -4131,7 +4131,7 @@ i915_gem_object_do_pin(struct drm_i915_gem_object *obj,
>
>   		if (i915_vma_misplaced(vma, alignment, flags)) {
>   			unsigned long offset;
> -			offset = ggtt_view ? i915_gem_obj_ggtt_offset_view(obj, ggtt_view->type) :
> +			offset = ggtt_view ? i915_gem_obj_ggtt_offset_view(obj, ggtt_view) :
>   					     i915_gem_obj_offset(obj, vm);
>   			WARN(vma->pin_count,
>   			     "bo is already pinned in %s with incorrect alignment:"
> @@ -4230,7 +4230,7 @@ i915_gem_object_ggtt_unpin_view(struct drm_i915_gem_object *obj,
>
>   	BUG_ON(!vma);
>   	WARN_ON(vma->pin_count == 0);
> -	WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view->type));
> +	WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view));
>
>   	if (--vma->pin_count == 0 && view->type == I915_GGTT_VIEW_NORMAL)
>   		obj->pin_mappable = false;

No comparison helper in i915_gem_obj_to_ggtt_view()?

> @@ -5109,13 +5109,14 @@ i915_gem_obj_offset(struct drm_i915_gem_object *o,
>
>   unsigned long
>   i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
> -			      enum i915_ggtt_view_type view)
> +			      const struct i915_ggtt_view *view)
>   {
>   	struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
>   	struct i915_vma *vma;
>
>   	list_for_each_entry(vma, &o->vma_list, vma_link)
> -		if (vma->vm == ggtt && vma->ggtt_view.type == view)
> +		if (vma->vm == ggtt &&
> +		    i915_ggtt_view_equal(&vma->ggtt_view, view))
>   			return vma->node.start;
>
>   	WARN(1, "global vma for this object not found.\n");
> @@ -5139,14 +5140,14 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
>   }
>
>   bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
> -				  enum i915_ggtt_view_type view)
> +				  const struct i915_ggtt_view *view)
>   {
>   	struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
>   	struct i915_vma *vma;
>
>   	list_for_each_entry(vma, &o->vma_list, vma_link)
>   		if (vma->vm == ggtt &&
> -		    vma->ggtt_view.type == view &&
> +		    i915_ggtt_view_equal(&vma->ggtt_view, view) &&
>   		    drm_mm_node_allocated(&vma->node))
>   			return true;
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 9903bb0..13eb769 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -93,6 +93,9 @@
>    */
>
>   const struct i915_ggtt_view i915_ggtt_view_normal;
> +const struct i915_ggtt_view i915_ggtt_view_rotated = {
> +        .type = I915_GGTT_VIEW_ROTATED
> +};
>
>   static void bdw_setup_private_ppat(struct drm_i915_private *dev_priv);
>   static void chv_setup_private_ppat(struct drm_i915_private *dev_priv);
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
> index 0dad426..c1c426a 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.h
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
> @@ -138,6 +138,7 @@ struct i915_ggtt_view {
>   };
>
>   extern const struct i915_ggtt_view i915_ggtt_view_normal;
> +extern const struct i915_ggtt_view i915_ggtt_view_rotated;
>
>   enum i915_cache_level;
>
> @@ -422,4 +423,11 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev);
>   int __must_check i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj);
>   void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj);
>
> +static inline bool
> +i915_ggtt_view_equal(const struct i915_ggtt_view *a,
> +                     const struct i915_ggtt_view *b)
> +{
> +	return !!a && !!b ? a->type == b->type : !a && !b;
> +}

What's the background behind this both NULL check? Will you ever use it 
like that?

I think the code elsewhere makes sure to always pass valid views to this 
internal helper so I don't get it.

> +
>   #endif
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index cb50854..d6c2e34 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2293,8 +2293,6 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, struct drm_framebuffer *fb,
>   			const struct drm_plane_state *plane_state)
>   {
>   	struct intel_rotation_info *info = &view->rotation_info;
> -	static const struct i915_ggtt_view rotated_view =
> -				{ .type = I915_GGTT_VIEW_ROTATED };
>
>   	*view = i915_ggtt_view_normal;
>
> @@ -2304,7 +2302,7 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, struct drm_framebuffer *fb,
>   	if (!intel_rotation_90_or_270(plane_state->rotation))
>   		return 0;
>
> -	*view = rotated_view;
> +	*view = i915_ggtt_view_rotated;
>
>   	info->height = fb->height;
>   	info->pixel_format = fb->pixel_format;
> @@ -2904,10 +2902,10 @@ u32 intel_fb_stride_alignment(struct drm_device *dev, uint64_t fb_modifier,
>   unsigned long intel_plane_obj_offset(struct intel_plane *intel_plane,
>   				     struct drm_i915_gem_object *obj)
>   {
> -	enum i915_ggtt_view_type view = I915_GGTT_VIEW_NORMAL;
> +	const struct i915_ggtt_view *view = &i915_ggtt_view_normal;
>
>   	if (intel_rotation_90_or_270(intel_plane->base.state->rotation))
> -		view = I915_GGTT_VIEW_ROTATED;
> +		view = &i915_ggtt_view_rotated;
>
>   	return i915_gem_obj_ggtt_offset_view(obj, view);
>   }
>

Regards,

Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v4] drm/i915: Compare GGTT view structs instead of types
  2015-03-27 10:41       ` Tvrtko Ursulin
@ 2015-03-27 11:09         ` Joonas Lahtinen
  2015-03-27 11:46           ` Tvrtko Ursulin
  2015-03-27 15:32           ` shuang.he
  0 siblings, 2 replies; 12+ messages in thread
From: Joonas Lahtinen @ 2015-03-27 11:09 UTC (permalink / raw)
  To: intel-gfx, Tvrtko Ursulin

To allow for views where the view type is not defined by the view type only,
like it is in stereo or rotated 90 degree view, change the semantic to require
the whole view structure for comparison when we match a GGTT view.

This allows including parameters like offset to be included in the view which
is useful for eg. partial views.

v3:
- Rely on ggtt_view type being 0 for non-GGTT vma's, which equals to
  I915_GGTT_VIEW_NORMAL. (Daniel Vetter)
- Do not use potentially slower comparison when we only want to know if
  something is or is not a normal view.
- Rebase on top of rotated view patches. Add rotated view singleton.
- If one view is missing in comparison they're equal only if both are missing.

v4:
- Use comparison helper in obj_to_ggtt_view too. (Tvrtko Ursulin)
- Do WARN_ON if one view is NULL. (Tvrtko Ursulin)

Cc: Daniel Vetter <daniel@ffwll.ch>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> (v2)
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h      |  8 ++++----
 drivers/gpu/drm/i915/i915_gem.c      | 16 +++++++++-------
 drivers/gpu/drm/i915/i915_gem_gtt.c  |  3 +++
 drivers/gpu/drm/i915/i915_gem_gtt.h  | 11 +++++++++++
 drivers/gpu/drm/i915/intel_display.c |  8 +++-----
 5 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 256369f..5aeba60 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2794,19 +2794,19 @@ void i915_gem_restore_fences(struct drm_device *dev);
 
 unsigned long
 i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
-			      enum i915_ggtt_view_type view);
+			      const struct i915_ggtt_view *view);
 unsigned long
 i915_gem_obj_offset(struct drm_i915_gem_object *o,
 		    struct i915_address_space *vm);
 static inline unsigned long
 i915_gem_obj_ggtt_offset(struct drm_i915_gem_object *o)
 {
-	return i915_gem_obj_ggtt_offset_view(o, I915_GGTT_VIEW_NORMAL);
+	return i915_gem_obj_ggtt_offset_view(o, &i915_ggtt_view_normal);
 }
 
 bool i915_gem_obj_bound_any(struct drm_i915_gem_object *o);
 bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
-				  enum i915_ggtt_view_type view);
+				  const struct i915_ggtt_view *view);
 bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
 			struct i915_address_space *vm);
 
@@ -2854,7 +2854,7 @@ i915_vm_to_ppgtt(struct i915_address_space *vm)
 
 static inline bool i915_gem_obj_ggtt_bound(struct drm_i915_gem_object *obj)
 {
-	return i915_gem_obj_ggtt_bound_view(obj, I915_GGTT_VIEW_NORMAL);
+	return i915_gem_obj_ggtt_bound_view(obj, &i915_ggtt_view_normal);
 }
 
 static inline unsigned long
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 3300963..5a4b564 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4131,7 +4131,7 @@ i915_gem_object_do_pin(struct drm_i915_gem_object *obj,
 
 		if (i915_vma_misplaced(vma, alignment, flags)) {
 			unsigned long offset;
-			offset = ggtt_view ? i915_gem_obj_ggtt_offset_view(obj, ggtt_view->type) :
+			offset = ggtt_view ? i915_gem_obj_ggtt_offset_view(obj, ggtt_view) :
 					     i915_gem_obj_offset(obj, vm);
 			WARN(vma->pin_count,
 			     "bo is already pinned in %s with incorrect alignment:"
@@ -4230,7 +4230,7 @@ i915_gem_object_ggtt_unpin_view(struct drm_i915_gem_object *obj,
 
 	BUG_ON(!vma);
 	WARN_ON(vma->pin_count == 0);
-	WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view->type));
+	WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view));
 
 	if (--vma->pin_count == 0 && view->type == I915_GGTT_VIEW_NORMAL)
 		obj->pin_mappable = false;
@@ -4552,7 +4552,8 @@ struct i915_vma *i915_gem_obj_to_ggtt_view(struct drm_i915_gem_object *obj,
 		return ERR_PTR(-EINVAL);
 
 	list_for_each_entry(vma, &obj->vma_list, vma_link)
-		if (vma->vm == ggtt && vma->ggtt_view.type == view->type)
+		if (vma->vm == ggtt &&
+		    i915_ggtt_view_equal(&vma->ggtt_view, view))
 			return vma;
 	return NULL;
 }
@@ -5109,13 +5110,14 @@ i915_gem_obj_offset(struct drm_i915_gem_object *o,
 
 unsigned long
 i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
-			      enum i915_ggtt_view_type view)
+			      const struct i915_ggtt_view *view)
 {
 	struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
 	struct i915_vma *vma;
 
 	list_for_each_entry(vma, &o->vma_list, vma_link)
-		if (vma->vm == ggtt && vma->ggtt_view.type == view)
+		if (vma->vm == ggtt &&
+		    i915_ggtt_view_equal(&vma->ggtt_view, view))
 			return vma->node.start;
 
 	WARN(1, "global vma for this object not found.\n");
@@ -5139,14 +5141,14 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
 }
 
 bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
-				  enum i915_ggtt_view_type view)
+				  const struct i915_ggtt_view *view)
 {
 	struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
 	struct i915_vma *vma;
 
 	list_for_each_entry(vma, &o->vma_list, vma_link)
 		if (vma->vm == ggtt &&
-		    vma->ggtt_view.type == view &&
+		    i915_ggtt_view_equal(&vma->ggtt_view, view) &&
 		    drm_mm_node_allocated(&vma->node))
 			return true;
 
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 9903bb0..13eb769 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -93,6 +93,9 @@
  */
 
 const struct i915_ggtt_view i915_ggtt_view_normal;
+const struct i915_ggtt_view i915_ggtt_view_rotated = {
+        .type = I915_GGTT_VIEW_ROTATED
+};
 
 static void bdw_setup_private_ppat(struct drm_i915_private *dev_priv);
 static void chv_setup_private_ppat(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 0dad426..d559b23 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -138,6 +138,7 @@ struct i915_ggtt_view {
 };
 
 extern const struct i915_ggtt_view i915_ggtt_view_normal;
+extern const struct i915_ggtt_view i915_ggtt_view_rotated;
 
 enum i915_cache_level;
 
@@ -422,4 +423,14 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev);
 int __must_check i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj);
 void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj);
 
+static inline bool
+i915_ggtt_view_equal(const struct i915_ggtt_view *a,
+                     const struct i915_ggtt_view *b)
+{
+	if (WARN_ON(!a || !b))
+		return false;
+
+	return a->type == b->type;
+}
+
 #endif
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index cb50854..d6c2e34 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2293,8 +2293,6 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, struct drm_framebuffer *fb,
 			const struct drm_plane_state *plane_state)
 {
 	struct intel_rotation_info *info = &view->rotation_info;
-	static const struct i915_ggtt_view rotated_view =
-				{ .type = I915_GGTT_VIEW_ROTATED };
 
 	*view = i915_ggtt_view_normal;
 
@@ -2304,7 +2302,7 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, struct drm_framebuffer *fb,
 	if (!intel_rotation_90_or_270(plane_state->rotation))
 		return 0;
 
-	*view = rotated_view;
+	*view = i915_ggtt_view_rotated;
 
 	info->height = fb->height;
 	info->pixel_format = fb->pixel_format;
@@ -2904,10 +2902,10 @@ u32 intel_fb_stride_alignment(struct drm_device *dev, uint64_t fb_modifier,
 unsigned long intel_plane_obj_offset(struct intel_plane *intel_plane,
 				     struct drm_i915_gem_object *obj)
 {
-	enum i915_ggtt_view_type view = I915_GGTT_VIEW_NORMAL;
+	const struct i915_ggtt_view *view = &i915_ggtt_view_normal;
 
 	if (intel_rotation_90_or_270(intel_plane->base.state->rotation))
-		view = I915_GGTT_VIEW_ROTATED;
+		view = &i915_ggtt_view_rotated;
 
 	return i915_gem_obj_ggtt_offset_view(obj, view);
 }
-- 
1.9.3



_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v4] drm/i915: Compare GGTT view structs instead of types
  2015-03-27 11:09         ` [PATCH v4] " Joonas Lahtinen
@ 2015-03-27 11:46           ` Tvrtko Ursulin
  2015-03-27 14:05             ` Daniel Vetter
  2015-03-27 15:32           ` shuang.he
  1 sibling, 1 reply; 12+ messages in thread
From: Tvrtko Ursulin @ 2015-03-27 11:46 UTC (permalink / raw)
  To: Joonas Lahtinen, intel-gfx


Hi,

On 03/27/2015 11:09 AM, Joonas Lahtinen wrote:
> To allow for views where the view type is not defined by the view type only,
> like it is in stereo or rotated 90 degree view, change the semantic to require
> the whole view structure for comparison when we match a GGTT view.
>
> This allows including parameters like offset to be included in the view which
> is useful for eg. partial views.
>
> v3:
> - Rely on ggtt_view type being 0 for non-GGTT vma's, which equals to
>    I915_GGTT_VIEW_NORMAL. (Daniel Vetter)
> - Do not use potentially slower comparison when we only want to know if
>    something is or is not a normal view.
> - Rebase on top of rotated view patches. Add rotated view singleton.
> - If one view is missing in comparison they're equal only if both are missing.
>
> v4:
> - Use comparison helper in obj_to_ggtt_view too. (Tvrtko Ursulin)
> - Do WARN_ON if one view is NULL. (Tvrtko Ursulin)
>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> (v2)
> Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3] drm/i915: Compare GGTT view structs instead of types
  2015-03-27 10:03     ` [PATCH v3] " Joonas Lahtinen
  2015-03-27 10:41       ` Tvrtko Ursulin
@ 2015-03-27 13:22       ` shuang.he
  1 sibling, 0 replies; 12+ messages in thread
From: shuang.he @ 2015-03-27 13:22 UTC (permalink / raw)
  To: shuang.he, ethan.gao, intel-gfx, joonas.lahtinen

Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
Task id: 6072
-------------------------------------Summary-------------------------------------
Platform          Delta          drm-intel-nightly          Series Applied
PNV                                  276/276              276/276
ILK                                  303/303              303/303
SNB                                  304/304              304/304
IVB                 -1              330/330              329/330
BYT                                  287/287              287/287
HSW                                  361/361              361/361
BDW                                  309/309              309/309
-------------------------------------Detailed-------------------------------------
Platform  Test                                drm-intel-nightly          Series Applied
*IVB  igt@gem_pwrite_pread@snooped-copy-performance      PASS(3)      DMESG_WARN(1)PASS(1)
(dmesg patch applied)drm:i915_hangcheck_elapsed[i915]]*ERROR*Hangcheck_timer_elapsed...blitter_ring_idle@Hangcheck timer elapsed... blitter ring idle
Note: You need to pay more attention to line start with '*'
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4] drm/i915: Compare GGTT view structs instead of types
  2015-03-27 11:46           ` Tvrtko Ursulin
@ 2015-03-27 14:05             ` Daniel Vetter
  0 siblings, 0 replies; 12+ messages in thread
From: Daniel Vetter @ 2015-03-27 14:05 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: intel-gfx

On Fri, Mar 27, 2015 at 11:46:24AM +0000, Tvrtko Ursulin wrote:
> 
> Hi,
> 
> On 03/27/2015 11:09 AM, Joonas Lahtinen wrote:
> >To allow for views where the view type is not defined by the view type only,
> >like it is in stereo or rotated 90 degree view, change the semantic to require
> >the whole view structure for comparison when we match a GGTT view.
> >
> >This allows including parameters like offset to be included in the view which
> >is useful for eg. partial views.
> >
> >v3:
> >- Rely on ggtt_view type being 0 for non-GGTT vma's, which equals to
> >   I915_GGTT_VIEW_NORMAL. (Daniel Vetter)
> >- Do not use potentially slower comparison when we only want to know if
> >   something is or is not a normal view.
> >- Rebase on top of rotated view patches. Add rotated view singleton.
> >- If one view is missing in comparison they're equal only if both are missing.
> >
> >v4:
> >- Use comparison helper in obj_to_ggtt_view too. (Tvrtko Ursulin)
> >- Do WARN_ON if one view is NULL. (Tvrtko Ursulin)
> >
> >Cc: Daniel Vetter <daniel@ffwll.ch>
> >Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> (v2)
> >Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> 
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Queued for -next, thanks for the patch.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4] drm/i915: Compare GGTT view structs instead of types
  2015-03-27 11:09         ` [PATCH v4] " Joonas Lahtinen
  2015-03-27 11:46           ` Tvrtko Ursulin
@ 2015-03-27 15:32           ` shuang.he
  1 sibling, 0 replies; 12+ messages in thread
From: shuang.he @ 2015-03-27 15:32 UTC (permalink / raw)
  To: shuang.he, ethan.gao, intel-gfx, joonas.lahtinen

Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
Task id: 6076
-------------------------------------Summary-------------------------------------
Platform          Delta          drm-intel-nightly          Series Applied
PNV                                  276/276              276/276
ILK                                  303/303              303/303
SNB                                  304/304              304/304
IVB                 -2              330/330              328/330
BYT                                  287/287              287/287
HSW                                  361/361              361/361
BDW                                  309/309              309/309
-------------------------------------Detailed-------------------------------------
Platform  Test                                drm-intel-nightly          Series Applied
*IVB  igt@gem_storedw_batches_loop@normal      PASS(5)      DMESG_WARN(2)
(dmesg patch applied)drm:i915_hangcheck_elapsed[i915]]*ERROR*Hangcheck_timer_elapsed...blitter_ring_idle@Hangcheck timer elapsed... blitter ring idle
*IVB  igt@gem_storedw_batches_loop@secure-dispatch      PASS(2)      DMESG_WARN(1)PASS(1)
(dmesg patch applied)drm:i915_hangcheck_elapsed[i915]]*ERROR*Hangcheck_timer_elapsed...blitter_ring_idle@Hangcheck timer elapsed... blitter ring idle
Note: You need to pay more attention to line start with '*'
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2015-03-27 15:32 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-23 12:51 [PATCH v2] drm/i915: Compare GGTT view structs instead of types Joonas Lahtinen
2015-03-23 13:39 ` Tvrtko Ursulin
2015-03-24 12:45   ` Joonas Lahtinen
2015-03-25 10:59   ` Daniel Vetter
2015-03-27 10:03     ` [PATCH v3] " Joonas Lahtinen
2015-03-27 10:41       ` Tvrtko Ursulin
2015-03-27 11:09         ` [PATCH v4] " Joonas Lahtinen
2015-03-27 11:46           ` Tvrtko Ursulin
2015-03-27 14:05             ` Daniel Vetter
2015-03-27 15:32           ` shuang.he
2015-03-27 13:22       ` [PATCH v3] " shuang.he
2015-03-24 18:18 ` [PATCH v2] " shuang.he

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.