An earlier change, maybe long ago, removed the copying of self_id_count
into card->self_id_count. Since then each bus reset cleared
card->bm_retries even when it shouldn't.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
{
fw_node_event(card, node, FW_NODE_DESTROYED);
fw_node_put(node);
{
fw_node_event(card, node, FW_NODE_DESTROYED);
fw_node_put(node);
+
+ /* Topology has changed - reset bus manager retry counter */
+ card->bm_retries = 0;
}
fw_node_event(card, node, FW_NODE_CREATED);
}
fw_node_event(card, node, FW_NODE_CREATED);
+
+ /* Topology has changed - reset bus manager retry counter */
+ card->bm_retries = 0;
}
void fw_destroy_nodes(struct fw_card *card)
}
void fw_destroy_nodes(struct fw_card *card)
spin_lock_irqsave(&card->lock, flags);
spin_lock_irqsave(&card->lock, flags);
- /*
- * If the new topology has a different self_id_count the topology
- * changed, either nodes were added or removed. In that case we
- * reset the IRM reset counter.
- */
- if (card->self_id_count != self_id_count)
- card->bm_retries = 0;
-
card->node_id = node_id;
/*
* Update node_id before generation to prevent anybody from using
card->node_id = node_id;
/*
* Update node_id before generation to prevent anybody from using
* We need to store up to 4 self ID for a maximum of 63
* devices plus 3 words for the topology map header.
*/
* We need to store up to 4 self ID for a maximum of 63
* devices plus 3 words for the topology map header.
*/
u32 topology_map[252 + 3];
u32 broadcast_channel;
u32 topology_map[252 + 3];
u32 broadcast_channel;