Re: [Intel-gfx] [PATCH 6/9] drm/i915: Wrap VMA binding

2014-05-07 Thread Daniel Vetter
On Tue, May 06, 2014 at 10:21:35PM -0700, Ben Widawsky wrote:
 This will be useful for some upcoming patches which do more platform
 specific work. Having it in one central place just makes things a bit
 cleaner and easier.
 
 There is a small functional change here. There are more calls to the
 tracepoints.
 
 NOTE: I didn't actually end up using this patch for the intended purpose, but 
 I
 thought it was a nice patch to keep around.
 
 v2: s/i915_gem_bind_vma/i915_gem_vma_bind/
 s/i915_gem_unbind_vma/i915_gem_vma_unbind/
 (Chris)
 
 v3: Missed one spot
 
 Signed-off-by: Ben Widawsky b...@bwidawsk.net

You change the semantics of the vma bind/unbind tracepoints - previously
they've meant we reserve/unreserve a ppgtt address for an object, not
they're called every time we touch the ptes (which is what
vma_bind|unbind actually do). That doesn't look too terribly useful for
tracing any more.

What's the use case for these added tracepoints?
-Daniel

 ---
  drivers/gpu/drm/i915/i915_drv.h|  3 +++
  drivers/gpu/drm/i915/i915_gem.c| 13 ++---
  drivers/gpu/drm/i915/i915_gem_context.c|  2 +-
  drivers/gpu/drm/i915/i915_gem_execbuffer.c |  5 +++--
  drivers/gpu/drm/i915/i915_gem_gtt.c| 16 ++--
  5 files changed, 27 insertions(+), 12 deletions(-)
 
 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
 index c1d2bea..30cde3d 100644
 --- a/drivers/gpu/drm/i915/i915_drv.h
 +++ b/drivers/gpu/drm/i915/i915_drv.h
 @@ -2264,6 +2264,9 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
   struct i915_address_space *vm);
  unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o,
   struct i915_address_space *vm);
 +void i915_gem_vma_bind(struct i915_vma *vma, enum i915_cache_level,
 +unsigned flags);
 +void i915_gem_vma_unbind(struct i915_vma *vma);
  struct i915_vma *i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
struct i915_address_space *vm);
  struct i915_vma *
 diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
 index e9599e9..1567911 100644
 --- a/drivers/gpu/drm/i915/i915_gem.c
 +++ b/drivers/gpu/drm/i915/i915_gem.c
 @@ -2771,7 +2771,7 @@ int i915_vma_unbind(struct i915_vma *vma)
  
   trace_i915_vma_unbind(vma);
  
 - vma-unbind_vma(vma);
 + i915_gem_vma_unbind(vma);
  
   i915_gem_gtt_finish_object(obj);
  
 @@ -3342,9 +3342,8 @@ i915_gem_object_bind_to_vm(struct drm_i915_gem_object 
 *obj,
  
   WARN_ON(flags  PIN_MAPPABLE  !obj-map_and_fenceable);
  
 - trace_i915_vma_bind(vma, flags);
 - vma-bind_vma(vma, obj-cache_level,
 -   flags  (PIN_MAPPABLE | PIN_GLOBAL) ? GLOBAL_BIND : 0);
 + i915_gem_vma_bind(vma, obj-cache_level,
 +   flags  (PIN_MAPPABLE | PIN_GLOBAL) ? GLOBAL_BIND : 
 0);
  
   i915_gem_verify_gtt(dev);
   return vma;
 @@ -3548,8 +3547,8 @@ int i915_gem_object_set_cache_level(struct 
 drm_i915_gem_object *obj,
  
   list_for_each_entry(vma, obj-vma_list, vma_link)
   if (drm_mm_node_allocated(vma-node))
 - vma-bind_vma(vma, cache_level,
 -   obj-has_global_gtt_mapping ? 
 GLOBAL_BIND : 0);
 + i915_gem_vma_bind(vma, cache_level,
 +   obj-has_global_gtt_mapping ? 
 GLOBAL_BIND : 0);
   }
  
   list_for_each_entry(vma, obj-vma_list, vma_link)
 @@ -3914,7 +3913,7 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
   }
  
   if (flags  PIN_GLOBAL  !obj-has_global_gtt_mapping)
 - vma-bind_vma(vma, obj-cache_level, GLOBAL_BIND);
 + i915_gem_vma_bind(vma, obj-cache_level, GLOBAL_BIND);
  
   vma-pin_count++;
   if (flags  PIN_MAPPABLE)
 diff --git a/drivers/gpu/drm/i915/i915_gem_context.c 
 b/drivers/gpu/drm/i915/i915_gem_context.c
 index f77b4c1..00c7d88 100644
 --- a/drivers/gpu/drm/i915/i915_gem_context.c
 +++ b/drivers/gpu/drm/i915/i915_gem_context.c
 @@ -655,7 +655,7 @@ static int do_switch(struct intel_ring_buffer *ring,
   if (!to-obj-has_global_gtt_mapping) {
   struct i915_vma *vma = i915_gem_obj_to_vma(to-obj,
  dev_priv-gtt.base);
 - vma-bind_vma(vma, to-obj-cache_level, GLOBAL_BIND);
 + i915_gem_vma_bind(vma, to-obj-cache_level, GLOBAL_BIND);
   }
  
   if (!to-is_initialized || i915_gem_context_is_default(to))
 diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c 
 b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 index 6cc004f..211bbbd 100644
 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 @@ -369,7 +369,8 @@ i915_gem_execbuffer_relocate_entry(struct 
 drm_i915_gem_object *obj,
   struct i915_vma *vma =
 

Re: [Intel-gfx] [PATCH 6/9] drm/i915: Wrap VMA binding

2014-05-07 Thread Ben Widawsky
On Wed, May 07, 2014 at 09:55:49AM +0200, Daniel Vetter wrote:
 On Tue, May 06, 2014 at 10:21:35PM -0700, Ben Widawsky wrote:
  This will be useful for some upcoming patches which do more platform
  specific work. Having it in one central place just makes things a bit
  cleaner and easier.
  
  There is a small functional change here. There are more calls to the
  tracepoints.
  
  NOTE: I didn't actually end up using this patch for the intended purpose, 
  but I
  thought it was a nice patch to keep around.
  
  v2: s/i915_gem_bind_vma/i915_gem_vma_bind/
  s/i915_gem_unbind_vma/i915_gem_vma_unbind/
  (Chris)
  
  v3: Missed one spot
  
  Signed-off-by: Ben Widawsky b...@bwidawsk.net
 
 You change the semantics of the vma bind/unbind tracepoints - previously
 they've meant we reserve/unreserve a ppgtt address for an object, not
 they're called every time we touch the ptes (which is what
 vma_bind|unbind actually do). That doesn't look too terribly useful for
 tracing any more.
 
 What's the use case for these added tracepoints?
 -Daniel
 

You're right. The tracepoint is incredibly useful for debug purposes,
but not as an actual tracepoint. The current tracepoint is badly named,
IMO, but that's fine. I am not sure it's worth fixing though, since
nobody has really spoken up for the patch.

  ---
   drivers/gpu/drm/i915/i915_drv.h|  3 +++
   drivers/gpu/drm/i915/i915_gem.c| 13 ++---
   drivers/gpu/drm/i915/i915_gem_context.c|  2 +-
   drivers/gpu/drm/i915/i915_gem_execbuffer.c |  5 +++--
   drivers/gpu/drm/i915/i915_gem_gtt.c| 16 ++--
   5 files changed, 27 insertions(+), 12 deletions(-)
  
  diff --git a/drivers/gpu/drm/i915/i915_drv.h 
  b/drivers/gpu/drm/i915/i915_drv.h
  index c1d2bea..30cde3d 100644
  --- a/drivers/gpu/drm/i915/i915_drv.h
  +++ b/drivers/gpu/drm/i915/i915_drv.h
  @@ -2264,6 +2264,9 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
  struct i915_address_space *vm);
   unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o,
  struct i915_address_space *vm);
  +void i915_gem_vma_bind(struct i915_vma *vma, enum i915_cache_level,
  +  unsigned flags);
  +void i915_gem_vma_unbind(struct i915_vma *vma);
   struct i915_vma *i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
   struct i915_address_space *vm);
   struct i915_vma *
  diff --git a/drivers/gpu/drm/i915/i915_gem.c 
  b/drivers/gpu/drm/i915/i915_gem.c
  index e9599e9..1567911 100644
  --- a/drivers/gpu/drm/i915/i915_gem.c
  +++ b/drivers/gpu/drm/i915/i915_gem.c
  @@ -2771,7 +2771,7 @@ int i915_vma_unbind(struct i915_vma *vma)
   
  trace_i915_vma_unbind(vma);
   
  -   vma-unbind_vma(vma);
  +   i915_gem_vma_unbind(vma);
   
  i915_gem_gtt_finish_object(obj);
   
  @@ -3342,9 +3342,8 @@ i915_gem_object_bind_to_vm(struct drm_i915_gem_object 
  *obj,
   
  WARN_ON(flags  PIN_MAPPABLE  !obj-map_and_fenceable);
   
  -   trace_i915_vma_bind(vma, flags);
  -   vma-bind_vma(vma, obj-cache_level,
  - flags  (PIN_MAPPABLE | PIN_GLOBAL) ? GLOBAL_BIND : 0);
  +   i915_gem_vma_bind(vma, obj-cache_level,
  + flags  (PIN_MAPPABLE | PIN_GLOBAL) ? GLOBAL_BIND : 
  0);
   
  i915_gem_verify_gtt(dev);
  return vma;
  @@ -3548,8 +3547,8 @@ int i915_gem_object_set_cache_level(struct 
  drm_i915_gem_object *obj,
   
  list_for_each_entry(vma, obj-vma_list, vma_link)
  if (drm_mm_node_allocated(vma-node))
  -   vma-bind_vma(vma, cache_level,
  - obj-has_global_gtt_mapping ? 
  GLOBAL_BIND : 0);
  +   i915_gem_vma_bind(vma, cache_level,
  + obj-has_global_gtt_mapping ? 
  GLOBAL_BIND : 0);
  }
   
  list_for_each_entry(vma, obj-vma_list, vma_link)
  @@ -3914,7 +3913,7 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
  }
   
  if (flags  PIN_GLOBAL  !obj-has_global_gtt_mapping)
  -   vma-bind_vma(vma, obj-cache_level, GLOBAL_BIND);
  +   i915_gem_vma_bind(vma, obj-cache_level, GLOBAL_BIND);
   
  vma-pin_count++;
  if (flags  PIN_MAPPABLE)
  diff --git a/drivers/gpu/drm/i915/i915_gem_context.c 
  b/drivers/gpu/drm/i915/i915_gem_context.c
  index f77b4c1..00c7d88 100644
  --- a/drivers/gpu/drm/i915/i915_gem_context.c
  +++ b/drivers/gpu/drm/i915/i915_gem_context.c
  @@ -655,7 +655,7 @@ static int do_switch(struct intel_ring_buffer *ring,
  if (!to-obj-has_global_gtt_mapping) {
  struct i915_vma *vma = i915_gem_obj_to_vma(to-obj,
 dev_priv-gtt.base);
  -   vma-bind_vma(vma, to-obj-cache_level, GLOBAL_BIND);
  +   i915_gem_vma_bind(vma, to-obj-cache_level, GLOBAL_BIND);
  }
   
  if (!to-is_initialized || i915_gem_context_is_default(to))

Re: [Intel-gfx] [PATCH 6/9] drm/i915: Wrap VMA binding

2014-05-07 Thread Daniel Vetter
On Wed, May 07, 2014 at 08:54:56AM -0700, Ben Widawsky wrote:
 On Wed, May 07, 2014 at 09:55:49AM +0200, Daniel Vetter wrote:
  On Tue, May 06, 2014 at 10:21:35PM -0700, Ben Widawsky wrote:
   This will be useful for some upcoming patches which do more platform
   specific work. Having it in one central place just makes things a bit
   cleaner and easier.
   
   There is a small functional change here. There are more calls to the
   tracepoints.
   
   NOTE: I didn't actually end up using this patch for the intended purpose, 
   but I
   thought it was a nice patch to keep around.
   
   v2: s/i915_gem_bind_vma/i915_gem_vma_bind/
   s/i915_gem_unbind_vma/i915_gem_vma_unbind/
   (Chris)
   
   v3: Missed one spot
   
   Signed-off-by: Ben Widawsky b...@bwidawsk.net
  
  You change the semantics of the vma bind/unbind tracepoints - previously
  they've meant we reserve/unreserve a ppgtt address for an object, not
  they're called every time we touch the ptes (which is what
  vma_bind|unbind actually do). That doesn't look too terribly useful for
  tracing any more.
  
  What's the use case for these added tracepoints?
  -Daniel
  
 
 You're right. The tracepoint is incredibly useful for debug purposes,
 but not as an actual tracepoint. The current tracepoint is badly named,
 IMO, but that's fine. I am not sure it's worth fixing though, since
 nobody has really spoken up for the patch.

Yeah I think a new tracepoint we use every time we frob ptes could be
useful indeed. But conflating that operation with the vm operation isn't
good, especially since the vm operation lacks crucial information like the
actual caching bits we're using with the ptes.
-Daniel
 
   ---
drivers/gpu/drm/i915/i915_drv.h|  3 +++
drivers/gpu/drm/i915/i915_gem.c| 13 ++---
drivers/gpu/drm/i915/i915_gem_context.c|  2 +-
drivers/gpu/drm/i915/i915_gem_execbuffer.c |  5 +++--
drivers/gpu/drm/i915/i915_gem_gtt.c| 16 ++--
5 files changed, 27 insertions(+), 12 deletions(-)
   
   diff --git a/drivers/gpu/drm/i915/i915_drv.h 
   b/drivers/gpu/drm/i915/i915_drv.h
   index c1d2bea..30cde3d 100644
   --- a/drivers/gpu/drm/i915/i915_drv.h
   +++ b/drivers/gpu/drm/i915/i915_drv.h
   @@ -2264,6 +2264,9 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object 
   *o,
 struct i915_address_space *vm);
unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o,
 struct i915_address_space *vm);
   +void i915_gem_vma_bind(struct i915_vma *vma, enum i915_cache_level,
   +unsigned flags);
   +void i915_gem_vma_unbind(struct i915_vma *vma);
struct i915_vma *i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
  struct i915_address_space *vm);
struct i915_vma *
   diff --git a/drivers/gpu/drm/i915/i915_gem.c 
   b/drivers/gpu/drm/i915/i915_gem.c
   index e9599e9..1567911 100644
   --- a/drivers/gpu/drm/i915/i915_gem.c
   +++ b/drivers/gpu/drm/i915/i915_gem.c
   @@ -2771,7 +2771,7 @@ int i915_vma_unbind(struct i915_vma *vma)

 trace_i915_vma_unbind(vma);

   - vma-unbind_vma(vma);
   + i915_gem_vma_unbind(vma);

 i915_gem_gtt_finish_object(obj);

   @@ -3342,9 +3342,8 @@ i915_gem_object_bind_to_vm(struct 
   drm_i915_gem_object *obj,

 WARN_ON(flags  PIN_MAPPABLE  !obj-map_and_fenceable);

   - trace_i915_vma_bind(vma, flags);
   - vma-bind_vma(vma, obj-cache_level,
   -   flags  (PIN_MAPPABLE | PIN_GLOBAL) ? GLOBAL_BIND : 0);
   + i915_gem_vma_bind(vma, obj-cache_level,
   +   flags  (PIN_MAPPABLE | PIN_GLOBAL) ? GLOBAL_BIND : 
   0);

 i915_gem_verify_gtt(dev);
 return vma;
   @@ -3548,8 +3547,8 @@ int i915_gem_object_set_cache_level(struct 
   drm_i915_gem_object *obj,

 list_for_each_entry(vma, obj-vma_list, vma_link)
 if (drm_mm_node_allocated(vma-node))
   - vma-bind_vma(vma, cache_level,
   -   obj-has_global_gtt_mapping ? 
   GLOBAL_BIND : 0);
   + i915_gem_vma_bind(vma, cache_level,
   +   obj-has_global_gtt_mapping ? 
   GLOBAL_BIND : 0);
 }

 list_for_each_entry(vma, obj-vma_list, vma_link)
   @@ -3914,7 +3913,7 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
 }

 if (flags  PIN_GLOBAL  !obj-has_global_gtt_mapping)
   - vma-bind_vma(vma, obj-cache_level, GLOBAL_BIND);
   + i915_gem_vma_bind(vma, obj-cache_level, GLOBAL_BIND);

 vma-pin_count++;
 if (flags  PIN_MAPPABLE)
   diff --git a/drivers/gpu/drm/i915/i915_gem_context.c 
   b/drivers/gpu/drm/i915/i915_gem_context.c
   index f77b4c1..00c7d88 100644
   --- a/drivers/gpu/drm/i915/i915_gem_context.c
   +++ b/drivers/gpu/drm/i915/i915_gem_context.c
   @@ -655,7 +655,7 @@ static int do_switch(struct intel_ring_buffer *ring,

[Intel-gfx] [PATCH 6/9] drm/i915: Wrap VMA binding

2014-05-06 Thread Ben Widawsky
This will be useful for some upcoming patches which do more platform
specific work. Having it in one central place just makes things a bit
cleaner and easier.

There is a small functional change here. There are more calls to the
tracepoints.

NOTE: I didn't actually end up using this patch for the intended purpose, but I
thought it was a nice patch to keep around.

v2: s/i915_gem_bind_vma/i915_gem_vma_bind/
s/i915_gem_unbind_vma/i915_gem_vma_unbind/
(Chris)

v3: Missed one spot

Signed-off-by: Ben Widawsky b...@bwidawsk.net
---
 drivers/gpu/drm/i915/i915_drv.h|  3 +++
 drivers/gpu/drm/i915/i915_gem.c| 13 ++---
 drivers/gpu/drm/i915/i915_gem_context.c|  2 +-
 drivers/gpu/drm/i915/i915_gem_execbuffer.c |  5 +++--
 drivers/gpu/drm/i915/i915_gem_gtt.c| 16 ++--
 5 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index c1d2bea..30cde3d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2264,6 +2264,9 @@ bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
struct i915_address_space *vm);
 unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o,
struct i915_address_space *vm);
+void i915_gem_vma_bind(struct i915_vma *vma, enum i915_cache_level,
+  unsigned flags);
+void i915_gem_vma_unbind(struct i915_vma *vma);
 struct i915_vma *i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
 struct i915_address_space *vm);
 struct i915_vma *
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index e9599e9..1567911 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2771,7 +2771,7 @@ int i915_vma_unbind(struct i915_vma *vma)
 
trace_i915_vma_unbind(vma);
 
-   vma-unbind_vma(vma);
+   i915_gem_vma_unbind(vma);
 
i915_gem_gtt_finish_object(obj);
 
@@ -3342,9 +3342,8 @@ i915_gem_object_bind_to_vm(struct drm_i915_gem_object 
*obj,
 
WARN_ON(flags  PIN_MAPPABLE  !obj-map_and_fenceable);
 
-   trace_i915_vma_bind(vma, flags);
-   vma-bind_vma(vma, obj-cache_level,
- flags  (PIN_MAPPABLE | PIN_GLOBAL) ? GLOBAL_BIND : 0);
+   i915_gem_vma_bind(vma, obj-cache_level,
+ flags  (PIN_MAPPABLE | PIN_GLOBAL) ? GLOBAL_BIND : 
0);
 
i915_gem_verify_gtt(dev);
return vma;
@@ -3548,8 +3547,8 @@ int i915_gem_object_set_cache_level(struct 
drm_i915_gem_object *obj,
 
list_for_each_entry(vma, obj-vma_list, vma_link)
if (drm_mm_node_allocated(vma-node))
-   vma-bind_vma(vma, cache_level,
- obj-has_global_gtt_mapping ? 
GLOBAL_BIND : 0);
+   i915_gem_vma_bind(vma, cache_level,
+ obj-has_global_gtt_mapping ? 
GLOBAL_BIND : 0);
}
 
list_for_each_entry(vma, obj-vma_list, vma_link)
@@ -3914,7 +3913,7 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
}
 
if (flags  PIN_GLOBAL  !obj-has_global_gtt_mapping)
-   vma-bind_vma(vma, obj-cache_level, GLOBAL_BIND);
+   i915_gem_vma_bind(vma, obj-cache_level, GLOBAL_BIND);
 
vma-pin_count++;
if (flags  PIN_MAPPABLE)
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c 
b/drivers/gpu/drm/i915/i915_gem_context.c
index f77b4c1..00c7d88 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -655,7 +655,7 @@ static int do_switch(struct intel_ring_buffer *ring,
if (!to-obj-has_global_gtt_mapping) {
struct i915_vma *vma = i915_gem_obj_to_vma(to-obj,
   dev_priv-gtt.base);
-   vma-bind_vma(vma, to-obj-cache_level, GLOBAL_BIND);
+   i915_gem_vma_bind(vma, to-obj-cache_level, GLOBAL_BIND);
}
 
if (!to-is_initialized || i915_gem_context_is_default(to))
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 6cc004f..211bbbd 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -369,7 +369,8 @@ i915_gem_execbuffer_relocate_entry(struct 
drm_i915_gem_object *obj,
struct i915_vma *vma =
list_first_entry(target_i915_obj-vma_list,
 typeof(*vma), vma_link);
-   vma-bind_vma(vma, target_i915_obj-cache_level, GLOBAL_BIND);
+   i915_gem_vma_bind(vma, target_i915_obj-cache_level,
+ GLOBAL_BIND);
}
 
/* Validate that the target is in a valid r/w GPU domain */
@@ -1266,7 +1267,7 @@