Commit bd3d2252 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Rename obj->pin_display to obj->pin_global

In the next patch, we want to extend use of the global pin counter for
semi-permanent pinning of context/ring objects. Given that we plan to
extend the usage to encompass a disparate set of objects, we want a name
that reflects both and should entail less confusion.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171013202621.7276-2-chris@chris-wilson.co.uk
parent f1fa4f44
...@@ -83,7 +83,7 @@ static char get_active_flag(struct drm_i915_gem_object *obj) ...@@ -83,7 +83,7 @@ static char get_active_flag(struct drm_i915_gem_object *obj)
static char get_pin_flag(struct drm_i915_gem_object *obj) static char get_pin_flag(struct drm_i915_gem_object *obj)
{ {
return obj->pin_display ? 'p' : ' '; return obj->pin_global ? 'p' : ' ';
} }
static char get_tiling_flag(struct drm_i915_gem_object *obj) static char get_tiling_flag(struct drm_i915_gem_object *obj)
...@@ -180,8 +180,8 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj) ...@@ -180,8 +180,8 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
pin_count++; pin_count++;
} }
seq_printf(m, " (pinned x %d)", pin_count); seq_printf(m, " (pinned x %d)", pin_count);
if (obj->pin_display) if (obj->pin_global)
seq_printf(m, " (display)"); seq_printf(m, " (global)");
list_for_each_entry(vma, &obj->vma_list, obj_link) { list_for_each_entry(vma, &obj->vma_list, obj_link) {
if (!drm_mm_node_allocated(&vma->node)) if (!drm_mm_node_allocated(&vma->node))
continue; continue;
...@@ -481,7 +481,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data) ...@@ -481,7 +481,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
size += obj->base.size; size += obj->base.size;
++count; ++count;
if (obj->pin_display) { if (obj->pin_global) {
dpy_size += obj->base.size; dpy_size += obj->base.size;
++dpy_count; ++dpy_count;
} }
...@@ -512,7 +512,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data) ...@@ -512,7 +512,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
huge_count, huge_count,
stringify_page_sizes(page_sizes, buf, sizeof(buf)), stringify_page_sizes(page_sizes, buf, sizeof(buf)),
huge_size); huge_size);
seq_printf(m, "%u display objects (pinned), %llu bytes\n", seq_printf(m, "%u display objects (globally pinned), %llu bytes\n",
dpy_count, dpy_size); dpy_count, dpy_size);
seq_printf(m, "%llu [%llu] gtt total\n", seq_printf(m, "%llu [%llu] gtt total\n",
...@@ -579,7 +579,7 @@ static int i915_gem_gtt_info(struct seq_file *m, void *data) ...@@ -579,7 +579,7 @@ static int i915_gem_gtt_info(struct seq_file *m, void *data)
total_obj_size = total_gtt_size = count = 0; total_obj_size = total_gtt_size = count = 0;
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_link) { list_for_each_entry(obj, &dev_priv->mm.bound_list, global_link) {
if (show_pin_display_only && !obj->pin_display) if (show_pin_display_only && !obj->pin_global)
continue; continue;
seq_puts(m, " "); seq_puts(m, " ");
......
...@@ -56,7 +56,7 @@ static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj) ...@@ -56,7 +56,7 @@ static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj)
if (!(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_WRITE)) if (!(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_WRITE))
return true; return true;
return obj->pin_display; return obj->pin_global; /* currently in use by HW, keep flushed */
} }
static int static int
...@@ -3493,7 +3493,7 @@ static void __i915_gem_object_flush_for_display(struct drm_i915_gem_object *obj) ...@@ -3493,7 +3493,7 @@ static void __i915_gem_object_flush_for_display(struct drm_i915_gem_object *obj)
void i915_gem_object_flush_if_display(struct drm_i915_gem_object *obj) void i915_gem_object_flush_if_display(struct drm_i915_gem_object *obj)
{ {
if (!READ_ONCE(obj->pin_display)) if (!READ_ONCE(obj->pin_global))
return; return;
mutex_lock(&obj->base.dev->struct_mutex); mutex_lock(&obj->base.dev->struct_mutex);
...@@ -3860,10 +3860,10 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj, ...@@ -3860,10 +3860,10 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
lockdep_assert_held(&obj->base.dev->struct_mutex); lockdep_assert_held(&obj->base.dev->struct_mutex);
/* Mark the pin_display early so that we account for the /* Mark the global pin early so that we account for the
* display coherency whilst setting up the cache domains. * display coherency whilst setting up the cache domains.
*/ */
obj->pin_display++; obj->pin_global++;
/* The display engine is not coherent with the LLC cache on gen6. As /* The display engine is not coherent with the LLC cache on gen6. As
* a result, we make sure that the pinning that is about to occur is * a result, we make sure that the pinning that is about to occur is
...@@ -3879,7 +3879,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj, ...@@ -3879,7 +3879,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
I915_CACHE_WT : I915_CACHE_NONE); I915_CACHE_WT : I915_CACHE_NONE);
if (ret) { if (ret) {
vma = ERR_PTR(ret); vma = ERR_PTR(ret);
goto err_unpin_display; goto err_unpin_global;
} }
/* As the user may map the buffer once pinned in the display plane /* As the user may map the buffer once pinned in the display plane
...@@ -3910,7 +3910,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj, ...@@ -3910,7 +3910,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
vma = i915_gem_object_ggtt_pin(obj, view, 0, alignment, flags); vma = i915_gem_object_ggtt_pin(obj, view, 0, alignment, flags);
} }
if (IS_ERR(vma)) if (IS_ERR(vma))
goto err_unpin_display; goto err_unpin_global;
vma->display_alignment = max_t(u64, vma->display_alignment, alignment); vma->display_alignment = max_t(u64, vma->display_alignment, alignment);
...@@ -3925,8 +3925,8 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj, ...@@ -3925,8 +3925,8 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
return vma; return vma;
err_unpin_display: err_unpin_global:
obj->pin_display--; obj->pin_global--;
return vma; return vma;
} }
...@@ -3935,10 +3935,10 @@ i915_gem_object_unpin_from_display_plane(struct i915_vma *vma) ...@@ -3935,10 +3935,10 @@ i915_gem_object_unpin_from_display_plane(struct i915_vma *vma)
{ {
lockdep_assert_held(&vma->vm->i915->drm.struct_mutex); lockdep_assert_held(&vma->vm->i915->drm.struct_mutex);
if (WARN_ON(vma->obj->pin_display == 0)) if (WARN_ON(vma->obj->pin_global == 0))
return; return;
if (--vma->obj->pin_display == 0) if (--vma->obj->pin_global == 0)
vma->display_alignment = I915_GTT_MIN_ALIGNMENT; vma->display_alignment = I915_GTT_MIN_ALIGNMENT;
/* Bump the LRU to try and avoid premature eviction whilst flipping */ /* Bump the LRU to try and avoid premature eviction whilst flipping */
......
...@@ -161,7 +161,8 @@ struct drm_i915_gem_object { ...@@ -161,7 +161,8 @@ struct drm_i915_gem_object {
/** Count of VMA actually bound by this object */ /** Count of VMA actually bound by this object */
unsigned int bind_count; unsigned int bind_count;
unsigned int active_count; unsigned int active_count;
unsigned int pin_display; /** Count of how many global VMA are currently pinned for use by HW */
unsigned int pin_global;
struct { struct {
struct mutex lock; /* protects the pages and their use */ struct mutex lock; /* protects the pages and their use */
......
...@@ -83,10 +83,10 @@ static void cancel_userptr(struct work_struct *work) ...@@ -83,10 +83,10 @@ static void cancel_userptr(struct work_struct *work)
if (i915_gem_object_unbind(obj) == 0) if (i915_gem_object_unbind(obj) == 0)
__i915_gem_object_put_pages(obj, I915_MM_NORMAL); __i915_gem_object_put_pages(obj, I915_MM_NORMAL);
WARN_ONCE(i915_gem_object_has_pages(obj), WARN_ONCE(i915_gem_object_has_pages(obj),
"Failed to release pages: bind_count=%d, pages_pin_count=%d, pin_display=%d\n", "Failed to release pages: bind_count=%d, pages_pin_count=%d, pin_global=%d\n",
obj->bind_count, obj->bind_count,
atomic_read(&obj->mm.pages_pin_count), atomic_read(&obj->mm.pages_pin_count),
obj->pin_display); obj->pin_global);
mutex_unlock(&obj->base.dev->struct_mutex); mutex_unlock(&obj->base.dev->struct_mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment