summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2015-05-21 21:01:45 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-05-22 08:53:48 +0200
commit9a0c1e2770b839b806bae6bc8f93001f86bc0cf3 (patch)
tree43a4d966072bddfaa58d34b91b532cfe1af6de1e
parent225c228a028388b215e1f8a18546af2c2802bbb5 (diff)
drm/i915: Use the correct destructor for freeing requests on error
After allocating from the slab cache, we then need to free the request back into the slab cache upon error (and not call kfree as that leads to eventual memory corruption). Fixes regression from commit efab6d8dd158fdccbe6a030f89fbf9ca0a9564e4 Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Tue Apr 7 16:20:57 2015 +0100 drm/i915: Use a separate slab for requests Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 50e49a3d7e51..0ce3e4b3059e 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2653,10 +2653,8 @@ int i915_gem_request_alloc(struct intel_engine_cs *ring,
req->i915 = dev_priv;
ret = i915_gem_get_seqno(ring->dev, &req->seqno);
- if (ret) {
- kfree(req);
- return ret;
- }
+ if (ret)
+ goto err;
req->ring = ring;
@@ -2664,13 +2662,15 @@ int i915_gem_request_alloc(struct intel_engine_cs *ring,
ret = intel_logical_ring_alloc_request_extras(req, ctx);
else
ret = intel_ring_alloc_request_extras(req);
- if (ret) {
- kfree(req);
- return ret;
- }
+ if (ret)
+ goto err;
ring->outstanding_lazy_request = req;
return 0;
+
+err:
+ kmem_cache_free(dev_priv->requests, req);
+ return ret;
}
struct drm_i915_gem_request *