mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:46:16 +00:00
fpga: Simplify and improve fpga region test using deferred actions
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. Other changes: fix a typo by changing the test suite name to fpga_region in the kunit_suite struct. Signed-off-by: Marco Pagani <marpagan@redhat.com> Acked-by: Xu Yilun <yilun.xu@intel.com> Link: https://lore.kernel.org/r/20240725125031.308195-4-marpagan@redhat.com Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
This commit is contained in:
parent
3c2c01849c
commit
d783ed2f5f
@ -35,6 +35,19 @@ struct test_ctx {
|
||||
struct mgr_stats mgr_stats;
|
||||
};
|
||||
|
||||
/*
|
||||
* Wrappers to avoid cast warnings when passing action functions directly
|
||||
* to kunit_add_action().
|
||||
*/
|
||||
KUNIT_DEFINE_ACTION_WRAPPER(fpga_image_info_free_wrapper, fpga_image_info_free,
|
||||
struct fpga_image_info *);
|
||||
|
||||
KUNIT_DEFINE_ACTION_WRAPPER(fpga_bridge_unregister_wrapper, fpga_bridge_unregister,
|
||||
struct fpga_bridge *);
|
||||
|
||||
KUNIT_DEFINE_ACTION_WRAPPER(fpga_region_unregister_wrapper, fpga_region_unregister,
|
||||
struct fpga_region *);
|
||||
|
||||
static int op_write(struct fpga_manager *mgr, const char *buf, size_t count)
|
||||
{
|
||||
struct mgr_stats *stats = mgr->priv;
|
||||
@ -111,6 +124,9 @@ static void fpga_region_test_program_fpga(struct kunit *test)
|
||||
img_info = fpga_image_info_alloc(ctx->mgr_dev);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, img_info);
|
||||
|
||||
ret = kunit_add_action_or_reset(test, fpga_image_info_free_wrapper, img_info);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
img_info->buf = img_buf;
|
||||
img_info->count = sizeof(img_buf);
|
||||
|
||||
@ -130,8 +146,6 @@ static void fpga_region_test_program_fpga(struct kunit *test)
|
||||
KUNIT_EXPECT_EQ(test, 2, ctx->bridge_stats.cycles_count);
|
||||
|
||||
fpga_bridges_put(&ctx->region->bridge_list);
|
||||
|
||||
fpga_image_info_free(img_info);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -144,6 +158,7 @@ static int fpga_region_test_init(struct kunit *test)
|
||||
{
|
||||
struct test_ctx *ctx;
|
||||
struct fpga_region_info region_info = { 0 };
|
||||
int ret;
|
||||
|
||||
ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
|
||||
@ -164,6 +179,9 @@ static int fpga_region_test_init(struct kunit *test)
|
||||
|
||||
ctx->bridge_stats.enable = true;
|
||||
|
||||
ret = kunit_add_action_or_reset(test, fpga_bridge_unregister_wrapper, ctx->bridge);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
ctx->region_dev = kunit_device_register(test, "fpga-region-test-dev");
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->region_dev);
|
||||
|
||||
@ -174,24 +192,14 @@ static int fpga_region_test_init(struct kunit *test)
|
||||
ctx->region = fpga_region_register_full(ctx->region_dev, ®ion_info);
|
||||
KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->region));
|
||||
|
||||
ret = kunit_add_action_or_reset(test, fpga_region_unregister_wrapper, ctx->region);
|
||||
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||
|
||||
test->priv = ctx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void fpga_region_test_exit(struct kunit *test)
|
||||
{
|
||||
struct test_ctx *ctx = test->priv;
|
||||
|
||||
fpga_region_unregister(ctx->region);
|
||||
kunit_device_unregister(test, ctx->region_dev);
|
||||
|
||||
fpga_bridge_unregister(ctx->bridge);
|
||||
kunit_device_unregister(test, ctx->bridge_dev);
|
||||
|
||||
kunit_device_unregister(test, ctx->mgr_dev);
|
||||
}
|
||||
|
||||
static struct kunit_case fpga_region_test_cases[] = {
|
||||
KUNIT_CASE(fpga_region_test_class_find),
|
||||
KUNIT_CASE(fpga_region_test_program_fpga),
|
||||
@ -199,9 +207,8 @@ static struct kunit_case fpga_region_test_cases[] = {
|
||||
};
|
||||
|
||||
static struct kunit_suite fpga_region_suite = {
|
||||
.name = "fpga_mgr",
|
||||
.name = "fpga_region",
|
||||
.init = fpga_region_test_init,
|
||||
.exit = fpga_region_test_exit,
|
||||
.test_cases = fpga_region_test_cases,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user