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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx>
---
  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@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux