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

Tomas Elf tomas.elf at intel.com
Fri Oct 9 04:45:46 PDT 2015


On 09/10/2015 09:32, Daniel Vetter wrote:
> 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

Awesome! Let's go with that solution then.

Thanks,
Tomas

>
>> +
>> +	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
>



More information about the Intel-gfx mailing list