]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fpga: Simplify and improve fpga mgr test using deferred actions
authorMarco Pagani <marpagan@redhat.com>
Thu, 25 Jul 2024 12:50:29 +0000 (14:50 +0200)
committerXu Yilun <yilun.xu@linux.intel.com>
Wed, 14 Aug 2024 15:50:01 +0000 (23:50 +0800)
Use deferred actions to simplify the test suite and avoid potential memory
leaks when test cases fail. Remove unnecessary calls to
kunit_device_unregister() since kunit devices are tied to the test context
and released by a deferred action when the test is completed.

Signed-off-by: Marco Pagani <marpagan@redhat.com>
Acked-by: Xu Yilun <yilun.xu@intel.com>
Link: https://lore.kernel.org/r/20240725125031.308195-2-marpagan@redhat.com
Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
drivers/fpga/tests/fpga-mgr-test.c

index 125b3a4d43c6ab3cfbf0a3dc9090985f09827752..9cb37aefbac4b23d3a33262e70b221ae271f1b52 100644 (file)
@@ -44,6 +44,16 @@ struct mgr_ctx {
        struct mgr_stats stats;
 };
 
+/*
+ * Wrappers to avoid cast warnings when passing action functions directly
+ * to kunit_add_action().
+ */
+KUNIT_DEFINE_ACTION_WRAPPER(sg_free_table_wrapper, sg_free_table,
+                           struct sg_table *);
+
+KUNIT_DEFINE_ACTION_WRAPPER(fpga_image_info_free_wrapper, fpga_image_info_free,
+                           struct fpga_image_info *);
+
 /**
  * init_test_buffer() - Allocate and initialize a test image in a buffer.
  * @test: KUnit test context object.
@@ -257,6 +267,9 @@ static void fpga_mgr_test_img_load_sgt(struct kunit *test)
        KUNIT_ASSERT_EQ(test, ret, 0);
        sg_init_one(sgt->sgl, img_buf, IMAGE_SIZE);
 
+       ret = kunit_add_action_or_reset(test, sg_free_table_wrapper, sgt);
+       KUNIT_ASSERT_EQ(test, ret, 0);
+
        ctx->img_info->sgt = sgt;
 
        ret = fpga_mgr_load(ctx->mgr, ctx->img_info);
@@ -273,13 +286,12 @@ static void fpga_mgr_test_img_load_sgt(struct kunit *test)
        KUNIT_EXPECT_EQ(test, ctx->stats.op_write_init_seq, ctx->stats.op_parse_header_seq + 1);
        KUNIT_EXPECT_EQ(test, ctx->stats.op_write_sg_seq, ctx->stats.op_parse_header_seq + 2);
        KUNIT_EXPECT_EQ(test, ctx->stats.op_write_complete_seq, ctx->stats.op_parse_header_seq + 3);
-
-       sg_free_table(ctx->img_info->sgt);
 }
 
 static int fpga_mgr_test_init(struct kunit *test)
 {
        struct mgr_ctx *ctx;
+       int ret;
 
        ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
@@ -294,19 +306,14 @@ static int fpga_mgr_test_init(struct kunit *test)
        ctx->img_info = fpga_image_info_alloc(ctx->dev);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->img_info);
 
+       ret = kunit_add_action_or_reset(test, fpga_image_info_free_wrapper, ctx->img_info);
+       KUNIT_ASSERT_EQ(test, ret, 0);
+
        test->priv = ctx;
 
        return 0;
 }
 
-static void fpga_mgr_test_exit(struct kunit *test)
-{
-       struct mgr_ctx *ctx = test->priv;
-
-       fpga_image_info_free(ctx->img_info);
-       kunit_device_unregister(test, ctx->dev);
-}
-
 static struct kunit_case fpga_mgr_test_cases[] = {
        KUNIT_CASE(fpga_mgr_test_get),
        KUNIT_CASE(fpga_mgr_test_lock),
@@ -318,7 +325,6 @@ static struct kunit_case fpga_mgr_test_cases[] = {
 static struct kunit_suite fpga_mgr_suite = {
        .name = "fpga_mgr",
        .init = fpga_mgr_test_init,
-       .exit = fpga_mgr_test_exit,
        .test_cases = fpga_mgr_test_cases,
 };