diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_debug.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_debug.c | 92 | 
1 files changed, 22 insertions, 70 deletions
| diff --git a/drivers/gpu/drm/i915/i915_gem_debug.c b/drivers/gpu/drm/i915/i915_gem_debug.c index f462d1b51d97..17299d04189f 100644 --- a/drivers/gpu/drm/i915/i915_gem_debug.c +++ b/drivers/gpu/drm/i915/i915_gem_debug.c @@ -34,82 +34,34 @@ int  i915_verify_lists(struct drm_device *dev)  {  	static int warned; -	struct drm_i915_private *dev_priv = dev->dev_private; +	struct drm_i915_private *dev_priv = to_i915(dev);  	struct drm_i915_gem_object *obj; +	struct intel_engine_cs *ring;  	int err = 0; +	int i;  	if (warned)  		return 0; -	list_for_each_entry(obj, &dev_priv->render_ring.active_list, list) { -		if (obj->base.dev != dev || -		    !atomic_read(&obj->base.refcount.refcount)) { -			DRM_ERROR("freed render active %p\n", obj); -			err++; -			break; -		} else if (!obj->active || -			   (obj->base.read_domains & I915_GEM_GPU_DOMAINS) == 0) { -			DRM_ERROR("invalid render active %p (a %d r %x)\n", -				  obj, -				  obj->active, -				  obj->base.read_domains); -			err++; -		} else if (obj->base.write_domain && list_empty(&obj->gpu_write_list)) { -			DRM_ERROR("invalid render active %p (w %x, gwl %d)\n", -				  obj, -				  obj->base.write_domain, -				  !list_empty(&obj->gpu_write_list)); -			err++; -		} -	} - -	list_for_each_entry(obj, &dev_priv->mm.flushing_list, list) { -		if (obj->base.dev != dev || -		    !atomic_read(&obj->base.refcount.refcount)) { -			DRM_ERROR("freed flushing %p\n", obj); -			err++; -			break; -		} else if (!obj->active || -			   (obj->base.write_domain & I915_GEM_GPU_DOMAINS) == 0 || -			   list_empty(&obj->gpu_write_list)) { -			DRM_ERROR("invalid flushing %p (a %d w %x gwl %d)\n", -				  obj, -				  obj->active, -				  obj->base.write_domain, -				  !list_empty(&obj->gpu_write_list)); -			err++; -		} -	} - -	list_for_each_entry(obj, &dev_priv->mm.gpu_write_list, gpu_write_list) { -		if (obj->base.dev != dev || -		    !atomic_read(&obj->base.refcount.refcount)) { -			DRM_ERROR("freed gpu write %p\n", obj); -			err++; -			break; -		} else if (!obj->active || -			   (obj->base.write_domain & I915_GEM_GPU_DOMAINS) == 0) { -			DRM_ERROR("invalid gpu write %p (a %d w %x)\n", -				  obj, -				  obj->active, -				  obj->base.write_domain); -			err++; -		} -	} - -	list_for_each_entry(obj, &i915_gtt_vm->inactive_list, list) { -		if (obj->base.dev != dev || -		    !atomic_read(&obj->base.refcount.refcount)) { -			DRM_ERROR("freed inactive %p\n", obj); -			err++; -			break; -		} else if (obj->pin_count || obj->active || -			   (obj->base.write_domain & I915_GEM_GPU_DOMAINS)) { -			DRM_ERROR("invalid inactive %p (p %d a %d w %x)\n", -				  obj, -				  obj->pin_count, obj->active, -				  obj->base.write_domain); -			err++; +	for_each_ring(ring, dev_priv, i) { +		list_for_each_entry(obj, &ring->active_list, ring_list[ring->id]) { +			if (obj->base.dev != dev || +			    !atomic_read(&obj->base.refcount.refcount)) { +				DRM_ERROR("%s: freed active obj %p\n", +					  ring->name, obj); +				err++; +				break; +			} else if (!obj->active || +				   obj->last_read_req[ring->id] == NULL) { +				DRM_ERROR("%s: invalid active obj %p\n", +					  ring->name, obj); +				err++; +			} else if (obj->base.write_domain) { +				DRM_ERROR("%s: invalid write obj %p (w %x)\n", +					  ring->name, +					  obj, obj->base.write_domain); +				err++; +			}  		}  	} | 
