]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
firewire: core: Open-code topology list walk
authorKaitao Cheng <chengkaitao@kylinos.cn>
Tue, 9 Jun 2026 06:13:35 +0000 (14:13 +0800)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sat, 13 Jun 2026 02:10:23 +0000 (11:10 +0900)
A later change will make list_for_each_entry() cache the next element
before entering the loop body. for_each_fw_node() intentionally appends
newly discovered child nodes to the temporary walk list while the list is
being traversed.

Keep the loop open-coded so the next node is looked up only after
children have been appended. This preserves the current breadth-first
traversal semantics and prepares the code for the list iterator update.

Signed-off-by: Kaitao Cheng <chengkaitao@kylinos.cn>
Link: https://lore.kernel.org/r/20260609061347.93688-3-kaitao.cheng@linux.dev
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
drivers/firewire/core-topology.c

index bb2d2db30795e93eff319509091bc5fb53e26262..df2ac0dab106053e524bb79a662c23dce539afe2 100644 (file)
@@ -272,7 +272,9 @@ static void for_each_fw_node(struct fw_card *card, struct fw_node *root,
        fw_node_get(root);
        list_add_tail(&root->link, &list);
        parent = NULL;
-       list_for_each_entry(node, &list, link) {
+       for (node = list_first_entry(&list, typeof(*node), link);
+            !list_entry_is_head(node, &list, link);
+            node = list_next_entry(node, link)) {
                node->color = card->color;
 
                for (i = 0; i < node->port_count; i++) {