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>
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;
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 *