• Jinjie Ruan's avatar
    clk: test: Fix some memory leaks · 6b5cca78
    Jinjie Ruan authored
    CONFIG_CLK_KUNIT_TEST=y, CONFIG_DEBUG_KMEMLEAK=y
    and CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN=y, the following memory leak occurs.
    
    If the KUNIT_ASSERT_*() fails, the latter (exit() or testcases)
    clk_put() or clk_hw_unregister() will fail to release the clk resource
    and cause memory leaks, use new clk_hw_register_kunit()
    and clk_hw_get_clk_kunit() to automatically release them.
    
    	unreferenced object 0xffffff80c6af5000 (size 512):
    	  comm "kunit_try_catch", pid 371, jiffies 4294896001
    	  hex dump (first 32 bytes):
    	    20 4c c0 86 e1 ff ff ff e0 1a c0 86 e1 ff ff ff   L..............
    	    c0 75 e3 c6 80 ff ff ff 00 00 00 00 00 00 00 00  .u..............
    	  backtrace (crc 8ca788fa):
    	    [<00000000e21852d0>] kmemleak_alloc+0x34/0x40
    	    [<000000009c583f7b>] __kmalloc_cache_noprof+0x26c/0x2f4
    	    [<00000000d1bc850c>] __clk_register+0x80/0x1ecc
    	    [<00000000b08c78c5>] clk_hw_register+0xc4/0x110
    	    [<00000000b16d6df8>] clk_multiple_parents_mux_test_init+0x238/0x288
    	    [<0000000014a7e804>] kunit_try_run_case+0x10c/0x3ac
    	    [<0000000026b41f03>] kunit_generic_run_threadfn_adapter+0x80/0xec
    	    [<0000000066619fb8>] kthread+0x2e8/0x374
    	    [<00000000a1157f53>] ret_from_fork+0x10/0x20
    	unreferenced object 0xffffff80c6e37880 (size 96):
    	  comm "kunit_try_catch", pid 371, jiffies 4294896002
    	  hex dump (first 32 bytes):
    	    00 50 af c6 80 ff ff ff 00 00 00 00 00 00 00 00  .P..............
    	    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    	  backtrace (crc b4b766dd):
    	    [<00000000e21852d0>] kmemleak_alloc+0x34/0x40
    	    [<000000009c583f7b>] __kmalloc_cache_noprof+0x26c/0x2f4
    	    [<0000000086e7dd64>] clk_hw_create_clk.part.0.isra.0+0x58/0x2f4
    	    [<00000000dcf1ac31>] clk_hw_get_clk+0x8c/0x114
    	    [<000000006fab5bfa>] clk_test_multiple_parents_mux_set_range_set_parent_get_rate+0x3c/0xa0
    	    [<00000000c97db55a>] kunit_try_run_case+0x13c/0x3ac
    	    [<0000000026b41f03>] kunit_generic_run_threadfn_adapter+0x80/0xec
    	    [<0000000066619fb8>] kthread+0x2e8/0x374
    	    [<00000000a1157f53>] ret_from_fork+0x10/0x20
    	unreferenced object 0xffffff80c2b56900 (size 96):
    	  comm "kunit_try_catch", pid 395, jiffies 4294896107
    	  hex dump (first 32 bytes):
    	    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    	    00 00 00 00 00 00 00 00 e0 49 c0 86 e1 ff ff ff  .........I......
    	  backtrace (crc 2e59b327):
    	    [<00000000e21852d0>] kmemleak_alloc+0x34/0x40
    	    [<00000000c6c715a8>] __kmalloc_noprof+0x2bc/0x3c0
    	    [<00000000f04a7951>] __clk_register+0x70c/0x1ecc
    	    [<00000000b08c78c5>] clk_hw_register+0xc4/0x110
    	    [<00000000cafa9563>] clk_orphan_transparent_multiple_parent_mux_test_init+0x1a8/0x1dc
    	    [<0000000014a7e804>] kunit_try_run_case+0x10c/0x3ac
    	    [<0000000026b41f03>] kunit_generic_run_threadfn_adapter+0x80/0xec
    	    [<0000000066619fb8>] kthread+0x2e8/0x374
    	    [<00000000a1157f53>] ret_from_fork+0x10/0x20
    	unreferenced object 0xffffff80c87c9400 (size 512):
    	  comm "kunit_try_catch", pid 483, jiffies 4294896907
    	  hex dump (first 32 bytes):
    	    a0 44 c0 86 e1 ff ff ff e0 1a c0 86 e1 ff ff ff  .D..............
    	    20 05 a8 c8 80 ff ff ff 00 00 00 00 00 00 00 00   ...............
    	  backtrace (crc c25b43fb):
    	    [<00000000e21852d0>] kmemleak_alloc+0x34/0x40
    	    [<000000009c583f7b>] __kmalloc_cache_noprof+0x26c/0x2f4
    	    [<00000000d1bc850c>] __clk_register+0x80/0x1ecc
    	    [<00000000b08c78c5>] clk_hw_register+0xc4/0x110
    	    [<000000002688be48>] clk_single_parent_mux_test_init+0x1a0/0x1d4
    	    [<0000000014a7e804>] kunit_try_run_case+0x10c/0x3ac
    	    [<0000000026b41f03>] kunit_generic_run_threadfn_adapter+0x80/0xec
    	    [<0000000066619fb8>] kthread+0x2e8/0x374
    	    [<00000000a1157f53>] ret_from_fork+0x10/0x20
    	unreferenced object 0xffffff80c6dd2380 (size 96):
    	  comm "kunit_try_catch", pid 483, jiffies 4294896908
    	  hex dump (first 32 bytes):
    	    00 94 7c c8 80 ff ff ff 00 00 00 00 00 00 00 00  ..|.............
    	    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    	  backtrace (crc 4401212):
    	    [<00000000e21852d0>] kmemleak_alloc+0x34/0x40
    	    [<000000009c583f7b>] __kmalloc_cache_noprof+0x26c/0x2f4
    	    [<0000000086e7dd64>] clk_hw_create_clk.part.0.isra.0+0x58/0x2f4
    	    [<00000000dcf1ac31>] clk_hw_get_clk+0x8c/0x114
    	    [<0000000063eb2c90>] clk_test_single_parent_mux_set_range_disjoint_child_last+0x3c/0xa0
    	    [<00000000c97db55a>] kunit_try_run_case+0x13c/0x3ac
    	    [<0000000026b41f03>] kunit_generic_run_threadfn_adapter+0x80/0xec
    	    [<0000000066619fb8>] kthread+0x2e8/0x374
    	    [<00000000a1157f53>] ret_from_fork+0x10/0x20
    	......
    
    Fixes: 02cdeace ("clk: tests: Add tests for single parent mux")
    Fixes: 2e9cad1a ("clk: tests: Add some tests for orphan with multiple parents")
    Fixes: 433fb8a6 ("clk: tests: Add missing test case for ranges")
    Signed-off-by: default avatarJinjie Ruan <ruanjinjie@huawei.com>
    Link: https://lore.kernel.org/r/20241016022658.2131826-1-ruanjinjie@huawei.comReviewed-by: default avatarMaxime Ripard <mripard@kernel.org>
    Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    6b5cca78
clk_test.c 86 KB