[Intel-gfx] [PATCH 04/11] drm/i915: Amalgamate GGTT/ppGTT vma debug list walkers

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Thu Dec 17 03:21:28 PST 2015


On 14/12/15 11:36, Chris Wilson wrote:
> As we can now have multiple VMA inside the global GTT (with partial
> mappings, rotations, etc), it is no longer true that there may just be a
> single GGTT entry and so we should walk the full vma_list to count up
> the actual usage. In addition to unifying the two walkers, switch from
> multiplying the object size for each vma to summing the bound vma sizes.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/i915_debugfs.c | 46 +++++++++++++++----------------------
>   1 file changed, 18 insertions(+), 28 deletions(-)

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

Regards,

Tvrtko

>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index fdcf90757eb0..c04ba9981e9b 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -332,6 +332,7 @@ static int per_file_stats(int id, void *ptr, void *data)
>   	struct drm_i915_gem_object *obj = ptr;
>   	struct file_stats *stats = data;
>   	struct i915_vma *vma;
> +	int bound = 0;
>
>   	stats->count++;
>   	stats->total += obj->base.size;
> @@ -339,41 +340,30 @@ static int per_file_stats(int id, void *ptr, void *data)
>   	if (obj->base.name || obj->base.dma_buf)
>   		stats->shared += obj->base.size;
>
> -	if (USES_FULL_PPGTT(obj->base.dev)) {
> -		list_for_each_entry(vma, &obj->vma_list, obj_link) {
> -			struct i915_hw_ppgtt *ppgtt;
> +	list_for_each_entry(vma, &obj->vma_list, obj_link) {
> +		if (!drm_mm_node_allocated(&vma->node))
> +			continue;
>
> -			if (!drm_mm_node_allocated(&vma->node))
> -				continue;
> +		bound++;
>
> -			if (i915_is_ggtt(vma->vm)) {
> -				stats->global += obj->base.size;
> -				continue;
> -			}
> -
> -			ppgtt = container_of(vma->vm, struct i915_hw_ppgtt, base);
> +		if (i915_is_ggtt(vma->vm)) {
> +			stats->global += vma->node.size;
> +		} else {
> +			struct i915_hw_ppgtt *ppgtt
> +				= container_of(vma->vm,
> +					       struct i915_hw_ppgtt,
> +					       base);
>   			if (ppgtt->file_priv != stats->file_priv)
>   				continue;
> -
> -			if (obj->active) /* XXX per-vma statistic */
> -				stats->active += obj->base.size;
> -			else
> -				stats->inactive += obj->base.size;
> -
> -			return 0;
> -		}
> -	} else {
> -		if (i915_gem_obj_ggtt_bound(obj)) {
> -			stats->global += obj->base.size;
> -			if (obj->active)
> -				stats->active += obj->base.size;
> -			else
> -				stats->inactive += obj->base.size;
> -			return 0;
>   		}
> +
> +		if (obj->active) /* XXX per-vma statistic */
> +			stats->active += vma->node.size;
> +		else
> +			stats->inactive += vma->node.size;
>   	}
>
> -	if (!list_empty(&obj->global_list))
> +	if (!bound)
>   		stats->unbound += obj->base.size;
>
>   	return 0;
>


More information about the Intel-gfx mailing list