Skip to content

Commit

Permalink
firewire: fix synchronization of gap counts
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Stefan Richter committed Apr 18, 2008
1 parent 2a0a259 commit 25b1c3d
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 8 deletions.
8 changes: 4 additions & 4 deletions drivers/firewire/fw-card.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down
7 changes: 3 additions & 4 deletions drivers/firewire/fw-topology.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit 25b1c3d

Please sign in to comment.