I had to send this out once more.
This time with the right mail addresses and a much simplified patch #3.
Christian.
Am 06.05.22 um 16:10 schrieb Christian König:
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.koenig@amd.com
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;
return &array->base;goto error_free;
-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)