hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/firewire/core-topology.c
....@@ -1,21 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Incremental bus scan, based on bus topology
34 *
45 * Copyright (C) 2004-2006 Kristian Hoegsberg <krh@bitplanet.net>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program; if not, write to the Free Software Foundation,
18
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
196 */
207
218 #include <linux/bug.h>
....@@ -67,6 +54,7 @@
6754 switch (port_type) {
6855 case SELFID_PORT_CHILD:
6956 (*child_port_count)++;
57
+ fallthrough;
7058 case SELFID_PORT_PARENT:
7159 case SELFID_PORT_NCONN:
7260 (*total_port_count)++;
....@@ -386,16 +374,13 @@
386374 card->bm_retries = 0;
387375 }
388376
377
+/* Must be called with card->lock held */
389378 void fw_destroy_nodes(struct fw_card *card)
390379 {
391
- unsigned long flags;
392
-
393
- spin_lock_irqsave(&card->lock, flags);
394380 card->color++;
395381 if (card->local_node != NULL)
396382 for_each_fw_node(card, card->local_node, report_lost_node);
397383 card->local_node = NULL;
398
- spin_unlock_irqrestore(&card->lock, flags);
399384 }
400385
401386 static void move_tree(struct fw_node *node0, struct fw_node *node1, int port)
....@@ -521,6 +506,8 @@
521506 struct fw_node *local_node;
522507 unsigned long flags;
523508
509
+ spin_lock_irqsave(&card->lock, flags);
510
+
524511 /*
525512 * If the selfID buffer is not the immediate successor of the
526513 * previously processed one, we cannot reliably compare the
....@@ -531,8 +518,6 @@
531518 fw_destroy_nodes(card);
532519 card->bm_retries = 0;
533520 }
534
-
535
- spin_lock_irqsave(&card->lock, flags);
536521
537522 card->broadcast_channel_allocated = card->broadcast_channel_auto_allocated;
538523 card->node_id = node_id;