aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2009-03-10 16:07:46 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2009-03-24 15:56:51 -0400
commite1dc7cab43619a2fbc90fd4cd712bd3fff703768 (patch)
tree71c0868fbd395e7dd67e4add14aa5b247b9693ce
parenta38a00fdef98a8eda23a25e54490b32865bc7c33 (diff)
firewire: core: increase bus manager grace period
Per IEEE 1394 clause 8.4.2.5, bus manager capable nodes which are not incumbent shall wait at least 125ms before trying to establish themselves as bus manager. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
-rw-r--r--drivers/firewire/fw-card.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/firewire/fw-card.c b/drivers/firewire/fw-card.c
index f2b363ea443e..b3463b8d8c60 100644
--- a/drivers/firewire/fw-card.c
+++ b/drivers/firewire/fw-card.c
@@ -368,9 +368,11 @@ static void fw_card_bm_work(struct work_struct *work)
368 atomic_read(&root_device->state) == FW_DEVICE_RUNNING; 368 atomic_read(&root_device->state) == FW_DEVICE_RUNNING;
369 root_device_is_cmc = root_device && root_device->cmc; 369 root_device_is_cmc = root_device && root_device->cmc;
370 root_id = root_node->node_id; 370 root_id = root_node->node_id;
371 grace = time_after(jiffies, card->reset_jiffies + DIV_ROUND_UP(HZ, 10));
372 irm_device = irm_node->data; 371 irm_device = irm_node->data;
373 local_device = local_node->data; 372 local_device = local_node->data;
373
374 grace = time_after(jiffies, card->reset_jiffies + DIV_ROUND_UP(HZ, 8));
375
374 if (is_next_generation(generation, card->bm_generation) || 376 if (is_next_generation(generation, card->bm_generation) ||
375 (card->bm_generation != generation && grace)) { 377 (card->bm_generation != generation && grace)) {
376 /* 378 /*
@@ -434,12 +436,11 @@ static void fw_card_bm_work(struct work_struct *work)
434 } 436 }
435 } else if (card->bm_generation != generation) { 437 } else if (card->bm_generation != generation) {
436 /* 438 /*
437 * OK, we weren't BM in the last generation, and it's 439 * We weren't BM in the last generation, and the last
438 * less than 100ms since last bus reset. Reschedule 440 * bus reset is less than 125ms ago. Reschedule this job.
439 * this task 100ms from now.
440 */ 441 */
441 spin_unlock_irqrestore(&card->lock, flags); 442 spin_unlock_irqrestore(&card->lock, flags);
442 fw_schedule_bm_work(card, DIV_ROUND_UP(HZ, 10)); 443 fw_schedule_bm_work(card, DIV_ROUND_UP(HZ, 8));
443 goto out; 444 goto out;
444 } 445 }
445 446