From e1d7b66b815a542114169609c8f1b4e46856d7be Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 19 Aug 2019 08:58:22 +0100 Subject: [PATCH] drm/i915: i915_active.retire() is optional Check that i915_active.retire() exists before calling. Signed-off-by: Chris Wilson Reviewed-by: Matthew Auld Link: https://patchwork.freedesktop.org/patch/msgid/20190819075835.20065-6-chris@chris-wilson.co.uk --- drivers/gpu/drm/i915/i915_active.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c index df6164591702..48e16ad93bbd 100644 --- a/drivers/gpu/drm/i915/i915_active.c +++ b/drivers/gpu/drm/i915/i915_active.c @@ -142,12 +142,14 @@ __active_retire(struct i915_active *ref) if (!retire) return; - ref->retire(ref); - rbtree_postorder_for_each_entry_safe(it, n, &root, node) { GEM_BUG_ON(i915_active_request_isset(&it->base)); kmem_cache_free(global.slab_cache, it); } + + /* After the final retire, the entire struct may be freed */ + if (ref->retire) + ref->retire(ref); } static void