]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fpga: Simplify and improve fpga bridge test using deferred actions
authorMarco Pagani <marpagan@redhat.com>
Thu, 25 Jul 2024 12:50:30 +0000 (14:50 +0200)
committerXu Yilun <yilun.xu@linux.intel.com>
Wed, 14 Aug 2024 15:51:03 +0000 (23:51 +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-3-marpagan@redhat.com
Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
drivers/fpga/tests/fpga-bridge-test.c

index 2f7a24f238083c9422b0ad01afc7bb1f3b1a93a4..b9ab29809e961926055862bd4b139a30064841b3 100644 (file)
@@ -23,6 +23,13 @@ struct bridge_ctx {
        struct bridge_stats stats;
 };
 
+/*
+ * Wrapper to avoid a cast warning when passing the action function directly
+ * to kunit_add_action().
+ */
+KUNIT_DEFINE_ACTION_WRAPPER(fpga_bridge_unregister_wrapper, fpga_bridge_unregister,
+                           struct fpga_bridge *);
+
 static int op_enable_set(struct fpga_bridge *bridge, bool enable)
 {
        struct bridge_stats *stats = bridge->priv;
@@ -50,6 +57,7 @@ static const struct fpga_bridge_ops fake_bridge_ops = {
 static struct bridge_ctx *register_test_bridge(struct kunit *test, const char *dev_name)
 {
        struct bridge_ctx *ctx;
+       int ret;
 
        ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
@@ -61,13 +69,10 @@ static struct bridge_ctx *register_test_bridge(struct kunit *test, const char *d
                                           &ctx->stats);
        KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->bridge));
 
-       return ctx;
-}
+       ret = kunit_add_action_or_reset(test, fpga_bridge_unregister_wrapper, ctx->bridge);
+       KUNIT_ASSERT_EQ(test, ret, 0);
 
-static void unregister_test_bridge(struct kunit *test, struct bridge_ctx *ctx)
-{
-       fpga_bridge_unregister(ctx->bridge);
-       kunit_device_unregister(test, ctx->dev);
+       return ctx;
 }
 
 static void fpga_bridge_test_get(struct kunit *test)
@@ -141,8 +146,6 @@ static void fpga_bridge_test_get_put_list(struct kunit *test)
        fpga_bridges_put(&bridge_list);
 
        KUNIT_EXPECT_TRUE(test, list_empty(&bridge_list));
-
-       unregister_test_bridge(test, ctx_1);
 }
 
 static int fpga_bridge_test_init(struct kunit *test)
@@ -152,11 +155,6 @@ static int fpga_bridge_test_init(struct kunit *test)
        return 0;
 }
 
-static void fpga_bridge_test_exit(struct kunit *test)
-{
-       unregister_test_bridge(test, test->priv);
-}
-
 static struct kunit_case fpga_bridge_test_cases[] = {
        KUNIT_CASE(fpga_bridge_test_get),
        KUNIT_CASE(fpga_bridge_test_toggle),
@@ -167,7 +165,6 @@ static struct kunit_case fpga_bridge_test_cases[] = {
 static struct kunit_suite fpga_bridge_suite = {
        .name = "fpga_bridge",
        .init = fpga_bridge_test_init,
-       .exit = fpga_bridge_test_exit,
        .test_cases = fpga_bridge_test_cases,
 };