drm/i915: Fix memleak in runtime wakeref tracking
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Mon, 1 Jul 2019 10:44:42 +0000 (13:44 +0300)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 2 Jul 2019 15:00:20 +0000 (16:00 +0100)
If we untrack wakerefs, the actual count may reach zero.
However the krealloced owners array is still there and
needs to be taken care of. Free the owners unconditionally
to fix the leak.

Fixes: bd780f37a361 ("drm/i915: Track all held rpm wakerefs")
Reported-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190701104442.9319-1-mika.kuoppala@linux.intel.com
drivers/gpu/drm/i915/intel_runtime_pm.c

index 502c54428570c7a75130781862bbe308c3fac0e9..8d1aebc3e8574652153553f82370f7a210d14c84 100644 (file)
@@ -221,13 +221,11 @@ __untrack_all_wakerefs(struct intel_runtime_pm_debug *debug,
 static void
 dump_and_free_wakeref_tracking(struct intel_runtime_pm_debug *debug)
 {
-       struct drm_printer p;
+       if (debug->count) {
+               struct drm_printer p = drm_debug_printer("i915");
 
-       if (!debug->count)
-               return;
-
-       p = drm_debug_printer("i915");
-       __print_intel_runtime_pm_wakeref(&p, debug);
+               __print_intel_runtime_pm_wakeref(&p, debug);
+       }
 
        kfree(debug->owners);
 }