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; |
