diff options
Diffstat (limited to 'drivers/firewire/fw-topology.c')
-rw-r--r-- | drivers/firewire/fw-topology.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/firewire/fw-topology.c b/drivers/firewire/fw-topology.c index c9be6e6948c4..8dd6703b55cd 100644 --- a/drivers/firewire/fw-topology.c +++ b/drivers/firewire/fw-topology.c | |||
@@ -518,6 +518,18 @@ fw_core_handle_bus_reset(struct fw_card *card, | |||
518 | struct fw_node *local_node; | 518 | struct fw_node *local_node; |
519 | unsigned long flags; | 519 | unsigned long flags; |
520 | 520 | ||
521 | /* | ||
522 | * If the selfID buffer is not the immediate successor of the | ||
523 | * previously processed one, we cannot reliably compare the | ||
524 | * old and new topologies. | ||
525 | */ | ||
526 | if (!is_next_generation(generation, card->generation) && | ||
527 | card->local_node != NULL) { | ||
528 | fw_notify("skipped bus generations, destroying all nodes\n"); | ||
529 | fw_destroy_nodes(card); | ||
530 | card->bm_retries = 0; | ||
531 | } | ||
532 | |||
521 | spin_lock_irqsave(&card->lock, flags); | 533 | spin_lock_irqsave(&card->lock, flags); |
522 | 534 | ||
523 | card->node_id = node_id; | 535 | card->node_id = node_id; |