|
|
|
@ -106,10 +106,19 @@ static const char *get_tiling_flag(struct drm_i915_gem_object *obj) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const char *agp_type_str(int type) |
|
|
|
|
{ |
|
|
|
|
switch (type) { |
|
|
|
|
case 0: return " uncached"; |
|
|
|
|
case 1: return " snooped"; |
|
|
|
|
default: return ""; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj) |
|
|
|
|
{ |
|
|
|
|
seq_printf(m, "%p: %s%s %8zd %04x %04x %d %d%s%s", |
|
|
|
|
seq_printf(m, "%p: %s%s %8zd %04x %04x %d %d%s%s%s", |
|
|
|
|
&obj->base, |
|
|
|
|
get_pin_flag(obj), |
|
|
|
|
get_tiling_flag(obj), |
|
|
|
@ -118,6 +127,7 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj) |
|
|
|
|
obj->base.write_domain, |
|
|
|
|
obj->last_rendering_seqno, |
|
|
|
|
obj->last_fenced_seqno, |
|
|
|
|
agp_type_str(obj->agp_type == AGP_USER_CACHED_MEMORY), |
|
|
|
|
obj->dirty ? " dirty" : "", |
|
|
|
|
obj->madv == I915_MADV_DONTNEED ? " purgeable" : ""); |
|
|
|
|
if (obj->base.name) |
|
|
|
@ -276,6 +286,37 @@ static int i915_gem_object_info(struct seq_file *m, void* data) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int i915_gem_gtt_info(struct seq_file *m, void* data) |
|
|
|
|
{ |
|
|
|
|
struct drm_info_node *node = (struct drm_info_node *) m->private; |
|
|
|
|
struct drm_device *dev = node->minor->dev; |
|
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private; |
|
|
|
|
struct drm_i915_gem_object *obj; |
|
|
|
|
size_t total_obj_size, total_gtt_size; |
|
|
|
|
int count, ret; |
|
|
|
|
|
|
|
|
|
ret = mutex_lock_interruptible(&dev->struct_mutex); |
|
|
|
|
if (ret) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
total_obj_size = total_gtt_size = count = 0; |
|
|
|
|
list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) { |
|
|
|
|
seq_printf(m, " "); |
|
|
|
|
describe_obj(m, obj); |
|
|
|
|
seq_printf(m, "\n"); |
|
|
|
|
total_obj_size += obj->base.size; |
|
|
|
|
total_gtt_size += obj->gtt_space->size; |
|
|
|
|
count++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mutex_unlock(&dev->struct_mutex); |
|
|
|
|
|
|
|
|
|
seq_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n", |
|
|
|
|
count, total_obj_size, total_gtt_size); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int i915_gem_pageflip_info(struct seq_file *m, void *data) |
|
|
|
|
{ |
|
|
|
@ -624,15 +665,6 @@ static const char *ring_str(int ring) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const char *agp_type_str(int type) |
|
|
|
|
{ |
|
|
|
|
switch (type) { |
|
|
|
|
case 0: return " uncached"; |
|
|
|
|
case 1: return " snooped"; |
|
|
|
|
default: return ""; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const char *pin_flag(int pinned) |
|
|
|
|
{ |
|
|
|
|
if (pinned > 0) |
|
|
|
@ -1229,6 +1261,7 @@ static int i915_wedged_create(struct dentry *root, struct drm_minor *minor) |
|
|
|
|
static struct drm_info_list i915_debugfs_list[] = { |
|
|
|
|
{"i915_capabilities", i915_capabilities, 0, 0}, |
|
|
|
|
{"i915_gem_objects", i915_gem_object_info, 0}, |
|
|
|
|
{"i915_gem_gtt", i915_gem_gtt_info, 0}, |
|
|
|
|
{"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST}, |
|
|
|
|
{"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST}, |
|
|
|
|
{"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST}, |
|
|
|
|