drm/i915/buddy: tidy up i915_buddy_fini

Submitted by Chris Wilson on Aug. 16, 2019, 10:09 a.m.

Details

Message ID 156595019735.11610.14737762443319848109@skylake-alporthouse-com
State New
Headers show
Series "drm/i915/buddy: tidy up i915_buddy_fini" ( rev: 2 ) in Intel GFX

Not browsing as part of any series.

Commit Message

Chris Wilson Aug. 16, 2019, 10:09 a.m.
Quoting Matthew Auld (2019-08-16 11:03:26)
> If we are leaking nodes don't hide it. Also stop trying to be
> "defensive" and instead embrace Kasan et al.

If you want to go even further, record the stacks of each allocator.

As we are using kmalloc of each node and operate like a cache, we can do
something like kmemleak_update_trace() on i915_buddy_alloc().


> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/i915_buddy.c | 7 +------
>  1 file changed, 1 insertion(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_buddy.c b/drivers/gpu/drm/i915/i915_buddy.c
> index b679ab6fd889..5995247fdf76 100644
> --- a/drivers/gpu/drm/i915/i915_buddy.c
> +++ b/drivers/gpu/drm/i915/i915_buddy.c
> @@ -171,15 +171,10 @@ int i915_buddy_init(struct i915_buddy_mm *mm, u64 size, u64 chunk_size)
>  
>  void i915_buddy_fini(struct i915_buddy_mm *mm)
>  {
> -       int err = 0;
>         int i;
>  
>         for (i = 0; i < mm->n_roots; ++i) {
> -               if (!i915_buddy_block_is_free(mm->roots[i])) {
> -                       err = -EBUSY;
> -                       continue;
> -               }
> -
> +               GEM_WARN_ON(!i915_buddy_block_is_free(mm->roots[i]));
>                 i915_block_free(mm->roots[i]);
>         }
>  
> -- 
> 2.20.1
>

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/i915/i915_buddy.c b/drivers/gpu/drm/i915/i915_buddy.c
index b679ab6fd889..3b30e05ffe53 100644
--- a/drivers/gpu/drm/i915/i915_buddy.c
+++ b/drivers/gpu/drm/i915/i915_buddy.c
@@ -3,6 +3,7 @@ 
  * Copyright © 2019 Intel Corporation
  */

+#include <linux/kmemleak.h>
 #include <linux/slab.h>

 #include "i915_buddy.h"
@@ -309,6 +310,7 @@  i915_buddy_alloc(struct i915_buddy_mm *mm, unsigned int order)
        }

        mark_allocated(block);
+       kmemleak_update_trace(block);
        return block;

should do the trick