[Intel-gfx] [PATCH 4/8] drm/i915: NULL checking when capturing buffer objects during error state capture

Daniel Vetter daniel at ffwll.ch
Fri Oct 9 01:32:11 PDT 2015


On Thu, Oct 08, 2015 at 07:31:36PM +0100, Tomas Elf wrote:
> In the past vmas have sometimes turned out to be NULL when capturing buffer
> objects during error state capture. To avoid NULL pointer exceptions throw a
> WARNING and exit early and be prepared for the error state not being fully
> accurate following this point.
> 
> Signed-off-by: Tomas Elf <tomas.elf at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gpu_error.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
> index cc75ca4..ae24971 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -691,9 +691,17 @@ unwind:
>  static void capture_bo(struct drm_i915_error_buffer *err,
>  		       struct i915_vma *vma)
>  {
> -	struct drm_i915_gem_object *obj = vma->obj;
> +	struct drm_i915_gem_object *obj;
>  	int i;
>  
> +	if (WARN_ON(!vma))
> +	    return;

If we rcu-protect the vma lists and vmas themselves then this can't
happen.

> +
> +	if (WARN_ON(!vma->obj))
> +	    return;

Again we probably need to rcu-protect this, and more important we need to
make sure the compiler doesn't do crap. So

	obj = rcu_derefence(vma->obj)
	if (!obj)
		return;

Ofc obj then can also only be released with kfree_rcu.
-Daniel

> +
> +	obj = vma->obj;
> +
>  	err->size = obj->base.size;
>  	err->name = obj->base.name;
>  	for (i = 0; i < I915_NUM_RINGS; i++)
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the Intel-gfx mailing list