Re: [PATCH 0/3] firewire: core: add KUnit tests for tree building
From: Takashi Sakamoto
Date: Tue Aug 11 2026 - 04:14:08 EST
On Mon, Aug 10, 2026 at 03:41:16PM +0900, Takashi Sakamoto wrote:
> Hi,
>
> The core function builds internal node tree by parsing self ID sequence
> at bus reset. Abdun Nihaal points to a memory leak in this process at
> encountering a failure in the middle of self ID sequence enumeration[1].
> This issue is not yet solved, and some unit tests make it easier to work
> for it, mainly to avoid some regressions when refactoring codes.
>
> This patchset adds some KUnit tests for the purpose. Especially, the
> tests added at the last patch includes actual cases to hit the memory
> leak.
>
> In my development environment (Ubuntu 26.04, amd64), I can see the
> memory leak by enabling and redirecting some tracepoints events to kmsg
> on the qemu process for KUnit tests execution:
>
> ```
> $ python3 tools/testing/kunit/kunit.py run \
> --arch=x86_64 \
> --cross_compile=x86_64-linux-gnu- \
> --kunitconfig=drivers/firewire/ \
> --kconfig_add=CONFIG_FTRACE=y \
> --kernel_args=tp_printk=1 \
> --kernel_args=trace_event=kmem:kmalloc,kmem:kfree \
> --kernel_args=hash_pointers=never \
> --raw_output=all
> ```
>
> In the KUnit tests for successful cases, the allocated memory objects
> are released successfully in the test side, like:
>
> ```
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0b80 bytes_req=48 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0b40 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kfree: call_site=for_each_fw_node+0x17c/0x230 ptr=ffff8e10413f0b40
> kfree: call_site=for_each_fw_node+0x17c/0x230 ptr=ffff8e10413f0b80
> ```
>
> For the issued cases, we can see no kfree events corresponding to the
> allocated memory objects, like:
>
> ```
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0940 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0900 bytes_req=48 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f08c0 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0880 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> firewire_core node_tree_test_invalid_parent_port_count.dummy-device: parent port inconsistency for node 3: parent_count=2
> ...
> ```
>
> The memory objects remain in the build_tree() function and should be
> released internally. This is the addressing issue.
>
> [1] https://lore.kernel.org/lkml/20260801110915.82561-1-nihaal@xxxxxxxxxxxxxx/
>
>
> Takashi Sakamoto (3):
> firewire: core: add KUnit test skeleton for node tree
> firewire: core: add KUnit tests for successful tree building
> firewire: core: add KUnit tests for failure of tree building
>
> drivers/firewire/.kunitconfig | 1 +
> drivers/firewire/Kconfig | 15 +
> drivers/firewire/core-topology.c | 4 +
> drivers/firewire/node-tree-test.c | 611 ++++++++++++++++++++++++++++++
> 4 files changed, 631 insertions(+)
> create mode 100644 drivers/firewire/node-tree-test.c
Applied to for-next branch.
Regards
Takashi Sakamoto