summaryrefslogtreecommitdiffstats
path: root/drivers/firewire
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2008-03-24 20:57:12 +0100
committerStefan Richter <stefanr@s5r6.in-berlin.de>2008-04-18 17:55:36 +0200
commit25b1c3d8889f982ebc6c7b996cfc7fa5f1dce533 (patch)
tree1af972dbd20246573115769af3b6baa9d489fdab /drivers/firewire
parent2a0a2590498be7b92e3e76409c9b8ee722e23c8f (diff)
downloadkernel-crypto-25b1c3d8889f982ebc6c7b996cfc7fa5f1dce533.tar.gz
kernel-crypto-25b1c3d8889f982ebc6c7b996cfc7fa5f1dce533.tar.xz
kernel-crypto-25b1c3d8889f982ebc6c7b996cfc7fa5f1dce533.zip
firewire: fix synchronization of gap counts
Fix: The fact that nodes had different gap counts would be overlooked if the bus manager code would pick gap count 63 because of beta repeaters or because of very large hop counts. In this case, the bus manager code would miss that it actually has to send the PHY config packet with gap count 63. Related trivial changes: Use bool for an int used as bool, touch up some comments. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire')
-rw-r--r--drivers/firewire/fw-card.c8
-rw-r--r--drivers/firewire/fw-topology.c7
2 files changed, 7 insertions, 8 deletions
diff --git a/drivers/firewire/fw-card.c b/drivers/firewire/fw-card.c
index 7e4012db6ad..681bb8d4ef6 100644
--- a/drivers/firewire/fw-card.c
+++ b/drivers/firewire/fw-card.c
@@ -220,7 +220,7 @@ fw_card_bm_work(struct work_struct *work)
struct bm_data bmd;
unsigned long flags;
int root_id, new_root_id, irm_id, gap_count, generation, grace;
- int do_reset = 0;
+ bool do_reset = false;
spin_lock_irqsave(&card->lock, flags);
local_node = card->local_node;
@@ -360,14 +360,14 @@ fw_card_bm_work(struct work_struct *work)
gap_count = 63;
/*
- * Finally, figure out if we should do a reset or not. If we've
- * done less that 5 resets with the same physical topology and we
+ * Finally, figure out if we should do a reset or not. If we have
+ * done less than 5 resets with the same physical topology and we
* have either a new root or a new gap count setting, let's do it.
*/
if (card->bm_retries++ < 5 &&
(card->gap_count != gap_count || new_root_id != root_id))
- do_reset = 1;
+ do_reset = true;
spin_unlock_irqrestore(&card->lock, flags);
diff --git a/drivers/firewire/fw-topology.c b/drivers/firewire/fw-topology.c
index ebdec4c6c68..213b0ff8f3d 100644
--- a/drivers/firewire/fw-topology.c
+++ b/drivers/firewire/fw-topology.c
@@ -290,12 +290,11 @@ static struct fw_node *build_tree(struct fw_card *card,
beta_repeaters_present = true;
/*
- * If all PHYs does not report the same gap count
- * setting, we fall back to 63 which will force a gap
- * count reconfiguration and a reset.
+ * If PHYs report different gap counts, set an invalid count
+ * which will force a gap count reconfiguration and a reset.
*/
if (SELF_ID_GAP_COUNT(q) != gap_count)
- gap_count = 63;
+ gap_count = 0;
update_hop_count(node);