Re: [Intel-gfx] [PATCH 3/3] drm/i915: Attempt to uncouple object after catastrophic failure in unbind

2010-08-01 Thread Eric Anholt
On Fri, 23 Jul 2010 23:18:51 +0100, Chris Wilson ch...@chris-wilson.co.uk 
wrote:
 If we fail to flush outstanding GPU writes but return the memory to the
 system, we risk corrupting memory should the GPU recovery and complete
 those writes. On the other hand, if we bail early and free the object
 then we have a definite use-after-free and real memory corruption.
 Choose the lesser of two evils, since in order to recover from the hung
 GPU we need to completely reset it, those pending writes should
 never happen.

Applied this series to -next.


pgpFDX2SUu2bg.pgp
Description: PGP signature
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH 3/3] drm/i915: Attempt to uncouple object after catastrophic failure in unbind

2010-07-23 Thread Chris Wilson
If we fail to flush outstanding GPU writes but return the memory to the
system, we risk corrupting memory should the GPU recovery and complete
those writes. On the other hand, if we bail early and free the object
then we have a definite use-after-free and real memory corruption.
Choose the lesser of two evils, since in order to recover from the hung
GPU we need to completely reset it, those pending writes should
never happen.

Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk
---
 drivers/gpu/drm/i915/i915_gem.c |   11 ++-
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 4a21053..56fd9e2 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1967,11 +1967,12 @@ i915_gem_object_unbind(struct drm_gem_object *obj)
 * before we unbind.
 */
ret = i915_gem_object_set_to_cpu_domain(obj, 1);
-   if (ret) {
-   if (ret != -ERESTARTSYS)
-   DRM_ERROR(set_domain failed: %d\n, ret);
+   if (ret == -ERESTARTSYS)
return ret;
-   }
+   /* Continue on if we fail due to EIO, the GPU is hung so we
+* should be safe and we need to cleanup or else we might
+* cause memory corruption through use-after-free.
+*/
 
BUG_ON(obj_priv-active);
 
@@ -2007,7 +2008,7 @@ i915_gem_object_unbind(struct drm_gem_object *obj)
 
trace_i915_gem_object_unbind(obj);
 
-   return 0;
+   return ret;
 }
 
 static struct drm_gem_object *
-- 
1.7.1

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