On Fri, May 06, 2022 at 04:10:05PM +0200, Christian König wrote:
> The selftests, fix the error handling, remove unused functions and stop
> leaking memory in failed tests.
> 
> v2: fix the memory leak correctly.
> 
> Signed-off-by: Christian König <christian.koe...@amd.com>

I'm still a bit lost on all this (maybe add an explainer why you want to
drop dma_fence_signal() - it's just not necessary for test functionality).

But I think it's at least correct now.

Reviewed-by: Daniel Vetter <daniel.vet...@ffwll.ch>

I've seen you've resent it to get intel-gfx-ci to look at it, so assuming
that's all fine I think it's now all reviewed and ready for merging.
-Daniel
> ---
>  drivers/dma-buf/st-dma-fence-unwrap.c | 48 +++++++++++----------------
>  1 file changed, 19 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/dma-buf/st-dma-fence-unwrap.c 
> b/drivers/dma-buf/st-dma-fence-unwrap.c
> index 039f016b57be..e20c5a7dcfe4 100644
> --- a/drivers/dma-buf/st-dma-fence-unwrap.c
> +++ b/drivers/dma-buf/st-dma-fence-unwrap.c
> @@ -4,27 +4,19 @@
>   * Copyright (C) 2022 Advanced Micro Devices, Inc.
>   */
>  
> +#include <linux/dma-fence.h>
> +#include <linux/dma-fence-array.h>
> +#include <linux/dma-fence-chain.h>
>  #include <linux/dma-fence-unwrap.h>
> -#if 0
> -#include <linux/kernel.h>
> -#include <linux/kthread.h>
> -#include <linux/mm.h>
> -#include <linux/sched/signal.h>
> -#include <linux/slab.h>
> -#include <linux/spinlock.h>
> -#include <linux/random.h>
> -#endif
>  
>  #include "selftest.h"
>  
>  #define CHAIN_SZ (4 << 10)
>  
> -static inline struct mock_fence {
> +struct mock_fence {
>       struct dma_fence base;
>       spinlock_t lock;
> -} *to_mock_fence(struct dma_fence *f) {
> -     return container_of(f, struct mock_fence, base);
> -}
> +};
>  
>  static const char *mock_name(struct dma_fence *f)
>  {
> @@ -45,7 +37,8 @@ static struct dma_fence *mock_fence(void)
>               return NULL;
>  
>       spin_lock_init(&f->lock);
> -     dma_fence_init(&f->base, &mock_ops, &f->lock, 0, 0);
> +     dma_fence_init(&f->base, &mock_ops, &f->lock,
> +                    dma_fence_context_alloc(1), 1);
>  
>       return &f->base;
>  }
> @@ -59,7 +52,7 @@ static struct dma_fence *mock_array(unsigned int 
> num_fences, ...)
>  
>       fences = kcalloc(num_fences, sizeof(*fences), GFP_KERNEL);
>       if (!fences)
> -             return NULL;
> +             goto error_put;
>  
>       va_start(valist, num_fences);
>       for (i = 0; i < num_fences; ++i)
> @@ -70,13 +63,17 @@ static struct dma_fence *mock_array(unsigned int 
> num_fences, ...)
>                                      dma_fence_context_alloc(1),
>                                      1, false);
>       if (!array)
> -             goto cleanup;
> +             goto error_free;
>       return &array->base;
>  
> -cleanup:
> -     for (i = 0; i < num_fences; ++i)
> -             dma_fence_put(fences[i]);
> +error_free:
>       kfree(fences);
> +
> +error_put:
> +     va_start(valist, num_fences);
> +     for (i = 0; i < num_fences; ++i)
> +             dma_fence_put(va_arg(valist, typeof(*fences)));
> +     va_end(valist);
>       return NULL;
>  }
>  
> @@ -113,7 +110,6 @@ static int sanitycheck(void *arg)
>       if (!chain)
>               return -ENOMEM;
>  
> -     dma_fence_signal(f);
>       dma_fence_put(chain);
>       return err;
>  }
> @@ -154,10 +150,8 @@ static int unwrap_array(void *arg)
>               err = -EINVAL;
>       }
>  
> -     dma_fence_signal(f1);
> -     dma_fence_signal(f2);
>       dma_fence_put(array);
> -     return 0;
> +     return err;
>  }
>  
>  static int unwrap_chain(void *arg)
> @@ -196,10 +190,8 @@ static int unwrap_chain(void *arg)
>               err = -EINVAL;
>       }
>  
> -     dma_fence_signal(f1);
> -     dma_fence_signal(f2);
>       dma_fence_put(chain);
> -     return 0;
> +     return err;
>  }
>  
>  static int unwrap_chain_array(void *arg)
> @@ -242,10 +234,8 @@ static int unwrap_chain_array(void *arg)
>               err = -EINVAL;
>       }
>  
> -     dma_fence_signal(f1);
> -     dma_fence_signal(f2);
>       dma_fence_put(chain);
> -     return 0;
> +     return err;
>  }
>  
>  int dma_fence_unwrap(void)
> -- 
> 2.25.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

Reply via email to